68.1. Транзакции и идентификаторы #

Транзакции могут создаваться явным образом командой BEGIN или START TRANSACTION и завершаться командой COMMIT или ROLLBACK. SQL-операторы вне явного блока транзакций автоматически обрабатываются в виде транзакций, состоящих из одного оператора.

Каждой транзакции присваивается уникальный идентификатор VirtualTransactionId (также именуемый virtualXID или vxid), который состоит из идентификатора обслуживающего процесса (или procNumber) и последовательно назначаемого номера — внутреннего для такого обслуживающего процесса (или localXID). Например, виртуальный идентификатор 4/12532 состоит из следующих компонентов: procNumber со значением 4 и localXID со значением 12532.

Невиртуальные идентификаторы TransactionId (или xid), например 278394, последовательно выбираются для транзакций из глобального счётчика, который используется всеми базами данных в рамках кластера Postgres Pro. Значение присваивается при первой операции записи транзакции в базу данных. Это означает, что транзакции с меньшими xid начинают запись раньше транзакций с большими xid. Обратите внимание, что порядок, в котором транзакции выполняют запись в базу данных впервые, может отличаться от порядка, в котором они запускаются, особенно если транзакции начинаются с операторов, выполняющих только операции чтения.

В Postgres Pro Enterprise используется 64-битный тип xid внутреннего идентификатора (ID) транзакции, чтобы предотвратить зацикливание идентификатора транзакции. Каждый заголовок кортежа содержит два XID, поэтому их увеличение приводило бы к большим издержкам. По этой причине при сохранении на диске XID кортежей являются 32-битными, но каждая специальная область страницы содержит смещение, называемое базовый XID. Когда кортеж считывается в память, базовый XID добавляется к его 32-битным XID, и оба XID в кортеже становятся 64-битными, поэтому кортеж становится так называемым «кортежем в памяти». Полные 64-битные XID, полученные после добавления базового XID, используются при сравнении и в других арифметических операциях. В некоторых контекстах также используется xid8. Функции в Таблица 9.82 возвращают значения xid8. XID используются в качестве основы для механизма параллельного выполнения MVCC Postgres Pro и потоковой репликации.

Когда транзакция верхнего уровня с (невиртуальным) xid фиксируется, она помечается как зафиксированная в каталоге pg_xact. Дополнительная информация записывается в каталог pg_commit_ts при включённом параметре track_commit_timestamp.

Помимо того, что с подготовленными транзакциями сопоставляются определённые значения vxid и xid, им также назначаются глобальные идентификаторы транзакций (GID). GID представляет собой строковый литерал длиной до 200 байт, который должен иметь уникальное значение среди других существующих подготовленных транзакций. Сопоставление GID с идентификаторами транзакций представлено в pg_prepared_xacts.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy