F.13. csn — расширение для номера последовательности фиксации (Commit Sequence Number)#
F.13. csn — расширение для номера последовательности фиксации (Commit Sequence Number) #
Версия: 1.0
F.13.1. Обзор #
Расширение csn предоставляет функции для получения номера последовательности фиксации (CSN), связанного с транзакциями и снимками. CSN — это монотонно увеличивающийся идентификатор, присваиваемый в момент фиксации транзакции, обеспечивающий полную упорядоченность зафиксированных транзакций.
Это расширение предназначено для дистрибутивов, реализующих MVCC на основе CSN. В первую очередь оно полезно для диагностики, отладки и анализа видимости.
F.13.2. Обоснование #
Традиционная MVCC на основе XID опирается на идентификаторы транзакций (XID) и снимки для определения видимости. MVCC на основе CSN улучшает эту модель, назначая глобальный порядок фиксации, что упрощает проверки видимости и снижает конкуренцию в условиях высокой параллельности.
Расширение csn предоставляет этот функционал в SQL, позволяя пользователям:
Проверять порядок фиксации транзакций.
Анализировать границы видимости снимка.
Проводить отладку поведения параллелизма.
Проводить исследование MVCC-систем, основанных на CSN.
F.13.3. Установка #
Чтобы установить расширение, убедитесь, что оно было скомпилировано и установлено в каталог расширений. Затем включите его в нужной базе данных:
CREATE EXTENSION csn;
Чтобы удалить расширение:
DROP EXTENSION csn;
F.13.4. Быстрый старт #
Получить CSN текущей транзакции:
SELECT pg_csn(pg_current_xact_id());
Получить CSN, связанный с текущим снимком:
SELECT pg_snapshot_csn(pg_current_snapshot());
Интерфейсы, совместимые с устаревшими версиями:
SELECT txid_csn(txid_current()); SELECT txid_snapshot_csn(txid_current_snapshot());
F.13.5. Функции #
| Функция | Тип возвращаемого значения | Описание |
|---|---|---|
pg_csn(xid xid8) | bigint | Возвращает CSN транзакции. |
pg_snapshot_csn(snapshot pg_snapshot) | bigint | Возвращает CSN, соответствующий снимку. |
txid_csn(xid bigint) | bigint | Обёртка совместимости для pg_csn. |
txid_snapshot_csn(snapshot txid_snapshot) | bigint | Обёртка совместимости для pg_snapshot_csn. |
Современные приложения должны предпочитать функции pg_*.
F.13.6. Использование #
F.13.6.1. Пример: получение CSN текущей транзакции #
SELECT pg_csn(pg_current_xact_id());
F.13.6.2. Пример: получение CSN снимка #
SELECT pg_snapshot_csn(pg_current_snapshot());
F.13.6.3. Пример: определение порядка фиксации #
BEGIN; INSERT INTO test VALUES (1); COMMIT; SELECT pg_csn(pg_current_xact_id());
F.13.6.4. Совместимость с устаревшими версиями #
SELECT txid_csn(txid_current()); SELECT txid_csn(txid_current() - 4); SELECT txid_snapshot_csn(txid_current_snapshot());
F.13.7. Пример вывода #
pg_csn
--------
42
Пример снимка:
pg_snapshot_csn
-----------------
42
Специальные значения:
pg_csn
--------
3
Это соответствует CSN_FROZEN.
pg_csn
--------
0
Это соответствует CSN_INPROGRESS.
F.13.8. Возвращаемые значения #
Все функции возвращают номер последовательности фиксации (CSN) типа bigint. Результат зависит от состояния и возраста транзакции.
| Возвращаемое значение | Описание |
|---|---|
| Обычный CSN (≥ 4) | Обозначает успешно зафиксированную транзакцию. |
CSN_FROZEN | Возвращается для загрузочных, замороженных или очень старых зафиксированных транзакций. |
CSN_ABORTED | Указывает, что транзакция была прервана. |
CSN_INPROGRESS | Указывает, что транзакция находится в процессе выполнения. |
CSN_COMMITTING | Указывает, что транзакция сейчас фиксируется. |
Для транзакций старше TransactionXmin CSN может больше не храниться в pg_csnlog. В таких случаях статус определяется из pg_xact, и зафиксированные транзакции возвращают CSN_FROZEN.
TransactionXmin — это самый старый xmin среди всех активных backend-процессов,
это глобальный MVCC-горизонт, обеспечивающий безопасное усечение глобальных метаданных, таких как pg_subtrans и pg_csnlog.
F.13.9. Числовое представление значений CSN #
CSN представлены в виде беззнаковых 64-битных целых чисел.
| Константа | Числовое значение | Описание |
|---|---|---|
CSN_INPROGRESS | 0 | Транзакция все еще выполняется. |
CSN_ABORTED | 1 | Транзакция была прервана. |
CSN_COMMITTING | 2 | Транзакция фиксируется (внутреннее использование). |
CSN_FROZEN | 3 | Замороженная или очень старая зафиксированная транзакция. |
CSN_FIRST_NORMAL | 4 | Первый допустимый CSN, присвоенный зафиксированной транзакции. |
CSN_MAX_NORMAL | 2⁶³ − 1 | Максимально допустимый CSN в нормальном режиме работы. |
F.13.10. Ограничения #
Расширение требует сборки с поддержкой MVCC на основе CSN.
Не поддерживается без инфраструктуры CSN.
В SQL не поддерживаются арифметические операции с
xid8.Внутренние состояния CSN, такие как
CSN_INPROGRESS, не отображаются пользователям.Результаты зависят от доступности журналов CSN (
pg_csnlog).
F.13.11. Совместимость #
Современные интерфейсы:
pg_csn(xid8)pg_snapshot_csn(pg_snapshot)
Интерфейсы для обеспечения совместимости с устаревшими версиями:
txid_csn(bigint)txid_snapshot_csn(txid_snapshot)