Omówienie wielowersjnej kontroli współbieżności (MVCC) i migawek
Większość systemów zarządzania bazami danych (DBMS) używa blokad w celu wymuszania kontroli współbieżności, ale postgreSQL uzupełnia blokowanie przy użyciu alternatywnego podejścia. Usługa PostgreSQL używa systemu o nazwie Multi-Version Concurrency Control (MVCC), który umożliwia istnienie wielu wersji tego samego wiersza w celu poprawy współbieżności. W przypadku tego systemu każde zapytanie widzi poprzednią migawkę danych, które są spójne transakcyjnie. MVCC zapewnia, że transakcja odczytująca dane nie blokuje transakcji zapisującej dane i na odwrót.
Na przykład połączenie A wykonuje zapytanie, które skanuje wszystkie wiersze tabeli. Jednocześnie połączenie B wykonuje zapytanie, które aktualizuje niektóre wiersze. Aplikacja MVCC umożliwia jednoczesne uruchamianie obu zapytań przez utworzenie innej wersji wierszy, których dotyczy problem. W ten sposób połączenie B może wykonywać aktualizacje bez wpływu na połączenie A. Ten proces jest osiągany przez każdą wersję wiersza o wartości xmin widocznej dla , ponieważ transakcja i wartość xmax xmax dla widoczne do transakcji. W przypadku wzorca MVCC połączenie A zignoruje wszelkie modyfikacje, które wystąpiły po uruchomieniu zapytania Connection A.
Transakcji
Transakcje w systemie DBMS są jednostką niepodzielnej pracy, dlatego transakcja zatwierdza się w całości lub w ogóle nie. Transakcje są również używane do zarządzania współbieżnością. W przypadku poziomów izolacji można zdefiniować efekt, jaki może mieć jedna transakcja na innych, współbieżnych transakcjach.
Rozpoczynasz transakcję za pomocą BEGIN TRANSACTION lub START TRANSACTION. Transakcję można zakończyć za pomocą polecenia COMMIT, aby zapisać wszystkie zmiany wprowadzone w transakcji, albo ROLLBACK, aby cofnąć wszelkie zmiany dokonane przez transakcję. Na przykład:
BEGIN TRANSACTION;
UPDATE production.workorder
SET stockedqty=7
WHERE workorderid=1;
COMMIT;