Principy řízení souběžnosti s více verzemi (MVCC) a snímků

Dokončeno

Většina systémů pro správu databází (DBMS) používá zámky k vynucení řízení souběžnosti, ale PostgreSQL doplňuje uzamčení alternativním přístupem. PostgreSQL používá systém s názvem Multi-Version Concurrency Control (MVCC), který umožňuje existenci více verzí stejného řádku, aby se zlepšila souběžnost. V tomto systému každý dotaz vidí předchozí snímek dat, která jsou konakčně konzistentní. MVCC zajišťuje, že transakce, která čte data, neblokuje transakci, která zapisuje data a naopak.

Například Připojení ion A provádí dotaz, který prohledá všechny řádky tabulky. Současně Připojení ion B provádí dotaz, který aktualizuje některé řádky. MVCC umožňuje spuštění obou dotazů současně vytvořením jiné verze ovlivněných řádků. Tímto způsobem může Připojení ion B provádět aktualizace, aniž by to mělo vliv na Připojení ion A. Tento proces je dosaženo každý řádek verze má xmin hodnotu pro viditelné od transakce a xmax hodnotu pro viditelné do transakce. V případě MVCC Připojení ion A bude ignorovat všechny změny, ke kterým došlo po spuštění dotazu Připojení ion A.

Diagram řízení souběžnosti s více verzemi zobrazující dotaz pro čtení s původními daty a dotazem pro zápis, který aktualizuje snímek

Transakce

Transakce v DBMS jsou atomická jednotka práce, a proto transakce buď potvrdí v plném rozsahu, nebo vůbec. Transakce se také používají pro účely souběžnosti. U úrovní izolace lze definovat účinek, který může mít jedna transakce na jiné, souběžné transakce.

Transakci zahájíte pomocí BEGIN TRANSACTION nebo START TRANSACTION. Dokončíte transakci s potvrzením, chcete-li uložit všechny změny provedené v transakci nebo vrácení zpět zpět všechny změny provedené transakcí. Příklad:

BEGIN TRANSACTION;
    UPDATE production.workorder
        SET stockedqty=7
        WHERE workorderid=1;
COMMIT;