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

71.1. Транзакции и Идентификаторы

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

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

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

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

Внутренний тип идентификатора транзакции xid имеет ширину 32 бита и зацикливается каждые 4 миллиарда транзакций. 32-битный эпоха увеличивается при каждом зацикливании. Существует также 64-битный тип xid8, который включает эту эпоху и, следовательно, не зацикливается в течение срока службы установки; его можно преобразовать в xid путем приведения типов. Функции в Таблица 9.80 возвращают значения xid8. Xid используется как основа для механизма конкурентного доступа Tantor BE MVCC и потоковой репликации.

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

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