2016-04-25 1 views
0

Wenn auf dem ABC Tabelle Update wurde am gleichen Punkt ausgeführt wurde select wurde auch auf der gleichen Tabelle ausgeführt, in Postgresql, die zuerst?welchen sollte man zuerst vervollständigen, wählen oder aktualisieren in der postgreql datenbank?

+0

Können Sie uns mehr über die Situation und die Frage erzählen? Es gibt keine garantierte Antwort auf die minimale Frage, die Sie gestellt haben, da alles von der Größe der Einfügung und Auswahl, der Größe der Tabelle, der Indexsituation, der Anzahl der toten Tupel und nicht von Diskgeschwindigkeit, I/O vs. CPU und Cache abhängen kann usw. – jmelesky

+0

Angenommen, ich habe eine Tabelle, die 10 Minuten braucht, um bestimmte Prädikate zu aktualisieren, und 2 Minuten, um bestimmte Prädikate auszuwählen.so habe ich ein Update gestartet, nach 2 Minuten hat ein anderer Benutzer seine Auswahlabfrage gestartet, in diesem Fall Was wird zuerst entstehen? entweder auswählen oder aktualisieren? und auch wird update eine lock und table nehmen und erlaubt anderen benutzer nicht zu wählen und warten bis das update abgeschlossen ist? – Adm

Antwort

0

Okay, ich denke, ich weiß, was Sie fragen.

Wenn Sie etwas aktualisieren, ist es für nichts anderes sichtbar, bis Sie diese Transaktion bestätigen. Wenn du etwas aktualisierst und es eine Weile dauert, sollte es keine Auswahlen für das selbe Zeug blockieren.

Wenn Sie also Ihr 10-Minuten-Update starten und dann jemand ihre 2-Minuten-Auswahl beginnt, werden die alten Daten angezeigt und nicht blockiert. Das Update wird ohne Unterbrechung fortgesetzt. Wenn nach dem Update die zweite Minute erneut gestartet wird, werden die neuen Daten angezeigt.

Beantwortet das Ihre Frage?


Der Grund dafür, falls Sie interessiert sind, dann ist das postgresql MVCC verwendet. Das bedeutet im Wesentlichen, dass beim Aktualisieren von Zeilen neue Kopien dieser Zeilen geschrieben werden. Auf den neuen Kopien zeigt Postgres an, welche Transaktionen die neuen Daten sehen können. Die alten Daten bleiben erhalten und haben auch Informationen darüber, welche Transaktionen sie sehen können.

Wenn Sie auswählen, überprüft Postgres die Tabelle und prüft, welche dieser Zeilen in Ihrer aktuellen Transaktion für Sie sichtbar sind. Es gibt nur Zeilen zurück, die Sie sehen können.

Wenn es keine Transaktionen mehr gibt, die eine Zeile sehen können, weiß Postgres, dass sie gelöscht werden kann und wird diesen Speicherplatz zurückfordern.

+0

Danke. Sie beantwortet meine Bedenken. – Adm

Verwandte Themen