Транзакции и идентификаторы
Эта страница переведена при помощи нейросети GigaChat.
Транзакции могут создаваться явно с помощью BEGIN
или START TRANSACTION
и завершаться с использованием COMMIT
или ROLLBACK
. SQL-запросы вне явных транзакций автоматически используют однострочные транзакции.
Каждая транзакция идентифицируется уникальным VirtualTransactionId
(также называемым virtualXID
или vxid
), который состоит из номера процесса бэкенда (или procNumber
) и последовательно назначаемого числа, локального для каждого бэкенда, известного как localXID
. Например, виртуальный идентификатор транзакции 4/12532
имеет procNumber
равный 4
и localXID
равный 12532
.
Не-виртуальные TransactionId
ы (или xid
), например, 278394
, назначаются транзакциям последовательно из глобального счетчика, используемого всеми базами данных внутри кластера PostgreSQL. Это назначение происходит при первом записи транзакцией в базу данных. Это означает, что транзакции с меньшими номерами начали запись раньше транзакций с большими номерами. Обратите внимание, что порядок, в котором транзакции выполняют свою первую запись в базу данных, может отличаться от порядка, в котором были запущены транзакции, особенно если транзакция была начата с операторов, выполняющих только чтение базы данных.
Внутренний тип идентификатора транзакции xid
имеет ширину 32 бит и циклически повторяется каждые 4 миллиарда транзакций. При каждом цикле увеличивается значение эпохи размером 32 бита. Также существует тип xid8
шириной 64 бита, включающий эту эпоху и поэтому не подверженный цикличности за время жизни установки; его можно преобразовать в xid путем приведения типа. Функции из таблицы «Функции информации о идентификаторах транзакций и снимках состояния» возвращают значения xid8
. Идентификаторы транзакций используются в качестве основы механизма управления параллельностью PostgreSQL по методу MVCC и потоковой репликации.
Когда верхнеуровневая транзакция с (не-виртуальным) xid фиксируется, она отмечается как зафиксированная в каталоге pg_xact
. Дополнительная информация записывается в каталог pg_commit_ts
, если включена настройка track_commit_timestamp
.
Помимо vxid
и xid
, подготовленные транзакции также получают Глобальные идентификаторы транзакций (GID). GID – это литералы строк длиной до 200 байт, которые должны быть уникальными среди других текущих подготовленных транзакций. Отображение GID в xid показано в таблице pg_prepared_xacts
.