Kann die gleichzeitige Änderung von Werten die einzelne Auswahl in PostgreSQL 9.1 beeinflussen?

8

Betrachten Sie die folgende Abfrage, die in PostgreSQL 9.1 (oder 9.2) ausgeführt wird:

%Vor%

Angenommen, es handelt sich um eine ziemlich lange Abfrage (z. B. eine Minute).

Wenn zu Beginn der Abfrage 5 Millionen Datensätze vorhanden sind, für die bar = true gilt, werden während dieser Abfrage in einer anderen Transaktion Zeilen hinzugefügt und in der Tabelle foo entfernt, und für einige vorhandene Zeilen werden Aktualisierungen vorgenommen in das Feld bar .

Wirkt sich dies auf das Ergebnis der oben gezeigten Auswahlabfrage aus?

Ich weiß über Transaktionsisolation und Sichtbarkeit zwischen einzelnen Anweisungen in einer einzelnen Transaktion Bescheid, aber was ist mit einer einzelnen ausgeführten Anweisung?

    
dexter meyers 24.08.2012, 13:22
quelle

2 Antworten

10
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ tag123postgresql ___ PostgreSQL ist ein Open-Source-Objekt-relationales Datenbankmanagementsystem (ORDBMS), das für alle wichtigen Plattformen einschließlich Linux, UNIX, Windows und OS X verfügbar ist. Bitte geben Sie Ihre genaue Version von Postgres an, wenn Sie Fragen stellen. Fragen zur Administration oder erweiterten Funktionen richten Sie am besten auf dba.stackexchange.com. ___ answer12110557 ___

Die Abfrage wird eine lesekonsistente Ansicht der Daten ab dem Beginn der Abfrage sein. In Postgresql wird in der Dokumentation zur Mehrfachversions-Concurrency-Steuerung (MVCC) erläutert, wie dies geschieht (mehrere Versionen eines Datensatzes sind in der Tabelle vorhanden). In Oracle wird die Sequenzänderungsnummer (Sequence Change Number, SCN) zusammen mit "Vorher-Bildern" von geänderten Daten verwendet. Hier ist ein altes Dokument, Transaktionsverarbeitung in Postgresql mit dem Abschnitt "Speicherverwaltung nicht überschreiben". Aber werfen Sie einen Blick auf MVCC.

Oder lesen Sie das Kapitel MVCC im Postgresql-Dokument

    
___ qstntxt ___

Betrachten Sie die folgende Abfrage, die in PostgreSQL 9.1 (oder 9.2) ausgeführt wird:

%Vor%

Angenommen, es handelt sich um eine ziemlich lange Abfrage (z. B. eine Minute).

Wenn zu Beginn der Abfrage 5 Millionen Datensätze vorhanden sind, für die SELECT gilt, werden während dieser Abfrage in einer anderen Transaktion Zeilen hinzugefügt und in der Tabelle %code% entfernt, und für einige vorhandene Zeilen werden Aktualisierungen vorgenommen in das Feld %code% .

Wirkt sich dies auf das Ergebnis der oben gezeigten Auswahlabfrage aus?

Ich weiß über Transaktionsisolation und Sichtbarkeit zwischen einzelnen Anweisungen in einer einzelnen Transaktion Bescheid, aber was ist mit einer einzelnen ausgeführten Anweisung?

    
___ antwort12110554 ___

Nein.
Aufgrund des MVCC-Modells werden nur Tupel, die bei query start sichtbar sind, in einem einzigen %code% verwendet. Details im Handbuch hier :

  

Read Committed ist die Standardisolationsstufe in PostgreSQL. Wenn ein   Transaktion verwendet diese Isolationsstufe, eine SELECT-Abfrage (ohne FOR   UPDATE / SHARE-Klausel) sieht nur Daten, die vor Beginn der Abfrage festgeschrieben wurden;    Es werden weder nicht festgeschriebene Daten noch Änderungen während des Vorgangs angezeigt   Abfrageausführung durch gleichzeitige Transaktionen . In der Tat eine SELECT-Abfrage   sieht einen Snapshot der Datenbank ab dem Zeitpunkt, an dem die Abfrage beginnt   Lauf. SELECT sieht jedoch die Auswirkungen früherer Aktualisierungen, die ausgeführt werden   innerhalb ihrer eigenen Transaktion, obwohl sie noch nicht begangen sind.   Beachten Sie auch, dass zwei aufeinander folgende SELECT-Befehle unterschiedliche Daten sehen können.   obwohl sie sich innerhalb einer einzigen Transaktion befinden, wenn es sich um eine andere Transaktion handelt   Transaktionen übergeben Änderungen während der Ausführung des ersten SELECT.

Betonung meiner.

    
___ tag123transactionisolation ___ Die Transaktionsisolation bezieht sich auf die Sichtbarkeit und Auswirkung von Änderungen, die in einer Transaktion auf gleichzeitige Transaktionen vorgenommen werden. ___ qstnhdr ___ Kann die gleichzeitige Änderung von Werten die einzelne Auswahl in PostgreSQL 9.1 beeinflussen? ___
Erwin Brandstetter 24.08.2012, 13:38
quelle
5

Die Abfrage wird eine lesekonsistente Ansicht der Daten ab dem Beginn der Abfrage sein. In Postgresql wird in der Dokumentation zur Mehrfachversions-Concurrency-Steuerung (MVCC) erläutert, wie dies geschieht (mehrere Versionen eines Datensatzes sind in der Tabelle vorhanden). In Oracle wird die Sequenzänderungsnummer (Sequence Change Number, SCN) zusammen mit "Vorher-Bildern" von geänderten Daten verwendet. Hier ist ein altes Dokument, Transaktionsverarbeitung in Postgresql mit dem Abschnitt "Speicherverwaltung nicht überschreiben". Aber werfen Sie einen Blick auf MVCC.

Oder lesen Sie das Kapitel MVCC im Postgresql-Dokument

    
Glenn 24.08.2012 13:38
quelle