64.3. ÐодÑÑанзакÑии #
ÐодÑÑанзакÑии запÑÑкаÑÑÑÑ Ð²Ð½ÑÑÑи ÑÑанзакÑий и позволÑÑÑ ÑазбиваÑÑ Ð±Ð¾Ð»ÐµÐµ кÑÑпнÑе ÑÑанзакÑии на ÑоÑÑавлÑÑÑие. ÐодÑÑанзакÑии могÑÑ ÑикÑиÑоваÑÑÑÑ Ð¸Ð»Ð¸ пÑеÑÑваÑÑÑÑ, не влиÑÑ Ð½Ð° ÑодиÑелÑÑкие ÑÑанзакÑии, коÑоÑÑе, ÑооÑвеÑÑÑвенно, могÑÑ Ð¿ÑодолжаÑÑ Ð²ÑполнÑÑÑÑÑ. Такое ÑеÑение позволÑÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð¾Ñибки пÑоÑе и ÑаÑÑо иÑполÑзÑеÑÑÑ Ð¿Ñи ÑазÑабоÑке пÑиложений. РанглийÑком ÑзÑке Ñлово подÑÑанзакÑÐ¸Ñ Ð·Ð°ÑаÑÑÑÑ ÑокÑаÑаеÑÑÑ Ð´Ð¾ subxact.
ÐодÑÑанзакÑии могÑÑ ÑвнÑм обÑазом запÑÑкаÑÑÑÑ ÐºÐ°Ðº пÑи помоÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SAVEPOINT, Ñак и дÑÑгими ÑпоÑобами, напÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÑÑедÑÑвом пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ EXCEPTION ÑзÑка PL/pgSQL. ЯзÑки PL/Python и PL/Tcl Ñакже поддеÑживаÑÑ ÑвнÑе подÑÑанзакÑии. ÐодÑÑанзакÑии можно Ñакже запÑÑкаÑÑ Ð² дÑÑгиÑ
подÑÑанзакÑиÑÑ
. ТÑанзакÑÐ¸Ñ Ð²ÐµÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð¸ ÐµÑ Ð´Ð¾ÑеÑние подÑÑанзакÑии ÑоÑмиÑÑÑÑ Ð¸ÐµÑаÑÑ
Ð¸Ñ Ð¸Ð»Ð¸ деÑево, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ оÑноÑÐµÐ½Ð¸Ñ Ðº оÑновной ÑÑанзакÑии иÑполÑзÑеÑÑÑ ÑеÑмин «ÑÑанзакÑÐ¸Ñ Ð²ÐµÑÑ
него ÑÑовнÑ».
ÐÑли подÑÑанзакÑии пÑиÑваиваеÑÑÑ Ð½ÐµÐ²Ð¸ÑÑÑалÑнÑй иденÑиÑикаÑоÑ, его назÑваÑÑ Â«subxid». ÐодÑÑанзакÑиÑм в Ñежиме ÑолÑко ÑÑÐµÐ½Ð¸Ñ Ð½Ðµ пÑиÑваиваÑÑÑÑ subxid, однако пÑи пеÑвой попÑÑке запиÑи Ñакой иденÑиÑикаÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑиÑвоен. ÐÑи ÑÑом вÑем ÑодиÑелÑÑким ÑÑанзакÑиÑм подÑÑанзакÑии, вплоÑÑ Ð´Ð¾ ÑÑанзакÑии веÑÑ Ð½ÐµÐ³Ð¾ ÑÑÐ¾Ð²Ð½Ñ Ð²ÐºÐ»ÑÑиÑелÑно, пÑиÑваиваеÑÑÑ Ð½ÐµÐ²Ð¸ÑÑÑалÑнÑй иденÑиÑикаÑоÑ. ÐнаÑение xid ÑодиÑелÑÑкой ÑÑанзакÑии вÑегда бÑÐ´ÐµÑ Ð¼ÐµÐ½ÑÑе знаÑений subxid подÑÑанзакÑий.
ÐденÑиÑикаÑÐ¾Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенного ÑодиÑÐµÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ подÑÑанзакÑии запиÑÑваеÑÑÑ Ð² каÑалог pg_subtrans. ÐденÑиÑикаÑоÑÑ ÑÑанзакÑий веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð½Ðµ запиÑÑваÑÑÑÑ, поÑколÑÐºÑ Ñ Ð½Ð¸Ñ
Ð½ÐµÑ ÑодиÑелÑ. Также не запиÑÑваÑÑÑÑ Ð¸ иденÑиÑикаÑоÑÑ Ð¿Ð¾Ð´ÑÑанзакÑий в Ñежиме ÑолÑко ÑÑениÑ.
ÐÑи ÑикÑаÑии подÑÑанзакÑии вÑе заÑикÑиÑованнÑе доÑеÑние подÑÑанзакÑии Ñ subxid Ñакже ÑÑиÑаÑÑÑÑ Ð·Ð°ÑикÑиÑованнÑми в ÑÐ°Ð¼ÐºÐ°Ñ ÑÑой подÑÑанзакÑии. ÐÑи пÑеÑÑвании подÑÑанзакÑии вÑе доÑеÑние подÑÑанзакÑии Ñакже ÑÑиÑаÑÑÑÑ Ð¿ÑеÑваннÑми.
ÐÑи ÑикÑаÑии ÑÑанзакÑии веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ñ xid заÑикÑиÑованнÑе подÑÑанзакÑии запиÑÑваÑÑÑÑ ÐºÐ°Ðº заÑикÑиÑованнÑе в подкаÑалоге pg_xact. ÐÑи пÑеÑÑвании ÑÑанзакÑии веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð²Ñе ÐµÑ Ð¿Ð¾Ð´ÑÑанзакÑии Ñакже пÑеÑÑваÑÑÑÑ, даже еÑли они бÑли заÑикÑиÑованÑ.
Чем болÑÑе подÑÑанзакÑий оÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑми в каждой ÑÑанзакÑии (в оÑноÑении коÑоÑÑÑ
не вÑполнен оÑÐºÐ°Ñ Ð¸Ð»Ð¸ оÑвобождение), Ñем вÑÑе бÑдÑÑ Ð¸Ð·Ð´ÐµÑжки, ÑвÑзаннÑе Ñ ÑпÑавлением ÑÑанзакÑиÑми. Ðо 64 оÑкÑÑÑÑÑ
subxid кеÑиÑÑеÑÑÑ Ð² обÑей памÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеÑвеÑа. ÐоÑле ÑÑого ÑÑапа издеÑжки Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑий ввода-вÑвода ÑÑÑеÑÑвенно возÑаÑÑаÑÑ Ð¸Ð·-за дополниÑелÑнÑÑ
опеÑаÑий поиÑка запиÑей о subxid в pg_subtrans.