SlideShare a Scribd company logo
1 of 22
Download to read offline
PGDay.IT 2011
                                                   Monash University Prato Centre
                                                       Venerdì 25 Novembre 2011




Serializable 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
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
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
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
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
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
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
PGDay.IT 2011
                                                      Monash University Prato Centre
                                                          Venerdì 25 Novembre 2011




  Snapshot Isolation
• Accede a un'istantanea (snapshot) del database
   – MultiVersion Concurrency Control (MVCC)
• Veloce e poco costoso
• Non è permesso modificare alcun valore che sia stato
  cambiato in un'altra transazione concorrente
   – Chi primo arriva...




                           Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
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
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 nell'insieme 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
PGDay.IT 2011
                                                 Monash University Prato Centre
                                                     Venerdì 25 Novembre 2011




  Esempio: Bianco e Nero

-- Crea una tabella che contiene punti colorati
CREATE TABLE punti (id int PRIMARY KEY, colore text);

-- 10 punti. Bianchi i pari, neri i dispari
INSERT 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
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
PGDay.IT 2011
                                                 Monash University Prato Centre
                                                     Venerdì 25 Novembre 2011




  Esempio: Dipendenza incrociata
-- Tabella contenente dei generici dati
CREATE TABLE dati (
    classe int NOT NULL,
    valore int NOT NULL
);

-- Dati su cui dobbiamo effettuare un'analisi
INSERT INTO dati VALUES
    (1, 10),
    (1, 20),
    (2, 100),
    (2, 200);

                      Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
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: 300
INSERT INTO dati VALUES (2, 30);
                                         INSERT INTO dati VALUES (1, 300);
COMMIT;
                                         COMMIT;
•   Ogni transazione ha modificato i dati letti dall'altra
     – Impossibile da serializzare


                               Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
PGDay.IT 2011
                                                 Monash University Prato Centre
                                                     Venerdì 25 Novembre 2011




  Esempio: Protezione scoperto
-- Simuliamo dei conti in banca
CREATE 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 'Carlo'
INSERT INTO conto VALUES
    ('Carlo', 'cassa', 500),
    ('Carlo', 'deposito', 500);

                      Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
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 900
UPDATE 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
PGDay.IT 2011
                                                       Monash University Prato Centre
                                                           Venerdì 25 Novembre 2011




   Serializable Snapshot Isolation
• A partire da PostgreSQL 9.1
   – È il primo (al momento l'unico)
• 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
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 dell'insieme 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
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 900
UPDATE 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 dell'anomalia
      – La transazione fallita può essere eseguita nuovamente

                               Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
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
  all'interno del database
   – Applicazioni più semplici
   – Meno errori
   – Meno debugging
• PostgreSQL all'avanguardia nell'industria dei database

                            Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
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
PGDay.IT 2011
                                                    Monash University Prato Centre
                                                        Venerdì 25 Novembre 2011




   Licenza Creative Commons
Attribuzione
Non commerciale
Condividi allo stesso modo
2.5 Italia

http://creativecommons.org/licenses/by-nc-sa/2.5/it/
© 2011 2ndQuadrant Italia - http://www.2ndquadrant.it




                         Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org

More Related Content

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

Serializable Snapshot Isolation in PostgreSQL 9.1

  • 1. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Serializable 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. 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. 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. 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. 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. 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. 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. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Snapshot Isolation • Accede a un'istantanea (snapshot) del database – MultiVersion Concurrency Control (MVCC) • Veloce e poco costoso • Non è permesso modificare alcun valore che sia stato cambiato in un'altra transazione concorrente – Chi primo arriva... Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  • 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. 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 nell'insieme 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. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Bianco e Nero -- Crea una tabella che contiene punti colorati CREATE TABLE punti (id int PRIMARY KEY, colore text); -- 10 punti. Bianchi i pari, neri i dispari INSERT 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. 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. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Dipendenza incrociata -- Tabella contenente dei generici dati CREATE TABLE dati ( classe int NOT NULL, valore int NOT NULL ); -- Dati su cui dobbiamo effettuare un'analisi INSERT INTO dati VALUES (1, 10), (1, 20), (2, 100), (2, 200); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  • 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: 300 INSERT INTO dati VALUES (2, 30); INSERT INTO dati VALUES (1, 300); COMMIT; COMMIT; • Ogni transazione ha modificato i dati letti dall'altra – Impossibile da serializzare Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  • 15. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Esempio: Protezione scoperto -- Simuliamo dei conti in banca CREATE 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 'Carlo' INSERT INTO conto VALUES ('Carlo', 'cassa', 500), ('Carlo', 'deposito', 500); Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  • 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 900 UPDATE 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. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Serializable Snapshot Isolation • A partire da PostgreSQL 9.1 – È il primo (al momento l'unico) • 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. 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 dell'insieme 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. 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 900 UPDATE 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 dell'anomalia – La transazione fallita può essere eseguita nuovamente Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  • 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 all'interno del database – Applicazioni più semplici – Meno errori – Meno debugging • PostgreSQL all'avanguardia nell'industria dei database Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org
  • 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. PGDay.IT 2011 Monash University Prato Centre Venerdì 25 Novembre 2011 Licenza Creative Commons Attribuzione Non commerciale Condividi allo stesso modo 2.5 Italia http://creativecommons.org/licenses/by-nc-sa/2.5/it/ © 2011 2ndQuadrant Italia - http://www.2ndquadrant.it Marco Nenciarini – marco.nenciarini@2ndQuadrant.it - ITPUG.org