25.5. ÐоÑÑÑий ÑезеÑв
ТеÑмин «гоÑÑÑий ÑезеÑв» иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи подклÑÑаÑÑÑÑ Ðº ÑеÑвеÑÑ Ð¸ вÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð½Ð° ÑÑение, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº ÑеÑÐ²ÐµÑ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² Ñежиме ÑезеÑва или воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÑÑ Ð¸Ð²Ð°. ÐÑо полезно и Ð´Ð»Ñ Ñелей ÑепликаÑии, и Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑоÑÑоÑÐ½Ð¸Ñ Ð¸Ð· ÑезеÑвной копии Ñ Ð²ÑÑокой ÑоÑноÑÑÑÑ. Так же ÑеÑмин «гоÑÑÑий ÑезеÑв» опиÑÑÐ²Ð°ÐµÑ ÑпоÑобноÑÑÑ ÑеÑвеÑа пеÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ð¸Ð· Ñежима воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ðº обÑÑной ÑабоÑе, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº полÑзоваÑели пÑодолжаÑÑ Ð²ÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¸/или Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾ÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑми.
Ð Ñежиме гоÑÑÑего ÑезеÑва запÑоÑÑ Ð²ÑполнÑÑÑÑÑ Ð¿ÑимеÑно Ñак же, как и в обÑÑном Ñежиме, Ñ Ð½ÐµÐºÐ¾ÑоÑÑми оÑлиÑиÑми в иÑполÑзовании и админиÑÑÑиÑовании, опиÑаннÑми ниже.
25.5.1. ÐÐ±Ð·Ð¾Ñ Ð½Ð° ÑÑовне полÑзоваÑелÑ
Ðогда паÑамеÑÑ hot_standby на ÑезеÑвном ÑеÑвеÑе ÑÑÑановлен в true, Ñо он наÑÐ¸Ð½Ð°ÐµÑ Ð¿ÑинимаÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑÑÐ°Ð·Ñ ÐºÐ°Ðº ÑолÑко ÑиÑÑема пÑидÑÑ Ð² ÑоглаÑованное ÑоÑÑоÑние в пÑоÑеÑÑе воÑÑÑановлениÑ. ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ Ñоединений бÑÐ´ÐµÑ ÑазÑеÑено ÑолÑко ÑÑение, запиÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° даже во вÑеменнÑе ÑаблиÑÑ.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð´Ð°Ð½Ð½Ñе Ñ Ð²ÐµÐ´ÑÑего ÑеÑвеÑа бÑли полÑÑÐµÐ½Ñ Ð½Ð° ÑезеÑвном, ÑÑебÑеÑÑÑ Ð½ÐµÐºÐ¾ÑоÑое вÑемÑ. Таким обÑазом, имееÑÑÑ Ð¸Ð·Ð¼ÐµÑÑÐµÐ¼Ð°Ñ Ð·Ð°Ð´ÐµÑжка Ð¼ÐµÐ¶Ð´Ñ Ð²ÐµÐ´ÑÑим и ÑезеÑвнÑм ÑеÑвеÑами. ÐоÑÑÐ¾Ð¼Ñ Ð·Ð°Ð¿ÑÑк одинаковÑÑ Ð·Ð°Ð¿ÑоÑов пÑимеÑно в одно вÑÐµÐ¼Ñ Ð½Ð° ведÑÑем и ÑезеÑвном ÑеÑвеÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ ÑазнÑй ÑезÑлÑÑаÑ. Ðожно ÑказаÑÑ, ÑÑо даннÑе на ÑезеÑвном ÑеÑвеÑе в конеÑном ÑÑÑÑе ÑоглаÑÑÑÑÑÑ Ñ Ð²ÐµÐ´ÑÑим. ÐоÑле Ñого как запиÑÑ Ð¾ заÑикÑиÑованной ÑÑанзакÑии воÑпÑоизводиÑÑÑ Ð½Ð° ÑезеÑвном ÑеÑвеÑе, изменениÑ, ÑовеÑÑÑннÑе в ÑÑой ÑÑанзакÑии, ÑÑановиÑÑÑ Ð²Ð¸Ð´Ð½Ñ Ð² лÑбÑÑ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ ÑÐ½Ð¸Ð¼ÐºÐ°Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° ÑезеÑвном ÑеÑвеÑе. Снимок Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñделан в наÑале каждого запÑоÑа или в наÑале каждой ÑÑанзакÑии в завиÑимоÑÑи Ð¾Ñ ÑÑÐ¾Ð²Ð½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑии. Ðолее подÑобно Ñм. Раздел 13.2.
ТÑанзакÑии, запÑÑеннÑе в Ñежиме гоÑÑÑего ÑезеÑва, могÑÑ Ð²ÑполнÑÑÑ ÑледÑÑÑие командÑ:
ÐоÑÑÑп к даннÑм:
SELECT,COPY TOÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ ÐºÑÑÑоÑом:
DECLARE,FETCH,CLOSEÐаÑамеÑÑÑ:
SHOW,SET,RESETÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ñвного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми:
BEGIN,END,ABORT,START TRANSACTIONSAVEPOINT,RELEASE,ROLLBACK TO SAVEPOINTÐлок
EXCEPTIONи дÑÑгие внÑÑÑенние подÑиненнÑе ÑÑанзакÑии
LOCK TABLE, ÑолÑко когда иÑполнÑеÑÑÑ Ð² Ñвном виде в ÑледÑÑÑем Ñежиме:ACCESS SHARE,ROW SHAREилиROW EXCLUSIVE.ÐÐ»Ð°Ð½Ñ Ð¸ ÑеÑÑÑÑÑ:
PREPARE,EXECUTE,DEALLOCATE,DISCARDÐÐ¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸ ÑаÑÑиÑениÑ:
LOADUNLISTEN
ТÑанзакÑии, запÑÑеннÑе в Ñежиме гоÑÑÑего ÑезеÑва, никогда не полÑÑаÑÑ ID ÑÑанзакÑии и не могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð² жÑÑнал пÑедзапиÑи. ÐоÑÑÐ¾Ð¼Ñ Ð¿Ñи попÑÑке вÑполниÑÑ ÑледÑÑÑие дейÑÑÐ²Ð¸Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑ Ð¾Ñибки:
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¼Ð°Ð½Ð¸Ð¿ÑлÑÑии даннÑми (DML):
INSERT,UPDATE,DELETE,COPY FROM,TRUNCATE. СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо Ð½ÐµÑ ÑазÑеÑÑннÑÑ Ð´ÐµÐ¹ÑÑвий, коÑоÑÑе пÑиводили Ð±Ñ Ðº ÑÑабаÑÑÐ²Ð°Ð½Ð¸Ñ ÑÑиггеÑа во вÑÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° ÑезеÑвном ÑеÑвеÑе. ÐÑо огÑаниÑение Ñак же каÑаеÑÑÑ Ð¸ вÑеменнÑÑ ÑаблиÑ, Ñак как ÑÑÑоки ÑаблиÑÑ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð¿ÑоÑиÑÐ°Ð½Ñ Ð¸Ð»Ð¸ запиÑÐ°Ð½Ñ Ð±ÐµÐ· обÑаÑÐµÐ½Ð¸Ñ Ðº ID ÑÑанзакÑии, ÑÑо в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ возможно в ÑÑеде гоÑÑÑего ÑезеÑва.ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ (DDL):
CREATE,DROP,ALTER,COMMENT. ÐÑи огÑаниÑÐµÐ½Ð¸Ñ Ñак же оÑноÑÑÑÑÑ Ð¸ к вÑеменнÑм ÑаблиÑам, Ñак как опеÑаÑии могÑÑ Ð¿Ð¾ÑÑебоваÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ ÑиÑÑемнÑÑ ÐºÐ°Ñалогов.SELECT ... FOR SHARE | UPDATE, Ñак как блокиÑовка ÑÑÑоки не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñоведена без Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ñайлов даннÑÑ .ÐÑавила Ð´Ð»Ñ Ð²ÑÑажений
SELECT, коÑоÑÑе пÑиводÑÑ Ðº вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ DML.LOCKкоÑоÑÐ°Ñ Ñвно ÑÑебÑÐµÑ Ñежим более ÑÑÑогий ÑемROW EXCLUSIVE MODE.LOCKв коÑоÑкой ÑоÑме Ñ ÑмолÑаниÑми, Ñак как ÑÑебÑеÑACCESS EXCLUSIVE MODE.ÐÐ¾Ð¼Ð°Ð½Ð´Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми, коÑоÑÑе в Ñвном виде ÑÑебÑÑÑ Ñежим не ÑолÑко Ð´Ð»Ñ ÑÑениÑ
BEGIN READ WRITE,START TRANSACTION READ WRITESET TRANSACTION READ WRITE,SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITESET transaction_read_only = off
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð²ÑÑ Ñазной ÑикÑаÑии:
PREPARE TRANSACTION,COMMIT PREPARED,ROLLBACK PREPARED, Ñак как даже ÑÑанзакÑии ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð½ÑждаÑÑÑÑ Ð² запиÑи в WAL на ÑÑапе подгоÑовки (пеÑÐ²Ð°Ñ Ñаза двÑÑ Ñазной ÑикÑаÑии).Ðбновление поÑледоваÑелÑноÑÑей:
nextval(),setval()LISTEN,NOTIFY
ÐÑи обÑÑной ÑабоÑе ÑÑанзакÑии «ÑолÑко Ð´Ð»Ñ ÑÑениÑ» могÑÑ Ð¸ÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ LISTEN и NOTIFY; Ñаким обÑазом, ÑеанÑÑ Ð³Ð¾ÑÑÑего ÑезеÑва ÑабоÑаÑÑ Ñ Ð½ÐµÑколÑко болÑÑими огÑаниÑениÑми, Ñем обÑÑнÑе ÑолÑко ÑиÑаÑÑие ÑеанÑÑ. Ðозможно, ÑÑо некоÑоÑÑе из ÑÑиÑ
огÑаниÑений бÑдÑÑ Ð¾ÑÐ»Ð°Ð±Ð»ÐµÐ½Ñ Ð² ÑледÑÑÑиÑ
вÑпÑÑкаÑ
.
Ð Ñежиме гоÑÑÑего ÑезеÑва паÑамеÑÑ transaction_read_only вÑегда Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true и измениÑÑ ÐµÐ³Ð¾ нелÑзÑ. Ðо еÑли не пÑÑаÑÑÑÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑоваÑÑ ÑодеÑжимое ÐÐ, подклÑÑение к ÑеÑвеÑÑ Ð² ÑÑом Ñежиме не оÑлиÑаеÑÑÑ Ð¾Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑений к обÑÑнÑм базам даннÑÑ
. ÐÑи оÑÑабоÑке оÑказа или пеÑеклÑÑении Ñолей база даннÑÑ
пеÑеÑ
Ð¾Ð´Ð¸Ñ Ð² обÑÑнÑй Ñежим ÑабоÑÑ. Ðогда ÑеÑÐ²ÐµÑ Ð¼ÐµÐ½ÑÐµÑ Ñежим ÑабоÑÑ, ÑÑÑановленнÑе ÑеанÑÑ Ð¾ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÑннÑми. ÐоÑле вÑÑ
ода из Ñежима гоÑÑÑего ÑезеÑва ÑÑановиÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм запÑÑкаÑÑ Ð¿Ð¸ÑÑÑие ÑÑанзакÑии (даже в ÑеанÑаÑ
, наÑаÑÑÑ
еÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва).
ÐолÑзоваÑели могÑÑ ÑзнаÑÑ, акÑивен ли Ñежим гоÑÑÑего ÑезеÑва в иÑ
ÑеанÑе, вÑполнив ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SHOW transaction_read_only. ÐÑоме Ñого, полÑзоваÑели могÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑезеÑвном ÑеÑвеÑе, иÑполÑзÑÑ ÑÑд ÑÑнкÑий (Ñм. ТаблиÑÑ 9.86). ÐÑи ÑÑедÑÑва позволÑÑÑ ÐºÐ°Ðº ÑоздаваÑÑ Ð¿ÑогÑаммÑ, ÑÑиÑÑваÑÑие ÑекÑÑий ÑÑаÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ñак и оÑÑлеживаÑÑ Ð¿ÑоÑеÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑазÑабаÑÑваÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе пÑогÑÐ°Ð¼Ð¼Ñ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð· даннÑÑ
в нÑжном ÑоÑÑоÑнии.
25.5.2. ÐбÑабоÑка конÑликÑов запÑоÑов
ÐедÑÑий и ÑезеÑвнÑй ÑеÑвеÑÑ ÑвÑÐ·Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñ Ñобой многими ÑлабÑми ÑвÑзÑми. СобÑÑÐ¸Ñ Ð½Ð° ведÑÑем ÑеÑвеÑе оказÑваÑÑ Ð²Ð»Ð¸Ñние на ÑезеÑвнÑй. Ð ÑезÑлÑÑаÑе имееÑÑÑ Ð¿Ð¾ÑенÑиалÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾ÑÑиÑаÑелÑного влиÑÐ½Ð¸Ñ Ð¸Ð»Ð¸ конÑликÑа Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸. Ðаиболее пÑоÑÑой Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÑÐ»Ð¸ÐºÑ â бÑÑÑÑодейÑÑвие: еÑли на ведÑÑем пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð°Ð³ÑÑзка оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑого обÑÑма даннÑÑ , Ñо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ñоздание ÑооÑвеÑÑÑвÑÑÑего поÑока запиÑей WAL на ÑезеÑвнÑй ÑеÑвеÑ. Таким обÑазом, запÑоÑÑ Ð½Ð° ÑезеÑвном конкÑÑиÑÑÑÑ Ð·Ð° ÑиÑÑемнÑе ÑеÑÑÑÑÑ, напÑимеÑ, ввод-вÑвод.
Так же Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй Ñип конÑликÑа на ÑеÑвеÑе гоÑÑÑего ÑезеÑва. ÐÑÐ¾Ñ ÐºÐ¾Ð½ÑÐ»Ð¸ÐºÑ Ð½Ð°Ð·ÑваеÑÑÑ Ð¶ÑÑÑким конÑликÑом, оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸Ñние на запÑоÑÑ, пÑÐ¸Ð²Ð¾Ð´Ñ Ðº Ð¸Ñ Ð¾Ñмене, а в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð¸ к обÑÑÐ²Ñ ÑеанÑа Ð´Ð»Ñ ÑазÑеÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑликÑов. ÐолÑзоваÑелÑм пÑедоÑÑавлен Ð½Ð°Ð±Ð¾Ñ ÑÑедÑÑв Ð´Ð»Ñ Ð¾Ð±ÑабоÑки подобнÑÑ ÐºÐ¾Ð½ÑликÑов. СлÑÑаи конÑликÑов вклÑÑаÑÑ:
УÑÑановка ÑкÑклÑзивной блокиÑовки на ведÑÑем ÑеÑвеÑе, как Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñвной командÑ
LOCK, Ñак и пÑи ÑазлиÑнÑÑ DDL, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº конÑликÑÑ Ð´Ð¾ÑÑÑпа к ÑаблиÑам на ÑезеÑвном.Удаление ÑаблиÑного пÑоÑÑÑанÑÑва на ведÑÑем ÑеÑвеÑе пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº конÑликÑÑ Ð½Ð° ÑезеÑвном когда запÑоÑÑ Ð¸ÑполÑзÑÑÑ ÑÑо пÑоÑÑÑанÑÑво Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð²ÑеменнÑÑ ÑабоÑÐ¸Ñ Ñайлов.
Удаление Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° ведÑÑем ÑеÑвеÑе конÑликÑÑÐµÑ Ñ ÑеанÑами, подклÑÑÑннÑми к ÑÑой ÐРна ÑезеÑвном.
ÐÑиложение оÑиÑÑки ÑÑÑаÑевÑÐ¸Ñ ÑÑанзакÑий из WAL конÑликÑÑÐµÑ Ñ ÑÑанзакÑиÑми на ÑезеÑвном ÑеÑвеÑе, коÑоÑÑе иÑполÑзÑÑÑ Ñнимок даннÑÑ , коÑоÑÑй вÑÑ ÐµÑÑ Ð²Ð¸Ð´Ð¸Ñ ÐºÐ°ÐºÐ¸Ðµ-Ñо из оÑиÑеннÑÑ Ð½Ð° ведÑÑем ÑÑÑок.
ÐÑиложение оÑиÑÑки ÑÑÑаÑевÑÐ¸Ñ ÑÑанзакÑий из WAL конÑликÑÑÐµÑ Ñ Ð·Ð°Ð¿ÑоÑами к Ñелевой ÑÑÑаниÑе на ÑезеÑвном ÑеÑвеÑе вне завиÑимоÑÑи Ð¾Ñ Ñого, ÑвлÑÑÑÑÑ Ð»Ð¸ даннÑе ÑдалÑннÑми или видимÑми.
Ð ÑÑÐ¸Ñ ÑлÑÑаÑÑ Ð½Ð° ведÑÑем ÑеÑвеÑе пÑоÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ; полÑзоваÑÐµÐ»Ñ ÑледÑÐµÑ Ð²ÑбÑаÑÑ ÐºÐ°ÐºÑÑ Ð¸Ñ ÐºÐ¾Ð½ÑликÑÑÑÑÐ¸Ñ ÑÑоÑон оÑмениÑÑ. Тем не менее на ÑезеÑвном Ð½ÐµÑ Ð²ÑбоÑа: дейÑÑÐ²Ð¸Ñ Ð¸Ð· WAL Ñже пÑоизоÑли на ведÑÑем, поÑÑÐ¾Ð¼Ñ ÑезеÑвнÑй обÑзан пÑимениÑÑ Ð¸Ñ . Ðолее Ñого, позволÑÑÑ Ð¾Ð±ÑабоÑÑÐ¸ÐºÑ WAL ожидаÑÑ Ð½ÐµÐ¾Ð³ÑаниÑенно долго Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÑайне нежелаÑелÑно, Ñак как оÑÑÑавание ÑезеÑвного ÑеÑвеÑа Ð¾Ñ Ð²ÐµÐ´ÑÑего Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑ Ð²Ð¾Ð·ÑаÑÑаÑÑ. Таким обÑазом, Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑинÑдиÑелÑнÑÑ Ð¾ÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð¿ÑоÑов на ÑезеÑвном ÑеÑвеÑе, коÑоÑÑе конÑликÑÑÑÑ Ñ Ð¿ÑименÑемÑми запиÑÑми WAL.
ÐÑимеÑом Ñакой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑиÑÑаÑиÑ: админиÑÑÑаÑÐ¾Ñ Ð½Ð° ведÑÑем ÑеÑвеÑе вÑполнил ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DROP TABLE Ð´Ð»Ñ ÑаблиÑÑ, коÑоÑÐ°Ñ ÑейÑÐ°Ñ ÑÑаÑÑвÑÐµÑ Ð² запÑоÑе на ÑезеÑвном. ÐонÑÑно, ÑÑо ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð±ÑÐ´ÐµÑ Ð²ÑполнÑÑÑ Ð´Ð°Ð»ÑÑе, еÑли команда DROP TABLE пÑимениÑÑÑ Ð½Ð° ÑезеÑвном. ÐÑли Ð±Ñ ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²ÑполнÑлÑÑ Ð½Ð° ведÑÑем, команда DROP TABLE ждала Ð±Ñ ÐµÐ³Ð¾ оконÑаниÑ. Ðо когда на ведÑÑем вÑполнÑеÑÑÑ ÑолÑко команда DROP TABLE, ведÑÑий ÑеÑÐ²ÐµÑ Ð½Ðµ знаеÑ, какие запÑоÑÑ Ð²ÑполнÑÑÑÑÑ Ð½Ð° ÑезеÑвном, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ не Ð¼Ð¾Ð¶ÐµÑ Ð¶Ð´Ð°ÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
запÑоÑов. ÐоÑÑÐ¾Ð¼Ñ ÐµÑли запиÑи WAL Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸ÐµÐ¼ пÑибÑдÑÑ Ð½Ð° ÑезеÑвнÑй ÑеÑвеÑ, когда запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑодолжаÑÑ Ð²ÑполнÑÑÑÑÑ, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ ÐºÐ¾Ð½ÑликÑ. Ð ÑÑом ÑлÑÑае ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ либо задеÑжаÑÑ Ð¿Ñименение ÑÑиÑ
запиÑей WAL (и вÑеÑ
оÑÑалÑнÑÑ
, ÑледÑÑÑиÑ
за ними), либо оÑмениÑÑ ÐºÐ¾Ð½ÑликÑÑÑÑий запÑоÑ, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло пÑимениÑÑ DROP TABLE.
ÐÑли конÑликÑнÑй запÑÐ¾Ñ ÐºÐ¾ÑоÑкий, обÑÑно желаÑелÑно ÑазÑеÑиÑÑ ÐµÐ¼Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ, ненадолго задеÑжав пÑименение запиÑей WAL, но ÑлиÑком болÑÑÐ°Ñ Ð·Ð°Ð´ÐµÑжка в пÑименении WAL обÑÑно нежелаÑелÑна. ÐоÑÑÐ¾Ð¼Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ оÑÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ Ð¿Ð°ÑамеÑÑÑ max_standby_archive_delay и max_standby_streaming_delay, коÑоÑÑе опÑеделÑÑÑ Ð¼Ð°ÐºÑималÑно допÑÑÑимое вÑÐµÐ¼Ñ Ð·Ð°Ð´ÐµÑжки пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ WAL. ÐонÑликÑÑÑÑие запÑоÑÑ Ð±ÑдÑÑ Ð¾ÑмененÑ, еÑли они длÑÑÑÑ Ð´Ð¾Ð»ÑÑе допÑÑÑимого вÑемени задеÑжки пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾ÑеÑеднÑÑ Ð·Ð°Ð¿Ð¸Ñей WAL. Ðва паÑамеÑÑа ÑÑÑеÑÑвÑÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло задаÑÑ ÑазнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей WAL из аÑÑ Ð¸Ð²Ð° (Ñо еÑÑÑ Ð¿Ñи наÑалÑном воÑÑÑановлении из базовой копии либо пÑи «навÑÑÑÑÑвании» ведÑÑего ÑеÑвеÑа в ÑлÑÑае болÑÑого оÑÑÑаваниÑ) и Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей WAL пÑи поÑоковой ÑепликаÑии.
Ðа ÑезеÑвном ÑеÑвеÑе, Ñозданном пÑеимÑÑеÑÑвенно Ð´Ð»Ñ Ð¾ÑказоÑÑÑойÑивоÑÑи, лÑÑÑе вÑÑÑавлÑÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°Ð´ÐµÑжек оÑноÑиÑелÑно неболÑÑими, ÑÑÐ¾Ð±Ñ Ð¾Ð½ не мог ÑилÑно оÑÑÑаÑÑ Ð¾Ñ Ð²ÐµÐ´ÑÑего из-за задеÑжек, ÑвÑзаннÑÑ Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸ÐµÐ¼ запÑоÑов гоÑÑÑего ÑезеÑва. Ðднако еÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿ÑедназнаÑен Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ð¸ÑелÑнÑÑ Ð·Ð°Ð¿ÑоÑов, Ñо вÑÑокое знаÑение или даже беÑконеÑное ожидание могÑÑ Ð±ÑÑÑ Ð¿ÑедпоÑÑиÑелÑнее. Тем не менее ÑледÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð² видÑ, ÑÑо длиÑелÑнÑе запÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑ Ð²Ð»Ð¸Ñние на дÑÑгие ÑеанÑÑ Ð½Ð° ÑезеÑвном ÑеÑвеÑе в виде оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¾Ñ Ð²ÐµÐ´ÑÑего из-за задеÑжки пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей WAL.
Ð ÑлÑÑае, еÑли задеÑжка, опÑеделÑÐ½Ð½Ð°Ñ max_standby_archive_delay или max_standby_streaming_delay бÑÐ´ÐµÑ Ð¿ÑевÑÑена, конÑликÑÑÑÑий запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑменÑн. ÐбÑÑно ÑÑо вÑÑажаеÑÑÑ Ð² виде оÑибки оÑменÑ, но в ÑлÑÑае пÑоигÑÑÐ²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DROP DATABASE обÑÑваеÑÑÑ Ð²ÐµÑÑ ÐºÐ¾Ð½ÑликÑнÑй ÑеанÑ. Так же, еÑли конÑÐ»Ð¸ÐºÑ Ð¿ÑоизоÑел пÑи блокиÑовке, вÑзванной ÑÑанзакÑией в ÑоÑÑоÑнии IDLE, конÑликÑнÑй ÑÐµÐ°Ð½Ñ ÑазÑÑваеÑÑÑ (ÑÑо поведение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð² бÑдÑÑем).
ÐÑменÑннÑе запÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ повÑоÑÐµÐ½Ñ (конеÑно поÑле ÑÑаÑÑа новой ÑÑанзакÑии). Так как пÑиÑина оÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð¿ÑиÑÐ¾Ð´Ñ Ð¿ÑоигÑÑваемÑÑ Ð·Ð°Ð¿Ð¸Ñей WAL, запÑоÑ, коÑоÑÑй бÑл оÑменÑн, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑпеÑно вÑполнен вновÑ.
СледÑÐµÑ ÑÑеÑÑÑ, ÑÑо паÑамеÑÑÑ Ð·Ð°Ð´ÐµÑжки оÑÑÑиÑÑваÑÑÑÑ Ð¾Ñ Ð²Ñемени полÑÑÐµÐ½Ð¸Ñ ÑезеÑвнÑм ÑеÑвеÑом даннÑÑ WAL. Таким обÑазом, пеÑиод дозволенной ÑабоÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа на ÑезеÑвном ÑеÑвеÑе никогда не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð»Ð¸Ð½Ð½ÐµÐµ паÑамеÑÑа задеÑжки и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑеÑÑвенно коÑоÑе, еÑли ÑезеÑвнÑй Ñже Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² Ñежиме задеÑжки в ÑезÑлÑÑаÑе Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿ÑедÑдÑÑего запÑоÑа или ÑезÑлÑÑÐ°Ñ Ð½Ðµ доÑÑÑпен из-за вÑÑокой нагÑÑзки обновлений.
Ðаиболее ÑаÑÑой пÑиÑиной конÑликÑов Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿ÑоÑами на ÑезеÑвном ÑеÑвеÑе и пÑоигÑÑванием WAL ÑвлÑеÑÑÑ Ð¿ÑеждевÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÑиÑÑка. ÐбÑÑно Postgres Pro допÑÑÐºÐ°ÐµÑ Ð¾ÑиÑÑÐºÑ ÑÑаÑÑÑ Ð²ÐµÑÑий запиÑей пÑи ÑÑловии ÑÑо ни одна из ÑÑанзакÑий Ð¸Ñ Ð½Ðµ Ð²Ð¸Ð´Ð¸Ñ ÑоглаÑно пÑавилам видимоÑÑи даннÑÑ Ð´Ð»Ñ MVCC. Тем не менее ÑÑи пÑавила пÑименÑÑÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÑанзакÑий, вÑполнÑемÑÑ Ð½Ð° главном ÑеÑвеÑе. Таким обÑазом, допÑÑÑима ÑиÑÑаÑиÑ, когда на главном запиÑÑ Ñже оÑиÑена, но ÑÑа же запиÑÑ Ð²ÑÑ ÐµÑÑ Ð²Ð¸Ð´Ð½Ð° Ð´Ð»Ñ ÑÑанзакÑий на ÑезеÑвном ÑеÑвеÑе.
ÐÐ»Ñ Ð¾Ð¿ÑÑнÑÑ
полÑзоваÑелей ÑледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо как оÑиÑÑка ÑÑаÑÑÑ
веÑÑий ÑÑÑок, Ñак и замоÑозка веÑÑии ÑÑÑоки могÑÑ Ð¿Ð¾ÑенÑиалÑно вÑзваÑÑ ÐºÐ¾Ð½ÑÐ»Ð¸ÐºÑ Ñ Ð·Ð°Ð¿ÑоÑами на ÑезеÑвном ÑеÑвеÑе. Ð ÑÑной запÑÑк ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM FREEZE Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к конÑликÑÑ, даже в ÑаблиÑе без обновленнÑÑ
и ÑдалÑннÑÑ
ÑÑÑок.
ÐолÑзоваÑели Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑÑ, ÑÑо ÑегÑлÑÑное и акÑивное изменение даннÑÑ
в ÑаблиÑаÑ
на ведÑÑем ÑеÑвеÑе ÑÑеваÑо оÑменой длиÑелÑнÑÑ
запÑоÑов на ÑезеÑвном. Ð Ñаком ÑлÑÑае ÑÑÑановка конеÑного знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ max_standby_archive_delay или max_standby_streaming_delay дейÑÑвÑÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ огÑаниÑÐµÐ½Ð¸Ñ statement_timeout.
Ð ÑлÑÑае, еÑли колиÑеÑÑво оÑменÑннÑÑ
запÑоÑов на ÑезеÑвном ÑеÑвеÑе полÑÑаеÑÑÑ Ð½ÐµÐ¿ÑиемлемÑм, ÑÑÑеÑÑвÑÐµÑ ÑÑд дополниÑелÑнÑÑ
возможноÑÑей. ÐеÑÐ²Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ â ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ hot_standby_feedback, коÑоÑÑй не даÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ VACUUM ÑдалÑÑÑ Ð·Ð°Ð¿Ð¸Ñи, ÑÑавÑие недейÑÑвиÑелÑнÑми недавно, ÑÑо пÑедоÑвÑаÑÐ°ÐµÑ ÐºÐ¾Ð½ÑликÑÑ Ð¾ÑиÑÑки. ÐÑи ÑÑом ÑледÑÐµÑ ÑÑеÑÑÑ, ÑÑо ÑÑо вÑзÑÐ²Ð°ÐµÑ Ð·Ð°Ð´ÐµÑÐ¶ÐºÑ Ð¾ÑиÑÑки мÑÑÑвÑÑ
ÑÑÑок на ведÑÑем, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к нежелаÑелÑÐ½Ð¾Ð¼Ñ ÑаздÑÐ²Ð°Ð½Ð¸Ñ ÑаблиÑÑ. Тем не менее в иÑоге ÑиÑÑаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð½Ðµ Ñ
Ñже, Ñем еÑли Ð±Ñ Ð·Ð°Ð¿ÑоÑÑ Ðº ÑезеÑÐ²Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð¸ÑполнÑлиÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно на ведÑÑем, но пÑи ÑÑом ÑоÑ
ÑаниÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑй ÑÑÑÐµÐºÑ Ð¾Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð³ÑÑзки. Ð ÑлÑÑае, когда Ñоединение ÑезеÑвнÑÑ
ÑеÑвеÑов Ñ Ð²ÐµÐ´ÑÑим ÑаÑÑо ÑазÑÑваеÑÑÑ, ÑледÑÐµÑ ÑкоÑÑекÑиÑоваÑÑ Ð¿ÐµÑиод, в ÑеÑение коÑоÑого обÑаÑÐ½Ð°Ñ ÑвÑÐ·Ñ ÑеÑез hot_standby_feedback не обеÑпеÑиваеÑÑÑ. ÐапÑимеÑ, ÑледÑÐµÑ Ð¿Ð¾Ð´ÑмаÑÑ Ð¾Ð± ÑвелиÑении max_standby_archive_delay, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑоÑÑ Ð¾ÑменÑлиÑÑ Ð½Ðµ ÑÑÐ°Ð·Ñ Ð¿Ñи конÑликÑаÑ
Ñ Ð°ÑÑ
ивом WAL в пеÑиод ÑазÑединениÑ. Также Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑмÑÑл ÑвелиÑиÑÑ max_standby_streaming_delay Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð±ÑÑÑÑой оÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð¿ÑоÑов из-за полÑÑеннÑÑ
запиÑей WAL поÑле воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоединениÑ.
ÐÑÑÐ³Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ â ÑвелиÑение vacuum_defer_cleanup_age на ведÑÑем ÑеÑвеÑе Ñаким обÑазом, ÑÑÐ¾Ð±Ñ Ð¼ÑÑÑвÑе запиÑи не оÑиÑалиÑÑ Ð±Ñ Ñак бÑÑÑÑо, как пÑи обÑÑном Ñежиме ÑабоÑÑ. ÐÑо даÑÑ Ð·Ð°Ð¿ÑоÑам на ÑезеÑвном ÑеÑвеÑе болÑÑе вÑемени на вÑполнение, пÑежде Ñем они могÑÑ Ð±ÑÑÑ Ð¾ÑмененÑ, без ÑвелиÑÐµÐ½Ð¸Ñ Ð·Ð°Ð´ÐµÑжки max_standby_streaming_delay. Тем не менее пÑи Ñаком подÑ
оде оÑÐµÐ½Ñ ÑÑÑдно обеÑпеÑиÑÑ ÐºÐ°ÐºÐ¾Ðµ-Ñо опÑеделÑнное окно по вÑемени, Ñак как vacuum_defer_cleanup_age измеÑÑеÑÑÑ Ð² колиÑеÑÑве ÑÑанзакÑий, вÑполнÑемÑÑ
на ведÑÑем ÑеÑвеÑе.
ÐолиÑеÑÑво оÑменÑннÑÑ
запÑоÑов и пÑиÑÐ¸Ð½Ñ Ð¾ÑÐ¼ÐµÐ½Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑоÑмоÑÑеÑÑ ÑеÑез ÑиÑÑемное пÑедÑÑавление pg_stat_database_conflicts на ÑезеÑвном ÑеÑвеÑе. СиÑÑемное пÑедÑÑавление pg_stat_database Ñак же ÑодеÑÐ¶Ð¸Ñ Ð¸ÑоговÑÑ Ð¸Ð½ÑоÑмаÑиÑ.
25.5.3. ÐÐ±Ð·Ð¾Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑивной ÑаÑÑи
ÐÑли в Ñайле postgresql.conf паÑамеÑÑ hot_standby Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение on (знаÑение по ÑмолÑаниÑ) и ÑÑÑеÑÑвÑÐµÑ Ñайл standby.signal, ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва. Ðднако Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑойÑи некоÑоÑое вÑемÑ, пÑежде Ñем к Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑÐ´ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ, Ñак как он не бÑÐ´ÐµÑ Ð¿ÑинимаÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, пока не пÑоизведÑÑ Ð²Ð¾ÑÑÑановление до ÑоглаÑованного ÑоÑÑоÑниÑ, подÑ
одÑÑего Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов. (ÐнÑоÑмаÑÐ¸Ñ Ð¾ ÑоглаÑованноÑÑи ÑоÑÑоÑÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑваеÑÑÑ Ð½Ð° ведÑÑем ÑеÑвеÑе в конÑÑолÑной ÑоÑке.) Ð ÑеÑение ÑÑого пеÑиода клиенÑÑ Ð¿Ñи попÑÑке подклÑÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ ÑообÑение об оÑибке. УбедиÑÑÑÑ, ÑÑо ÑеÑÐ²ÐµÑ Ð²ÐºÐ»ÑÑилÑÑ Ð² ÑабоÑÑ, можно либо повÑоÑÑÑ Ð¿Ð¾Ð¿ÑÑки подклÑÑÐµÐ½Ð¸Ñ Ð¸Ð· пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾ ÑÑпеÑного подклÑÑениÑ, либо дождавÑиÑÑ Ð¿Ð¾ÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð² жÑÑналаÑ
ÑеÑвеÑа ÑакиÑ
ÑообÑений:
LOG: entering standby mode ... then some time later ... LOG: consistent recovery state reached LOG: database system is ready to accept read only connections
ÐклÑÑиÑÑ Ð³Ð¾ÑÑÑий ÑезеÑв нелÑзÑ, еÑли WAL бÑл запиÑан в пеÑиод, когда на ведÑÑем ÑеÑвеÑе паÑамеÑÑ wal_level имел знаÑение, оÑлиÑное Ð¾Ñ replica и logical. ÐоÑÑижение ÑоглаÑованного ÑоÑÑоÑÐ½Ð¸Ñ Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑÑоÑено, еÑли имеÑÑ Ð¼ÐµÑÑо оба ÑÑиÑ
ÑÑловиÑ:
ÐиÑÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÐµÐµ 64 подÑÑанзакÑий
ÐÑÐµÐ½Ñ Ð´Ð»Ð¸ÑелÑнÑе пиÑÑÑие ÑÑанзакÑии
ÐÑли Ð²Ñ Ð¿ÑименÑеÑе ÑайловÑÑ ÑепликаÑÐ¸Ñ Ð¶ÑÑналов («ÑÑплÑй ÑезеÑв»), возможно, пÑидÑÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð¿ÑибÑÑÐ¸Ñ ÑледÑÑÑего Ñайла WAL (макÑималÑное вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð°ÑамеÑÑом archive_timeout на ведÑÑем ÑеÑвеÑе).
ÐнаÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¿Ð°ÑамеÑÑов на ÑезеÑвном ÑеÑвеÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ измениÑÑ Ð¿Ñи модиÑикаÑии Ð¸Ñ Ð½Ð° ведÑÑем. ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ Ð¿Ð°ÑамеÑÑов знаÑÐµÐ½Ð¸Ñ Ð½Ð° ÑезеÑвном ÑеÑвеÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð½Ðµ менÑÑе знаÑений на ведÑÑем. Таким обÑазом, еÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑвелиÑиÑÑ Ð¸Ñ , Ð²Ñ ÑнаÑала Ð´Ð¾Ð»Ð¶Ð½Ñ ÑделаÑÑ ÑÑо на ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ , а заÑем пÑимениÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° ведÑÑем. РнаобоÑоÑ, еÑли Ð²Ñ Ñ Ð¾ÑиÑе Ð¸Ñ ÑменÑÑиÑÑ, ÑнаÑала ÑделайÑе ÑÑо на ведÑÑем ÑеÑвеÑе, а поÑом пÑимениÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° вÑÐµÑ ÑезеÑвнÑÑ . ÐÑли паÑамеÑÑÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно болÑÑие знаÑениÑ, ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ ÑÐ¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑаÑÑ ÑабоÑÑ. Ð ÑÑом ÑлÑÑае можно ÑвелиÑиÑÑ Ð¸Ñ Ð¸ повÑоÑиÑÑ Ð¿Ð¾Ð¿ÑÑÐºÑ Ð·Ð°Ð¿ÑÑка ÑеÑвеÑа, ÑÑÐ¾Ð±Ñ Ð¾Ð½ возобновил воÑÑÑановление. ÐÑо каÑаеÑÑÑ ÑледÑÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов:
max_connectionsmax_prepared_transactionsmax_locks_per_transactionmax_wal_sendersmax_worker_processes
ÐÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ Ð´Ð»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑа вÑбÑаÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ max_standby_archive_delay и max_standby_streaming_delay. ÐпÑималÑное знаÑение завиÑÐ¸Ñ Ð¾Ñ Ð¿ÑиоÑиÑеÑов. ÐапÑимеÑ, еÑли оÑновное назнаÑение ÑеÑвеÑа â обеÑпеÑение вÑÑокой ÑÑепени доÑÑÑпноÑÑи, Ñо ÑледÑÐµÑ ÑÑÑановиÑÑ ÐºÐ¾ÑоÑкий пеÑиод, возможно даже нÑлевой, Ñ Ð¾ÑÑ ÑÑо оÑÐµÐ½Ñ Ð¶ÑÑÑкий ваÑианÑ. ÐÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑÑÑ ÐºÐ°Ðº дополниÑелÑнÑй ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð°Ð½Ð°Ð»Ð¸ÑиÑеÑÐºÐ¸Ñ Ð·Ð°Ð¿ÑоÑов, Ñо пÑиемлемой бÑÐ´ÐµÑ Ð¼Ð°ÐºÑималÑÐ½Ð°Ñ Ð·Ð°Ð´ÐµÑжка в неÑколÑко ÑаÑов или даже -1, ÑÑо ознаÑÐ°ÐµÑ Ð±ÐµÑконеÑное ожидание оконÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа.
ÐÑпомогаÑелÑнÑе биÑÑ ÑÑаÑÑÑа ÑÑанзакÑий, запиÑаннÑе на ведÑÑем, не попадаÑÑ Ð² WAL, Ñак ÑÑо они, ÑкоÑее вÑего, бÑдÑÑ Ð¿ÐµÑезапиÑÐ°Ð½Ñ Ð½Ð° нÑм пÑи ÑабоÑе Ñ Ð´Ð°Ð½Ð½Ñми. Таким обÑазом, ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÑоизводиÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ð° диÑк, даже еÑли вÑе полÑзоваÑели ÑолÑко ÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе, ниÑего не менÑÑ. ÐÑоме Ñого, полÑзоваÑели бÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð²ÑеменнÑе ÑÐ°Ð¹Ð»Ñ Ð¿Ñи ÑоÑÑиÑовке болÑÑÐ¸Ñ Ð¾Ð±ÑÑмов и обновлÑÑÑ ÑÐ°Ð¹Ð»Ñ ÐºÐµÑа. ÐоÑÑÐ¾Ð¼Ñ Ð² Ñежиме гоÑÑÑего ÑезеÑва ни одна ÑаÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ ÑакÑиÑеÑки не ÑабоÑÐ°ÐµÑ Ð² Ñежиме «ÑолÑко ÑÑение». СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо Ñакже возможно вÑполниÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² ÑдалÑннÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ dblink и дÑÑгие опеÑаÑии вне Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð¿Ñименением PL-ÑÑнкÑий, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑÑанзакÑии по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑмогÑÑ ÑолÑко ÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе.
СледÑÑÑие ÑÐ¸Ð¿Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑивнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ недоÑÑÑÐ¿Ð½Ñ Ð² ÑеÑение Ñежима воÑÑÑановлениÑ:
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ (DDL):
CREATE INDEXи Ñ. п.ÐÐ¾Ð¼Ð°Ð½Ð´Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñавами и назнаÑÐµÐ½Ð¸Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа:
GRANT,REVOKE,REASSIGNÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð±ÑлÑживаниÑ:
ANALYZE,VACUUM,CLUSTER,REINDEX
ÐÑÑ Ñаз ÑледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо некоÑоÑÑе из ÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ ÑакÑиÑеÑки доÑÑÑÐ¿Ð½Ñ Ð½Ð° ведÑÑем ÑеÑвеÑе Ð´Ð»Ñ ÑÑанзакÑий в Ñежиме ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
Ð ÑезÑлÑÑаÑе нелÑÐ·Ñ ÑоздаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе индекÑÑ Ð¸Ð»Ð¸ ÑÑаÑиÑÑикÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ ÑÑÑеÑÑвовали ÑолÑко на ÑезеÑвном. ÐÑли подобнÑе админиÑÑÑаÑивнÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½ÑжнÑ, Ñо Ð¸Ñ ÑледÑÐµÑ Ð²ÑполниÑÑ Ð½Ð° ведÑÑем ÑеÑвеÑе, заÑем ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ñ Ð½Ð° ÑезеÑвнÑе ÑеÑвеÑÑ.
ФÑнкÑии pg_cancel_backend() и pg_terminate_backend() ÑабоÑаÑÑ Ð½Ð° ÑÑоÑоне полÑзоваÑелÑ, но не Ð´Ð»Ñ Ð¿ÑоÑеÑÑа запÑÑка, коÑоÑÑй обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²Ð¾ÑÑÑановление. ÐÑедÑÑавление pg_stat_activity не показÑÐ²Ð°ÐµÑ Ð²Ð¾ÑÑÑанавливаемÑе ÑÑанзакÑии как акÑивнÑе. ÐоÑÑÐ¾Ð¼Ñ Ð¿ÑедÑÑавление pg_prepared_xacts вÑегда пÑÑÑо в Ñ
оде воÑÑÑановлениÑ. ÐÑли ÑÑебÑеÑÑÑ ÑазобÑаÑÑ ÑомниÑелÑнÑе подгоÑовленнÑе ÑÑанзакÑии, ÑледÑÐµÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº pg_prepared_xacts на ведÑÑем и вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð»Ñ ÑазбоÑа ÑÑанзакÑий Ñам либо ÑазобÑаÑÑ Ð¸Ñ
по оконÑании воÑÑÑановлениÑ.
pg_locks оÑобÑÐ°Ð¶Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки, пÑоиÑÑ
одÑÑие в пÑоÑеÑÑе ÑабоÑÑ ÑеÑвеÑа как обÑÑно. pg_locks Ñак же показÑÐ²Ð°ÐµÑ Ð²Ð¸ÑÑÑалÑнÑе ÑÑанзакÑии, обÑабоÑаннÑе пÑоÑеÑÑом запÑÑка, коÑоÑÐ¾Ð¼Ñ Ð¿ÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñ Ð²Ñе AccessExclusiveLocks, наложеннÑе ÑÑанзакÑиÑми в Ñежиме воÑÑÑановлениÑ. СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо пÑоÑеÑÑ Ð·Ð°Ð¿ÑÑка не запÑаÑÐ¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки, ÑÑÐ¾Ð±Ñ Ð²Ð½ÐµÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, поÑÑÐ¾Ð¼Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовки, оÑлиÑнÑе Ð¾Ñ AccessExclusiveLocks не показÑваÑÑÑÑ Ð² pg_locks Ð´Ð»Ñ Ð¿ÑоÑеÑÑа запÑÑка, подÑазÑмеваеÑÑÑ Ð¸Ñ
ÑÑÑеÑÑвование.
ÐодÑÐ»Ñ check_pgsql Ð´Ð»Ñ Nagios бÑÐ´ÐµÑ ÑабоÑаÑÑ, Ñак как ÑеÑÐ²ÐµÑ Ð²ÑдаÑÑ Ð¿ÑоÑÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ, налиÑие коÑоÑой он пÑовеÑÑеÑ. СкÑÐ¸Ð¿Ñ Ð¼Ð¾Ð½Ð¸ÑоÑинга check_postgres Ñак же ÑабоÑаеÑ, Ñ Ð¾ÑÑ Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð²ÑдаваемÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñелей ÑезÑлÑÑаÑÑ Ð¼Ð¾Ð³ÑÑ ÑазлиÑаÑÑÑÑ Ð¸Ð»Ð¸ вводиÑÑ Ð² заблÑждение. ÐапÑимеÑ, нелÑÐ·Ñ Ð¾ÑÑледиÑÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð¾Ñледней оÑиÑÑки, Ñак как оÑиÑÑка не пÑоизводиÑÑÑ Ð½Ð° ÑезеÑвном ÑеÑвеÑе. ÐÑиÑÑка запÑÑкаеÑÑÑ Ð½Ð° ведÑÑем ÑеÑвеÑе и ÑезÑлÑÑаÑÑ ÐµÑ ÑабоÑÑ Ð¿ÐµÑедаÑÑÑÑ ÑезеÑвномÑ.
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñайлами WAL, напÑÐ¸Ð¼ÐµÑ pg_start_backup, pg_switch_wal и Ñ. д. не бÑдÑÑ ÑабоÑаÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ.
ÐинамиÑеÑки загÑÑжаемÑе модÑли ÑабоÑаÑÑ Ð±ÑдÑÑ, вклÑÑÐ°Ñ pg_stat_statements.
РекомендаÑелÑÐ½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовка ÑабоÑÐ°ÐµÑ Ð¾Ð±ÑÑно пÑи воÑÑÑановлении, вклÑÑÐ°Ñ Ð¾Ð±Ð½Ð°ÑÑжение взаимнÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовок. СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо ÑекомендаÑелÑÐ½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовка никогда не Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð² WAL, Ñаким обÑазом Ð´Ð»Ñ ÑекомендаÑелÑной блокиÑовки как на ведÑÑем ÑеÑвеÑе, Ñак и на ÑезеÑвном, невозможен конÑÐ»Ð¸ÐºÑ Ñ Ð¿ÑоигÑÑванием WAL. Ðо возможно полÑÑение ÑекомендаÑелÑной блокиÑовки на ведÑÑем ÑеÑвеÑе, а заÑем полÑÑение подобной ÑекомендаÑелÑной блокиÑовки на ÑезеÑвном. РекомендаÑелÑÐ½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовка оÑноÑиÑÑÑ ÑолÑко к ÑеÑвеÑÑ, на коÑоÑом она полÑÑена.
СиÑÑÐµÐ¼Ñ ÑепликаÑии на базе ÑÑиггеÑов, подобнÑе Slony, Londiste и Bucardo не могÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð½Ð° ÑезеÑвном ÑеÑвеÑе вовÑе, Ñ Ð¾ÑÑ Ð¾Ð½Ð¸ пÑевоÑÑ Ð¾Ð´Ð½Ð¾ ÑабоÑаÑÑ Ð½Ð° ведÑÑем до ÑÐµÑ Ð¿Ð¾Ñ, пока не бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð°Ð½Ð° команда не пеÑеÑÑлаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° ÑезеÑвнÑй. ÐÑоигÑÑвание WAL не оÑновано на ÑÑиггеÑÐ°Ñ , поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ñок WAL нелÑÐ·Ñ ÑÑанÑлиÑоваÑÑ Ñ ÑезеÑвного ÑеÑвеÑа в дÑÑгÑÑ ÑиÑÑемÑ, коÑоÑÐ°Ñ ÑÑебÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной запиÑи в ÐРили ÑабоÑÐ°ÐµÑ Ð½Ð° оÑнове ÑÑиггеÑов.
ÐовÑе OID не могÑÑ Ð±ÑÑÑ Ð²ÑданÑ, Ñ Ð¾ÑÑ, напÑÐ¸Ð¼ÐµÑ Ð³ÐµÐ½ÐµÑаÑоÑÑ UUID ÑмогÑÑ ÑабоÑаÑÑ, еÑли они не пÑÑаÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð½Ð¾Ð²Ð¾Ðµ ÑоÑÑоÑние в Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
РнаÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñоздание вÑеменнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимо пÑи ÑÑанзакÑии ÑолÑко Ð´Ð»Ñ ÑÑениÑ, в некоÑоÑÑÑ ÑлÑÑаÑÑ ÑÑÑеÑÑвÑÑÑий ÑкÑÐ¸Ð¿Ñ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ Ð½ÐµÐ²ÐµÑно. ÐÑо огÑаниÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñлаблено в ÑледÑÑÑÐ¸Ñ Ð²ÑпÑÑÐºÐ°Ñ . ÐÑо одновÑеменно ÑÑебование SQL ÑÑандаÑÑа и ÑÐµÑ Ð½Ð¸ÑеÑкое ÑÑебование.
Ðоманда DROP TABLESPACE Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнена ÑолÑко еÑли ÑаблиÑное пÑоÑÑÑанÑÑво пÑÑÑо. ÐекоÑоÑÑе полÑзоваÑели ÑезеÑвного ÑеÑвеÑа могÑÑ Ð°ÐºÑивно иÑполÑзоваÑÑ ÑаблиÑное пÑоÑÑÑанÑÑво ÑеÑез паÑамеÑÑ temp_tablespaces. ÐÑли имеÑÑÑÑ Ð²ÑеменнÑе ÑÐ°Ð¹Ð»Ñ Ð² ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑваÑ
, вÑе акÑивнÑе запÑоÑÑ Ð¾ÑменÑÑÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²ÑеменнÑÑ
Ñайлов, заÑем ÑаблиÑное пÑоÑÑÑанÑÑво Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалено и пÑодолжено пÑоигÑÑвание WAL.
ÐÑполнение ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DROP DATABASE или ALTER DATABASE ... SET TABLESPACE на ведÑÑем ÑеÑвеÑе пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи в WAL, коÑоÑÐ°Ñ Ð²ÑзÑÐ²Ð°ÐµÑ Ð¿ÑинÑдиÑелÑное оÑклÑÑение вÑеÑ
полÑзоваÑелей, подклÑÑÑннÑÑ
к ÑÑой базе даннÑÑ
на ÑезеÑвном. ÐÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾, вне завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ max_standby_streaming_delay. СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо команда ALTER DATABASE ... RENAME не пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº оÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей, Ñак ÑÑо обÑÑно она дейÑÑвÑÐµÑ Ð½ÐµÐ·Ð°Ð¼ÐµÑно, Ñ
оÑÑ Ð² некоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ñбои пÑогÑамм, коÑоÑÑе завиÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
ÐÑли Ð²Ñ Ð² обÑÑном Ñежиме (не в Ñежиме воÑÑÑановлениÑ) вÑполниÑе DROP USER или DROP ROLE Ð´Ð»Ñ Ñоли Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, в моменÑ, когда ÑÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÑн, на данном полÑзоваÑеле ÑÑо никак не оÑÑазиÑÑÑ â он оÑÑанеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÑннÑм. Ðднако пеÑеподклÑÑиÑÑÑÑ Ð¾Ð½ Ñже не ÑможеÑ. ÐÑо же поведение дейÑÑвÑÐµÑ Ð² Ñежиме воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ â еÑли вÑполниÑÑ DROP USER на ведÑÑем ÑеÑвеÑе, полÑзоваÑÐµÐ»Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¾ÑклÑÑÑн Ð¾Ñ ÑезеÑвного.
СбоÑÑик ÑÑаÑиÑÑики ÑабоÑÐ°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ. ÐÑе опеÑаÑии ÑканиÑованиÑ, ÑÑениÑ, блоки, иÑполÑзование индекÑов и Ñ. п. бÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð¾Ð±ÑÑнÑм обÑазом на ÑезеÑвном ÑеÑвеÑе. ÐейÑÑвиÑ, пÑоиÑÑ Ð¾Ð´ÑÑие пÑи пÑоигÑÑвании, не бÑдÑÑ Ð´ÑблиÑоваÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð½Ð° ведÑÑем ÑеÑвеÑе, Ñо еÑÑÑ Ð¿ÑоигÑÑвание ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð²ÑÑавки не ÑвелиÑÐ¸Ñ Ð·Ð½Ð°Ñение ÑÑолбÑа Inserts в пÑедÑÑавлении pg_stat_user_tables. Ð¤Ð°Ð¹Ð»Ñ ÑÑаÑиÑÑики ÑдалÑÑÑÑÑ Ñ Ð½Ð°Ñалом воÑÑÑановлениÑ, Ñаким обÑазом, ÑÑаÑиÑÑика на ведÑÑем ÑеÑвеÑе и ÑезеÑвном бÑÐ´ÐµÑ Ñазной. ÐÑо ÑвлÑеÑÑÑ Ð¾ÑобенноÑÑÑÑ, не оÑибкой.
ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð¾ÑиÑÑка не ÑабоÑÐ°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ. Ðна запÑÑÑиÑÑÑ Ð² обÑÑном Ñежиме поÑле завеÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑановлениÑ.
Ðо вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑабоÑÐ°ÐµÑ Ð¿ÑоÑеÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ
ÑоÑек и пÑоÑеÑÑ Ñоновой запиÑи. ÐÑоÑеÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ
ÑоÑек обÑабаÑÑÐ²Ð°ÐµÑ ÑоÑки пеÑезапÑÑка (подобнÑе конÑÑолÑнÑм ÑоÑкам на ведÑÑем ÑеÑвеÑе), а пÑоÑеÑÑ Ñоновой запиÑи вÑполнÑÐµÑ Ð¾Ð±ÑÑнÑе опеÑаÑии по оÑиÑÑке блоков. Ð Ñом ÑиÑле он Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ Ð²ÑпомогаÑелÑнÑе биÑÑ, ÑоÑ
ÑанÑннÑе на ÑезеÑвном ÑеÑвеÑе. Ðо вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑинимаеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CHECKPOINT, но она пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑоÑÐºÑ Ð¿ÐµÑезапÑÑка, а не ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑоÑÐºÑ Ð²Ð¾ÑÑÑановлениÑ.
25.5.4. СÑÑлки на паÑамеÑÑÑ Ð³Ð¾ÑÑÑего ÑезеÑва
РазлиÑнÑе паÑамеÑÑÑ Ð±Ñли ÑпомÑнÑÑÑ Ð²ÑÑе в ÐодÑазделе 25.5.2 и ÐодÑазделе 25.5.3.
Ðа ведÑÑем могÑÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ wal_level и vacuum_defer_cleanup_age. ÐаÑамеÑÑÑ max_standby_archive_delay и max_standby_streaming_delay на ведÑÑем не дейÑÑвÑÑÑ.
Ðа ÑезеÑвном ÑеÑвеÑе могÑÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ hot_standby, max_standby_archive_delay и max_standby_streaming_delay. ÐаÑамеÑÑ vacuum_defer_cleanup_age на нÑм не дейÑÑвÑеÑ, пока ÑеÑÐ²ÐµÑ Ð¾ÑÑаÑÑÑÑ Ð² Ñежиме ÑезеÑвного ÑеÑвеÑа. Ðо еÑли он ÑÑÐ°Ð½ÐµÑ Ð²ÐµÐ´ÑÑим, его знаÑение вÑÑÑÐ¿Ð¸Ñ Ð² ÑилÑ.
25.5.5. ÐгÑаниÑениÑ
ÐмеÑÑÑÑ ÑледÑÑÑие огÑаниÑÐµÐ½Ð¸Ñ Ð³Ð¾ÑÑÑего ÑезеÑва. Ðни могÑÑ Ð¸ ÑкоÑее вÑего бÑдÑÑ Ð¸ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² ÑледÑÑÑÐ¸Ñ Ð²ÑпÑÑÐºÐ°Ñ :
ТÑебÑеÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вÑÐµÑ Ð·Ð°Ð¿ÑÑеннÑÑ ÑÑанзакÑиÑÑ Ð¿ÐµÑед Ñем как бÑÐ´ÐµÑ Ñоздан Ñнимок даннÑÑ . ТÑанзакÑии, иÑполÑзÑÑÑие болÑÑое колиÑеÑÑво подÑÑанзакÑий (в наÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð±Ð¾Ð»ÑÑе 64), бÑдÑÑ Ð·Ð°Ð´ÐµÑживаÑÑ Ð½Ð°Ñало ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ Ñамой длинной пиÑÑÑей ÑÑанзакÑии. ÐÑи возникновении ÑÑой ÑиÑÑаÑии поÑÑнÑÑÑее ÑообÑение бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñано в жÑÑнал ÑеÑвеÑа.
ÐÐ¾Ð´Ñ Ð¾Ð´ÑÑие ÑÑаÑÑовÑе ÑоÑки Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов на ÑезеÑвном ÑеÑвеÑе ÑоздаÑÑÑÑ Ð¿Ñи каждой конÑÑолÑной ÑоÑке на главном. ÐÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¾ÑклÑÑаеÑÑÑ, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº главнÑй бÑл в оÑклÑÑÑнном ÑоÑÑоÑнии, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм возобновиÑÑ ÐµÐ³Ð¾ ÑабоÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва, до Ñого, как запÑÑÑиÑÑÑ Ð²ÐµÐ´ÑÑий и Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ ÑледÑÑÑие ÑÑаÑÑовÑе ÑоÑки в жÑÑÐ½Ð°Ð»Ñ WAL. ÐÐ¾Ð´Ð¾Ð±Ð½Ð°Ñ ÑиÑÑаÑÐ¸Ñ Ð½Ðµ ÑвлÑеÑÑÑ Ð¿Ñоблемой Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва ÑлÑÑаев, в коÑоÑÑÑ Ð¾Ð½Ð° Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи. ÐбÑÑно, еÑли ведÑÑий ÑеÑÐ²ÐµÑ Ð²ÑклÑÑен и болÑÑе не доÑÑÑпен, ÑÑо ÑвлÑеÑÑÑ ÑледÑÑвием ÑеÑÑÑзного ÑÐ±Ð¾Ñ Ð¸ в лÑбом ÑлÑÑае ÑÑебÑÐµÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑезеÑвного в новÑй ведÑÑий. Так же в ÑиÑÑаÑии, когда ведÑÑий оÑклÑÑÑн намеÑенно, пÑовеÑка гоÑовноÑÑи ÑезеÑвного к пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ведÑÑий Ñоже ÑвлÑеÑÑÑ Ð¾Ð±ÑÑной пÑоÑедÑÑой.
РконÑе воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовки
AccessExclusiveLocks, вÑзваннÑе подгоÑовленнÑми ÑÑанзакÑиÑми, ÑÑебÑÑÑ Ñдвоенное, в ÑÑавнении Ñ Ð½Ð¾ÑмалÑнÑм, колиÑеÑÑво блокиÑовок запиÑей ÑаблиÑÑ. ÐÑли планиÑÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð»Ð¸Ð±Ð¾ болÑÑое колиÑеÑÑво конкÑÑиÑÑÑÑÐ¸Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑÑ ÑÑанзакÑий, обÑÑно вÑзÑваÑÑиеAccessExclusiveLocks, либо болÑÑие ÑÑанзакÑии Ñ Ð¿Ñименением болÑÑого колиÑеÑÑваAccessExclusiveLocks, Ñо ÑекомендÑеÑÑÑ Ð²ÑбÑаÑÑ Ð±Ð¾Ð»ÑÑое знаÑение паÑамеÑÑаmax_locks_per_transaction, возможно в два Ñаза болÑÑее, Ñем знаÑение паÑамеÑÑа на ведÑÑем ÑеÑвеÑе. ÐÑÑ ÑÑо не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ, когдаmax_prepared_transactionsÑавно 0.УÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑии Serializable в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½ÐµÐ´Ð¾ÑÑÑпен в гоÑÑÑем ÑезеÑве. (Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 13.2.3 и ÐодÑазделÑ 13.4.1) ÐопÑÑка вÑÑÑавиÑÑ Ð´Ð»Ñ ÑÑанзакÑии Ñакой ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии в Ñежиме гоÑÑÑего ÑезеÑва вÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑибкÑ.