25.4. ÐоÑÑÑий ÑезеÑв #
ТеÑмин «гоÑÑÑий ÑезеÑв» иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи подклÑÑаÑÑÑÑ Ðº ÑеÑвеÑÑ Ð¸ вÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð½Ð° ÑÑение, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº ÑеÑÐ²ÐµÑ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² Ñежиме ÑезеÑва или воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÑÑ Ð¸Ð²Ð°. ÐÑо полезно и Ð´Ð»Ñ Ñелей ÑепликаÑии, и Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑоÑÑоÑÐ½Ð¸Ñ Ð¸Ð· ÑезеÑвной копии Ñ Ð²ÑÑокой ÑоÑноÑÑÑÑ. Так же ÑеÑмин «гоÑÑÑий ÑезеÑв» опиÑÑÐ²Ð°ÐµÑ ÑпоÑобноÑÑÑ ÑеÑвеÑа пеÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ð¸Ð· Ñежима воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ðº обÑÑной ÑабоÑе, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº полÑзоваÑели пÑодолжаÑÑ Ð²ÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¸/или Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾ÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑми.
Ð Ñежиме гоÑÑÑего ÑезеÑва запÑоÑÑ Ð²ÑполнÑÑÑÑÑ Ð¿ÑимеÑно Ñак же, как и в обÑÑном Ñежиме, Ñ Ð½ÐµÐºÐ¾ÑоÑÑми оÑлиÑиÑми в иÑполÑзовании и админиÑÑÑиÑовании, опиÑаннÑми ниже.
25.4.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,MERGE,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 in_hot_standby. (ÐаÑамеÑÑ in_hot_standby поÑвилÑÑ Ð² веÑÑии 14 ÑеÑвеÑа; Ñ Ð±Ð¾Ð»ÐµÐµ ÑÑаÑÑми ÑеÑвеÑами ÑабоÑÐ°ÐµÑ Ð´ÑÑгой ваÑÐ¸Ð°Ð½Ñ â SHOW transaction_read_only.) ÐÑоме Ñого, полÑзоваÑели могÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑезеÑвном ÑеÑвеÑе, иÑполÑзÑÑ ÑÑд ÑÑнкÑий (Ñм. ТаблиÑÑ 9.98). ÐÑи ÑÑедÑÑва позволÑÑÑ ÐºÐ°Ðº ÑоздаваÑÑ Ð¿ÑогÑаммÑ, ÑÑиÑÑваÑÑие ÑекÑÑий ÑÑаÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ñак и оÑÑлеживаÑÑ Ð¿ÑоÑеÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑазÑабаÑÑваÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе пÑогÑÐ°Ð¼Ð¼Ñ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð· даннÑÑ
в нÑжном ÑоÑÑоÑнии.
25.4.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. Тем не менее ÑÑи пÑавила пÑименÑÑÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÑанзакÑий, вÑполнÑемÑÑ Ð½Ð° главном ÑеÑвеÑе. Таким обÑазом, допÑÑÑима ÑиÑÑаÑиÑ, когда на главном запиÑÑ Ñже оÑиÑена, но ÑÑа же запиÑÑ Ð²ÑÑ ÐµÑÑ Ð²Ð¸Ð´Ð½Ð° Ð´Ð»Ñ ÑÑанзакÑий на ÑезеÑвном ÑеÑвеÑе.
ÐÑиÑÑка ÑÑаÑÑÑ
веÑÑий ÑÑÑок â не единÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾ÑенÑиалÑÐ½Ð°Ñ Ð¿ÑиÑина конÑликÑов Ñ Ð·Ð°Ð¿ÑоÑами на ÑезеÑвном ÑеÑвеÑе. ÐÑе ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑолÑко индекÑа (вклÑÑÐ°Ñ Ñе, коÑоÑÑе вÑполнÑÑÑÑÑ Ð½Ð° ÑезеÑвнÑÑ
ÑеÑвеÑаÑ
) Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ Ñнимок MVCC, коÑоÑÑй «ÑоглаÑÑеÑÑÑ» Ñ ÐºÐ°ÑÑой видимоÑÑи. ÐоÑÑÐ¾Ð¼Ñ ÐºÐ¾Ð½ÑликÑÑ Ð½ÐµÐ¾Ð±Ñ
Ð¾Ð´Ð¸Ð¼Ñ Ð²ÑÑкий Ñаз, когда VACUUM помеÑÐ°ÐµÑ ÑÑÑаниÑÑ, в коÑоÑой еÑÑÑ Ð¾Ð´Ð½Ð° или неÑколÑко ÑÑÑок, невидимÑÑ
Ð´Ð»Ñ Ð²ÑеÑ
запÑоÑов ÑезеÑвного ÑеÑвеÑа, как полноÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð² каÑÑе видимоÑÑи. Таким обÑазом, даже вÑполнение VACUUM Ð´Ð»Ñ ÑаблиÑÑ Ð±ÐµÐ· изменÑннÑÑ
или ÑдалÑннÑÑ
ÑÑÑок, ÑÑебÑÑÑиÑ
оÑиÑÑки, Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к конÑликÑам.
ÐолÑзоваÑели Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÑÑ, ÑÑо ÑегÑлÑÑное и акÑивное изменение даннÑÑ
в ÑаблиÑаÑ
на ведÑÑем ÑеÑвеÑе ÑÑеваÑо оÑменой длиÑелÑнÑÑ
запÑоÑов на ÑезеÑвном. Ð Ñаком ÑлÑÑае ÑÑÑановка конеÑного знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ 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 поÑле воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоединениÑ.
ÐолиÑеÑÑво оÑменÑннÑÑ
запÑоÑов и пÑиÑÐ¸Ð½Ñ Ð¾ÑÐ¼ÐµÐ½Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑоÑмоÑÑеÑÑ ÑеÑез ÑиÑÑемное пÑедÑÑавление pg_stat_database_conflicts на ÑезеÑвном ÑеÑвеÑе. СиÑÑемное пÑедÑÑавление pg_stat_database Ñак же ÑодеÑÐ¶Ð¸Ñ Ð¸ÑоговÑÑ Ð¸Ð½ÑоÑмаÑиÑ.
ÐÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ log_recovery_conflict_waits, полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑегÑлиÑоваÑÑ, вноÑÑÑÑÑ Ð»Ð¸ в жÑÑнал ÑообÑÐµÐ½Ð¸Ñ Ð¾ Ñом, ÑÑо пÑи воÑпÑоизведении WAL вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑазÑеÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑликÑа пÑевÑÑило deadlock_timeout.
25.4.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 подÑÑанзакÑий.
ÐиÑÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÐµÐµ 64 подÑÑанзакÑий
ÐÑÐµÐ½Ñ Ð´Ð»Ð¸ÑелÑнÑе пиÑÑÑие ÑÑанзакÑии
ÐÑли Ð²Ñ Ð¿ÑименÑеÑе ÑайловÑÑ ÑепликаÑÐ¸Ñ Ð¶ÑÑналов («ÑÑплÑй ÑезеÑв»), возможно, пÑидÑÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð¿ÑибÑÑÐ¸Ñ ÑледÑÑÑего Ñайла WAL (макÑималÑное вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð°ÑамеÑÑом archive_timeout на ведÑÑем ÑеÑвеÑе).
ÐнаÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¿Ð°ÑамеÑÑов опÑеделÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð±Ñей памÑÑи Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов ÑÑанзакÑий, блокиÑовок и подгоÑовленнÑÑ ÑÑанзакÑий. ÐÑи ÑÑÑÑкÑÑÑÑ Ð¾Ð±Ñей памÑÑи на ÑезеÑвном ÑеÑвеÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð½Ðµ менÑÑе, Ñем аналогиÑнÑе ÑÑÑÑкÑÑÑÑ Ð½Ð° ведÑÑем, ÑÑÐ¾Ð±Ñ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ иÑÑеÑÐ¿Ð°ÐµÑ Ð¾Ð±ÑÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ. ÐапÑимеÑ, еÑли на ведÑÑем ÑеÑвеÑе вÑполнÑлаÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑÐ¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑанзакÑиÑ, но ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ вÑделил никакой обÑей памÑÑи Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑÑ ÑÑанзакÑий, Ñо воÑÑÑановление не ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿ÑодолжаÑÑÑÑ Ð¿Ð¾ÐºÐ° не бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð° конÑигÑÑаÑÐ¸Ñ ÑезеÑвного ÑеÑвеÑа. ÐÑо каÑаеÑÑÑ ÑледÑÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов:
max_connectionsmax_prepared_transactionsmax_locks_per_transactionmax_wal_sendersmax_worker_processes
СамÑй пÑоÑÑой ÑпоÑоб избежаÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ â ÑÑÑановиÑÑ Ð½Ð° ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ Ñакие знаÑÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов, коÑоÑÑе бÑдÑÑ Ð±Ð¾Ð»ÑÑе знаÑений на оÑновном или ÑÐ°Ð²Ð½Ñ Ð¸Ð¼. ÐоÑÑомÑ, еÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑвелиÑиÑÑ ÑÑи знаÑениÑ, ÑнаÑала Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑделаÑÑ ÑÑо на вÑÐµÑ ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ , а заÑем внеÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° ведÑÑем ÑеÑвеÑе. РнаобоÑоÑ, еÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑменÑÑиÑÑ ÑÑи знаÑениÑ, ÑнаÑала ÑледÑÐµÑ ÑделаÑÑ ÑÑо на ведÑÑем ÑеÑвеÑе, а заÑем вноÑиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° вÑÐµÑ ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ . ÐмейÑе в видÑ, ÑÑо когда ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¿Ð¾Ð²ÑÑаеÑÑÑ Ð´Ð¾ ведÑÑего, он ÑÑановиÑÑÑ Ð½Ð¾Ð²Ñм иÑÑоÑником Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð·Ð½Ð°Ñений паÑамеÑÑов Ð´Ð»Ñ ÑледÑÑÑÐ¸Ñ Ð·Ð° ним ÑезеÑвнÑÑ ÑеÑвеÑов. ЧÑÐ¾Ð±Ñ ÑÑо не ÑÑало пÑоблемой во вÑÐµÐ¼Ñ Ð¿ÐµÑеклÑÑÐµÐ½Ð¸Ñ Ñзлов или оÑÑабоÑки оÑказа, ÑекомендÑеÑÑÑ ÑÑÑанавливаÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе знаÑÐµÐ½Ð¸Ñ Ð½Ð° вÑÐµÑ ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ .
ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов на ведÑÑем ÑеÑвеÑе оÑÑлеживаÑÑÑÑ Ð² WAL. ÐÑли в пÑоÑеÑÑе ÑÑÐµÐ½Ð¸Ñ WAL ÑеÑÐ²ÐµÑ Ð³Ð¾ÑÑÑего ÑезеÑва обнаÑÑживаеÑ, ÑÑо на ведÑÑем ÑеÑвеÑе ÑекÑÑее знаÑение оказалоÑÑ Ð±Ð¾Ð»ÑÑе, Ñем знаÑение в его ÑобÑÑвенной конÑигÑÑаÑии, он вÑдаÑÑ Ð¿ÑедÑпÑеждение и пÑиоÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²Ð¾ÑÑÑановление, напÑимеÑ:
WARNING: hot standby is not possible because of insufficient parameter settings DETAIL: max_connections = 80 is a lower setting than on the primary server, where its value was 100. LOG: recovery has paused DETAIL: If recovery is unpaused, the server will shut down. HINT: You can then restart the server after making the necessary configuration changes.
ÐÑежде Ñем пÑодолжиÑÑ Ð²Ð¾ÑÑÑановление, на ÑÑом ÑÑапе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ измениÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½Ð° ÑезеÑвном ÑеÑвеÑе и пеÑезапÑÑÑиÑÑ ÑкземплÑÑ Ð¡Ð£ÐÐ. ÐÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ ÑвлÑеÑÑÑ ÑеÑвеÑом гоÑÑÑего ÑезеÑва, Ñо пÑи обнаÑÑжении неÑовмеÑÑимого Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа он немедленно оÑклÑÑиÑÑÑ Ð±ÐµÐ· пÑиоÑÑановки, поÑколÑÐºÑ Ð² ÑÑом ÑлÑÑае Ð½ÐµÑ ÑмÑÑла поддеÑживаÑÑ ÐµÐ³Ð¾ в ÑабоÑем ÑоÑÑоÑнии.
ÐÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ Ð´Ð»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑа вÑбÑаÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ 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_backup_start, 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 на ведÑÑем ÑеÑвеÑе, полÑзоваÑÐµÐ»Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¾ÑклÑÑÑн Ð¾Ñ ÑезеÑвного.
СиÑÑема накопиÑелÑной ÑÑаÑиÑÑики ÑабоÑÐ°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ. ÐÑе опеÑаÑии ÑканиÑованиÑ, ÑÑениÑ, иÑполÑзование блоков, индекÑов и Ñ. п. бÑдÑÑ Ð¾ÑÑÐ°Ð¶ÐµÐ½Ñ Ð² ÑÑаÑиÑÑике на ÑезеÑвном ÑеÑвеÑе обÑÑнÑм обÑазом. Ðднако пÑи воÑпÑоизведении WAL не бÑдÑÑ ÑвелиÑиваÑÑÑÑ ÑÑÑÑÑики ÑÑÐ¾Ð²Ð½Ñ Ð¾ÑноÑений и баз даннÑÑ
, Ñо еÑÑÑ Ð¿Ñи воÑпÑоизведении не бÑдÑÑ ÑвелиÑиваÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑолбÑов в pg_stat_all_tables (напÑимеÑ, n_tup_ins), опеÑаÑии ÑÑÐµÐ½Ð¸Ñ Ð¸ запиÑи, вÑполнÑемÑе пÑоÑеÑÑом запÑÑка, не бÑдÑÑ Ð¾ÑÑажаÑÑÑÑ Ð² пÑедÑÑавлениÑÑ
pg_statio_, а Ñакже не бÑдÑÑ ÑвелиÑиваÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑвÑзаннÑÑ
ÑÑолбÑов pg_stat_database.
ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð¾ÑиÑÑка не ÑабоÑÐ°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑановлениÑ. Ðна запÑÑÑиÑÑÑ Ð² обÑÑном Ñежиме поÑле завеÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑановлениÑ.
Ðо вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑабоÑÐ°ÐµÑ Ð¿ÑоÑеÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ
ÑоÑек и пÑоÑеÑÑ Ñоновой запиÑи. ÐÑоÑеÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ
ÑоÑек обÑабаÑÑÐ²Ð°ÐµÑ ÑоÑки пеÑезапÑÑка (подобнÑе конÑÑолÑнÑм ÑоÑкам на ведÑÑем ÑеÑвеÑе), а пÑоÑеÑÑ Ñоновой запиÑи вÑполнÑÐµÑ Ð¾Ð±ÑÑнÑе опеÑаÑии по оÑиÑÑке блоков. Ð Ñом ÑиÑле он Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ Ð²ÑпомогаÑелÑнÑе биÑÑ, ÑоÑ
ÑанÑннÑе на ÑезеÑвном ÑеÑвеÑе. Ðо вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑинимаеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CHECKPOINT, но она пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑоÑÐºÑ Ð¿ÐµÑезапÑÑка, а не ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑоÑÐºÑ Ð²Ð¾ÑÑÑановлениÑ.
25.4.4. СÑÑлки на паÑамеÑÑÑ Ð³Ð¾ÑÑÑего ÑезеÑва #
РазлиÑнÑе паÑамеÑÑÑ Ð±Ñли ÑпомÑнÑÑÑ Ð²ÑÑе в ÐодÑазделе 25.4.2 и ÐодÑазделе 25.4.3.
Ðа ведÑÑем ÑеÑвеÑе Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ð°ÑамеÑÑ wal_level. ÐаÑамеÑÑÑ max_standby_archive_delay и max_standby_streaming_delay на ведÑÑем ÑеÑвеÑе не дейÑÑвÑÑÑ.
Ðа ÑезеÑвном ÑеÑвеÑе могÑÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ hot_standby, max_standby_archive_delay и max_standby_streaming_delay.
25.4.5. ÐгÑаниÑÐµÐ½Ð¸Ñ #
ÐмеÑÑÑÑ ÑледÑÑÑие огÑаниÑÐµÐ½Ð¸Ñ Ð³Ð¾ÑÑÑего ÑезеÑва. Ðни могÑÑ Ð¸ ÑкоÑее вÑего бÑдÑÑ Ð¸ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² ÑледÑÑÑÐ¸Ñ Ð²ÑпÑÑÐºÐ°Ñ :
ТÑебÑеÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вÑÐµÑ Ð·Ð°Ð¿ÑÑеннÑÑ ÑÑанзакÑиÑÑ Ð¿ÐµÑед Ñем как бÑÐ´ÐµÑ Ñоздан Ñнимок даннÑÑ . ТÑанзакÑии, иÑполÑзÑÑÑие болÑÑое колиÑеÑÑво подÑÑанзакÑий (в наÑÑоÑÑий Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð±Ð¾Ð»ÑÑе 64), бÑдÑÑ Ð·Ð°Ð´ÐµÑживаÑÑ Ð½Ð°Ñало ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ Ñамой длинной пиÑÑÑей ÑÑанзакÑии. ÐÑи возникновении ÑÑой ÑиÑÑаÑии поÑÑнÑÑÑее ÑообÑение бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñано в жÑÑнал ÑеÑвеÑа.
ÐÐ¾Ð´Ñ Ð¾Ð´ÑÑие ÑÑаÑÑовÑе ÑоÑки Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов на ÑезеÑвном ÑеÑвеÑе ÑоздаÑÑÑÑ Ð¿Ñи каждой конÑÑолÑной ÑоÑке на главном. ÐÑли ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¾ÑклÑÑаеÑÑÑ, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº главнÑй бÑл в оÑклÑÑÑнном ÑоÑÑоÑнии, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм возобновиÑÑ ÐµÐ³Ð¾ ÑабоÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва, до Ñого, как запÑÑÑиÑÑÑ Ð²ÐµÐ´ÑÑий и Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ ÑледÑÑÑие ÑÑаÑÑовÑе ÑоÑки в жÑÑÐ½Ð°Ð»Ñ WAL. ÐÐ¾Ð´Ð¾Ð±Ð½Ð°Ñ ÑиÑÑаÑÐ¸Ñ Ð½Ðµ ÑвлÑеÑÑÑ Ð¿Ñоблемой Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва ÑлÑÑаев, в коÑоÑÑÑ Ð¾Ð½Ð° Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи. ÐбÑÑно, еÑли ведÑÑий ÑеÑÐ²ÐµÑ Ð²ÑклÑÑен и болÑÑе не доÑÑÑпен, ÑÑо ÑвлÑеÑÑÑ ÑледÑÑвием ÑеÑÑÑзного ÑÐ±Ð¾Ñ Ð¸ в лÑбом ÑлÑÑае ÑÑебÑÐµÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑезеÑвного в новÑй ведÑÑий. Так же в ÑиÑÑаÑии, когда ведÑÑий оÑклÑÑÑн намеÑенно, пÑовеÑка гоÑовноÑÑи ÑезеÑвного к пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ведÑÑий Ñоже ÑвлÑеÑÑÑ Ð¾Ð±ÑÑной пÑоÑедÑÑой.
РконÑе воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовки
AccessExclusiveLocks, вÑзваннÑе подгоÑовленнÑми ÑÑанзакÑиÑми, ÑÑебÑÑÑ Ñдвоенное, в ÑÑавнении Ñ Ð½Ð¾ÑмалÑнÑм, колиÑеÑÑво блокиÑовок запиÑей ÑаблиÑÑ. ÐÑли планиÑÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð»Ð¸Ð±Ð¾ болÑÑое колиÑеÑÑво конкÑÑиÑÑÑÑÐ¸Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑÑ ÑÑанзакÑий, обÑÑно вÑзÑваÑÑиеAccessExclusiveLocks, либо болÑÑие ÑÑанзакÑии Ñ Ð¿Ñименением болÑÑого колиÑеÑÑваAccessExclusiveLocks, Ñо ÑекомендÑеÑÑÑ Ð²ÑбÑаÑÑ Ð±Ð¾Ð»ÑÑое знаÑение паÑамеÑÑаmax_locks_per_transaction, возможно в два Ñаза болÑÑее, Ñем знаÑение паÑамеÑÑа на ведÑÑем ÑеÑвеÑе. ÐÑÑ ÑÑо не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ, когдаmax_prepared_transactionsÑавно 0.УÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑии Serializable в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½ÐµÐ´Ð¾ÑÑÑпен в гоÑÑÑем ÑезеÑве. (Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 13.2.3 и ÐодÑазделÑ 13.4.1) ÐопÑÑка вÑÑÑавиÑÑ Ð´Ð»Ñ ÑÑанзакÑии Ñакой ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии в Ñежиме гоÑÑÑего ÑезеÑва вÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑибкÑ.