65.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. ÐбÑаÑиÑе внимание, ÑÑо поÑÑдок, в коÑоÑом ÑÑанзакÑии вÑполнÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
впеÑвÑе, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð¿Ð¾ÑÑдка, в коÑоÑом они запÑÑкаÑÑÑÑ, оÑобенно еÑли ÑÑанзакÑии наÑинаÑÑÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑов, вÑполнÑÑÑиÑ
ÑолÑко опеÑаÑии ÑÑениÑ.
ÐнÑÑÑенний Ñип иденÑиÑикаÑоÑов ÑÑанзакÑий xid Ð¸Ð¼ÐµÐµÑ ÑÐ°Ð·Ð¼ÐµÑ 32 биÑа, и знаÑÐµÐ½Ð¸Ñ Ð² нÑм повÑоÑÑÑÑÑÑ ÑеÑез каждÑе 4 миллиаÑда ÑÑанзакÑий. ÐоÑле каждого Ñикла 32-биÑÐ½Ð°Ñ ÑпоÑ
а ÑвелиÑиваеÑÑÑ Ð½Ð° 1. СÑÑеÑÑвÑÐµÑ Ñакже и 64-биÑнÑй Ñип xid8, коÑоÑÑй вклÑÑÐ°ÐµÑ ÑÑÑ ÑпоÑ
Ñ Ð¸ поÑÑÐ¾Ð¼Ñ Ð½Ðµ повÑоÑÑеÑÑÑ Ð½Ð° пÑоÑÑжении жизни ÑеÑвеÑа. Ðго можно пÑеобÑазоваÑÑ Ð² xid поÑÑедÑÑвом опеÑаÑии пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипа. ФÑнкÑии в ТаблиÑа 9.84 возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ xid8. ÐденÑиÑикаÑоÑÑ Ð¸ÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве оÑÐ½Ð¾Ð²Ñ Ð¼ÐµÑ
анизма многовеÑÑионного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐºÑÑенÑнÑм доÑÑÑпом MVCC Postgres Pro.
Ðогда ÑÑанзакÑÐ¸Ñ Ð²ÐµÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ñ (невиÑÑÑалÑнÑм) xid ÑикÑиÑÑеÑÑÑ, она помеÑаеÑÑÑ ÐºÐ°Ðº заÑикÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² каÑалоге pg_xact. ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð·Ð°Ð¿Ð¸ÑÑваеÑÑÑ Ð² каÑалог pg_commit_ts пÑи вклÑÑÑнном паÑамеÑÑе track_commit_timestamp.
Ðомимо Ñого, ÑÑо Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑми ÑÑанзакÑиÑми ÑопоÑÑавлÑÑÑÑÑ Ð¾Ð¿ÑеделÑннÑе знаÑÐµÐ½Ð¸Ñ vxid и xid, им Ñакже назнаÑаÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑе иденÑиÑикаÑоÑÑ ÑÑанзакÑий (GID). GID пÑедÑÑавлÑÐµÑ Ñобой ÑÑÑоковÑй лиÑеÑал длиной до 200 байÑ, коÑоÑÑй должен имеÑÑ ÑникалÑное знаÑение ÑÑеди дÑÑгиÑ
ÑÑÑеÑÑвÑÑÑиÑ
подгоÑовленнÑÑ
ÑÑанзакÑий. СопоÑÑавление GID Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑами ÑÑанзакÑий пÑедÑÑавлено в pg_prepared_xacts.