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
.