Write Ahead Logging

Z PostgreSQL
Verze z 7. 12. 2005, 17:18, kterou vytvořil 127.0.0.1 (diskuse)

(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

Jedná se o obvyklý mechanismus zajištění transakcí, tj. datové soubory (tabulky a indexy) jsou modifikovány až poté, co byl pořízen záznam do logu. Díky tomu, že lze obsah databáze zrestaurovat z transakčního logu, není nutné vynucovat zápis na disk (fsync) datových souborů modifikovaných v transakci ve chvíli potvrzení transakce. Stačí fsync logu. Přínosem je:

  • vyšší výkon - redukce fsynců, navíc možnost sdílení fsynců v konkurenčním prostředí, tj. důsledkem potvrzení (COMMIT) více transakcí je jeden požadavek na fsync logu,
  • skutečná konzistence datových stránek, před zavedením WAL mohlo dojít k poškození indexů případně tabulek bez možnosti rekonstrukce. Nyní se po restartu provádí automatická obnova datových stránek na základě jejich obsahu v logu,
  • možnost online zálohování a obnovy k námi určenému okamžiku (PITR). Systém udržuje pouze několik posledních bloků (souborů) transakčního logu. Pokud je ale zálohujeme (provedeme jejich kopii), můžeme následně z těchto kopii rekonstruovat databázi (obdoba obnovy po pádu). Prvotní záloha nemusí být absolutně konzistentní (postačí kopie souborů svazku provedená za chodu). Přehrávání logu (při obnově) můžeme zastavit v libovolném okamžiku před koncem logu (každá operace zapsaná v logu obsahuje časovou značku), např. těsně před okamžik, kdy byly odstraněny důležité tabulky nebo data (PITR).