User Tools

Site Tools


wiki:postgres:pg_tune_kurs_transactions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

wiki:postgres:pg_tune_kurs_transactions [2017/09/28 12:21] (current)
Line 1: Line 1:
 +====== Transaktionen / transactions ======
 +
 +**ACID**
 +  A tomic
 +  C onsistent
 +  I solated ("​meine"​ und "​Deine"​ Transaktion sind getrennt)
 +  D urable ​ (COMMIT; Wenn Transaktion ausgeführt ist, dann gilt sie)
 +
 +===== DDL in Transaktionen =====
 +
 +  test# BEGIN
 +  test# DROP TABLE t_test;
 +  test# SELECT * FROM t_test;
 +  ROLLBACK
 +  test# SELECT * FROM t_test;
 +
 +DDL in Transaktionen wird de facto nur von PostgreSQL unterstützt (nicht von Oracle etc.)\\
 +==== Für was braucht man das? ====
 +Wenn man z.B. die gleiche DB-Struktur auf meheren Servern ausrollen will.
 +
 +  psql test < start.sql
 +  ​
 +  vim start.sql
 +    ​
 +    BEGIN;
 +    /​*Modulweise Installation*/​
 +    \i module_1.sql
 +    \i module_2.sql
 +    ...
 +    COMMIT;
 +    Sobald ein Fehler innerhalb der Transaktion auftritt, kommt es zu einem "​automatischen Rollback"​.
 +
 +===== MultiVersionConcurrencyControl (MVCC) =====
 +Besser als "row level locking",​ da der gesperrte Datensatz noch von Anderen gelesen werden kann.\\
 +==== Die Sichtbarkeit bleibt während der Transaktion nicht konsistent ====
 +Befindet sich in einer Transaktion,​ dazwischen passiert wo anders ein INSERT. Dies sieht man innerhalb der Transaktion.\\
 +**Aber**: Während z.b. ein SELECT läuft bleiben die Daten konstant (ändern sich nicht in der Transaktion).
 +==== Lesekonsistenz ====
 +  test# BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;​
 +  Die Sichtbarkeit der Daten bleibt innerhalb der Transaktion konsistent.
 +==== SELECT ... FOR ====
 +  test# SELECT ... id < 100 FOR UPDATE;
 +  Verhindert, dass ein Platz gebucht wird (z.b. in einer Applikation) und jemand Anderer in der Zwischenzeit
 +  den Platz bucht oder löscht.
 +  Genauer: Die Zeilen die es betrifft (es gibt z.B. nur 1,5,7,50 kleiner als 100) werden gesperrt und nicht die Bedingung(das Prädikat).\\
 +
 +  test# SELECT ... FOR SHARE;
 +  Dann kann jemand Anderer auch FOR SHARE machen.
 +  Was bringt das? Man geht praktisch davon aus, dass dies ein sehr unwahrscheinlicher Fall ist.
 +  Erst wenn wirklich Zwei zur selben Zeit die selbe Zeile UPDATEN kommt es zu einem DEADLOCK auf die Spalten.
 +  ​
 +  ... FOR SHARE OF a,b;
 +  ... FOR UPDATE OF c;
 +  z.B. wenn mehrere Tabellen für ein UPDATE mittels JOIN benötigt werden.
 +
 +==== LOCK ====
 +Bei einem Lock ist die ganze Tabelle gesperrt.
 +  test# CREATE INDEX ... CONCURRENTLY;​
 +  Dauert zwar länger, dafür ist während der INDEX-Erstellung ein UPDATE,​INSERT,​... möglich.
  
wiki/postgres/pg_tune_kurs_transactions.txt · Last modified: 2017/09/28 12:21 (external edit)