PGDay.IT 2011                                                   Monash University Prato Centre                            ...
PGDay.IT 2011                                                        Monash University Prato Centre                       ...
PGDay.IT 2011                                                     Monash University Prato Centre                          ...
PGDay.IT 2011                                                         Monash University Prato Centre                      ...
PGDay.IT 2011                                                         Monash University Prato Centre                      ...
PGDay.IT 2011                                                    Monash University Prato Centre                           ...
PGDay.IT 2011                                                        Monash University Prato Centre                       ...
PGDay.IT 2011                                                      Monash University Prato Centre                         ...
PGDay.IT 2011                                                       Monash University Prato Centre                        ...
PGDay.IT 2011                                                       Monash University Prato Centre                        ...
PGDay.IT 2011                                                 Monash University Prato Centre                              ...
PGDay.IT 2011                                                          Monash University Prato Centre                     ...
PGDay.IT 2011                                                 Monash University Prato Centre                              ...
PGDay.IT 2011                                                          Monash University Prato Centre                     ...
PGDay.IT 2011                                                 Monash University Prato Centre                              ...
PGDay.IT 2011                                                        Monash University Prato Centre                       ...
PGDay.IT 2011                                                       Monash University Prato Centre                        ...
PGDay.IT 2011                                                     Monash University Prato Centre                          ...
PGDay.IT 2011                                                          Monash University Prato Centre                     ...
PGDay.IT 2011                                                       Monash University Prato Centre                        ...
PGDay.IT 2011                                                  Monash University Prato Centre                             ...
PGDay.IT 2011                                                    Monash University Prato Centre                           ...
Upcoming SlideShare
Loading in …5
×

Serializable Snapshot Isolation in PostgreSQL 9.1

641 views

Published on

Storicamente PostgreSQL fornisce il livello di isolamento "serializable" attraverso Snapshot Isolation, lasciando quindi la possibilità che si verifichino situazioni anomale quando due transazioni dipendono l'una dal risultato dell'altra.
A partire dalla versione 9.1 PostgreSQL introduce la possibilità di pensare l'accesso al database come se le transazioni concorrenti fossero realmente eseguite in sequenza, usando il Serializable Snapshot Isolation (SSI).

In questo intervento si descriverà brevemente come funziona il nuovo livello di isolamento e come trarre vantaggio dalla sua robustezza e velocità.

  • Be the first to comment

  • Be the first to like this

Serializable Snapshot Isolation in PostgreSQL 9.1

  1. 1. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011Serializable Snapshot Isolation (SSI) in PostgreSQL 9.1 Marco Nenciarini Italian PostgreSQL Users Group www.itpug.org www.postgresql.org Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  2. 2. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Chi sono?• DBA, sviluppatore e sysadmin presso 2ndQuadrant – Database OLTP business critical – Data warehousing• Membro della comunità di PostgreSQL – Co-Fondatore di ITPUG• Debian Developer Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  3. 3. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Sommario• Le transazioni e i livelli di isolamento• A cosa servono le transazioni serializzabili?• Transazioni serializzabili prima della 9.1• Anomalie• Un nuovo approccio: Serializable Snapshot Isolation• Conclusioni Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  4. 4. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Transazioni• Sequenza di operazioni eseguita in maniera atomica• Proprietà ACID – Atomicità Indivisibile, o tutto o niente – Coerenza Integrità dei dati – Isolamento Concorrenza con altre transazioni – Durabilità Persistenza dei dati Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  5. 5. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Isolamento• Sono previsti 4 livelli di isolamento – Read uncommitted nessun isolamento, può leggere da transazioni che saranno annullate (dirty read) – Read committed letture successive della stessa riga possono ritornare valori differenti (non repeatable read) – Repeatable read letture successive della stessa riga sono coerenti, ma la stessa query eseguita due volte potrebbe ritornare dati diversi (phantom read) – Serializable Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  6. 6. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Transazioni Serializzabili Se due o più transazioni vengono eseguite in maniera concorrente deve esistere una sequenza di esecuzione che porti allo stesso risultato• Il programmatore si deve assicurare solo che la transazione esegua le operazioni corrette• Il database garantisce che non ci saranno problemi di concorrenza Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  7. 7. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 In pratica nei database• Strong Strict Two Phase Locking (SS2PL) – Lock fino al commit su ogni oggetto coinvolto – Costoso – Deadlock – Database proprietari, no in PostgreSQL• Snapshot Isolation (SI) – Non garantisce la serializzabilità – Nella maggior parte dei casi è sufficiente – PostgreSQL, Oracle, Microsoft SQL Server Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  8. 8. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Snapshot Isolation• Accede a unistantanea (snapshot) del database – MultiVersion Concurrency Control (MVCC)• Veloce e poco costoso• Non è permesso modificare alcun valore che sia stato cambiato in unaltra transazione concorrente – Chi primo arriva... Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  9. 9. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Vantaggi e svantaggi di Snapshot Isolation• Letture non attendono mai, non bloccano le scritture• Evita tutti i tipi di anomalie viste fino ad ora – Dirty read – Non repetable read – Phantom read• Facilmente comprensibile – Transazioni concorrenti non si vedono fra loro• Svantaggio: Anomalie – Alcune esecuzioni non possono essere serializzate Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  10. 10. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Anomalie in Snapshot Isolation• Ci sono insiemi di transazioni per cui qualsiasi esecuzione è serializzabile – Esempio: transazioni eseguite dal benchmark TPC-C (OLTP)• Snaphot Isolation può dare luogo a anomalie quando esiste un sottoinsieme di transazioni in cui ognuna modifica qualcosa nellinsieme di dati letti dalle altre – Vincoli di integrità non dichiarati esplicitamente nel database possono essere violati (write skew) – Abbastanza raro nella pratica Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  11. 11. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Bianco e Nero-- Crea una tabella che contiene punti coloratiCREATE TABLE punti (id int PRIMARY KEY, colore text);-- 10 punti. Bianchi i pari, neri i dispariINSERT INTO punti WITH x(id) AS (SELECT generate_series(1,10)) SELECT id, CASE WHEN id % 2 = 0 THEN bianco ELSE nero END FROM x; Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  12. 12. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Bianco e Nero (pre 9.1)BEGIN ISOLATION LEVEL SERIALIZABLE;UPDATE punti SET colore = nero WHERE colore = bianco; BEGIN ISOLATION LEVEL SERIALIZABLE; UPDATE punti SET colore = bianco WHERE colore = nero; COMMIT;COMMIT;• Adesso i punti pari sono neri e i punti dispari sono bianchi – Impossibile da serializzare Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  13. 13. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Dipendenza incrociata-- Tabella contenente dei generici datiCREATE TABLE dati ( classe int NOT NULL, valore int NOT NULL);-- Dati su cui dobbiamo effettuare unanalisiINSERT INTO dati VALUES (1, 10), (1, 20), (2, 100), (2, 200); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  14. 14. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Dipendenza incrociata (pre 9.1)BEGIN ISOLATION LEVEL SERIALIZABLE;SELECT SUM(valore) FROM dati WHERE class = 1;-- Risultato: 30 BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT SUM(valore) FROM dati WHERE class = 2; -- Risultato: 300INSERT INTO dati VALUES (2, 30); INSERT INTO dati VALUES (1, 300);COMMIT; COMMIT;• Ogni transazione ha modificato i dati letti dallaltra – Impossibile da serializzare Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  15. 15. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Protezione scoperto-- Simuliamo dei conti in bancaCREATE TABLE conto ( proprietario text NOT NULL, tipo text NOT NULL, saldo money NOT NULL DEFAULT 0.00::money, PRIMARY KEY (nome, tipo));-- Inseriamo due conti appartenenti a CarloINSERT INTO conto VALUES (Carlo, cassa, 500), (Carlo, deposito, 500); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  16. 16. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Protezione scoperto (pre 9.1)BEGIN ISOLATION LEVEL SERIALIZABLE;SELECT tipo, saldo FROM conto WHERE nome = Carlo; BEGIN ISOLATION LEVEL SERIALIZABLE;-- Totale 1000, posso prelevare 900 SELECT tipo, saldo FROM conto WHERE nome = Carlo; -- Totale 1000, posso prelevare 900UPDATE conto SET saldo = saldo – 900 WHERE nome = Carlo UPDATE conto SET saldo = saldo – 900 AND tipo = deposito; WHERE nome = Carlo AND tipo = cassa;COMMIT; COMMIT;• Saldo finale: -800 – Vincolo violato Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  17. 17. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Serializable Snapshot Isolation• A partire da PostgreSQL 9.1 – È il primo (al momento lunico)• Il vecchio livello serializable diventa repeatable read – Più di quanto chiede lo standard (No Phantom Read)• Costo aggiuntivo trascurabile rispetto a SI – Molto più veloce del Two Phase Locking• Elevata concorrenza – Stessi vantaggi di SI – Nessun locking aggiuntivo Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  18. 18. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Come funziona SSI• Come Snapshot Isolation – Usa MVCC per leggere da uno snaphot• Mantiene traccia dellinsieme di lettura e scrittura di ogni transazione• Identifica i conflitti di letura/scrittura al commit• La transazione fallisce quando viene identificata una possibile anomalia – Il programma deve eseguire nuovamente la transazione• Falsi positivi Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  19. 19. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Dipendenza logica (9.1)BEGIN ISOLATION LEVEL SERIALIZABLE;SELECT tipo, saldo FROM conto WHERE nome = Carlo; BEGIN ISOLATION LEVEL SERIALIZABLE;-- Totale 1000, posso prelevare 900 SELECT tipo, saldo FROM conto WHERE nome = Carlo; -- Totale 1000, posso prelevare 900UPDATE conto SET saldo = saldo – 900 WHERE nome = Carlo UPDATE conto SET saldo = saldo – 900 AND tipo = deposito; WHERE nome = Carlo AND tipo = cassa;COMMIT; COMMIT; -- ERROR: could not serialize access• Il database si è accorto dellanomalia – La transazione fallita può essere eseguita nuovamente Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  20. 20. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Conclusioni• Alte prestazioni in ambienti ad elevata concorrenza – Riduce i conflitti – No locking• Permette di spostare la gestione della concorrenza allinterno del database – Applicazioni più semplici – Meno errori – Meno debugging• PostgreSQL allavanguardia nellindustria dei database Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  21. 21. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Domande?• E-Mail: marco.nenciarini@2ndquadrant.it• URL: www.2ndquadrant.it• Blog: blog.2ndquadrant.it Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  22. 22. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Licenza Creative CommonsAttribuzioneNon commercialeCondividi allo stesso modo2.5 Italiahttp://creativecommons.org/licenses/by-nc-sa/2.5/it/© 2011 2ndQuadrant Italia - http://www.2ndquadrant.it Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org

×