29.5. ÐнÑÑÑеннее ÑÑÑÑойÑÑво WAL
WAL вклÑÑаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки; Ð¾Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑа не ÑÑебÑеÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð´ÐµÐ¹ÑÑвий за иÑклÑÑением Ñого, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ WAL к меÑÑÑ Ð½Ð° диÑке, и ÑÑо вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð²Ñе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе дейÑÑÐ²Ð¸Ñ Ð¿Ð¾ Ñонкой наÑÑÑойке (Ñм. Раздел 29.4).
ÐапиÑи WAL добавлÑÑÑÑÑ Ð² жÑÑÐ½Ð°Ð»Ñ WAL по меÑе поÑÑÑплениÑ. ÐозиÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² жÑÑнал опÑеделÑÐµÑ Ð·Ð½Ð°Ñение LSN (Log Sequence Number, ÐоÑледоваÑелÑнÑй Ð½Ð¾Ð¼ÐµÑ Ð² жÑÑнале), пÑедÑÑавлÑÑÑее Ñобой ÑмеÑение в байÑаÑ
внÑÑÑи жÑÑнала, моноÑонно ÑвелиÑиваÑÑееÑÑ Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ новой запиÑÑÑ. ÐнаÑÐµÐ½Ð¸Ñ LSN возвÑаÑаÑÑÑÑ Ñ Ñипом даннÑÑ
pg_lsn. СÑÐ°Ð²Ð½Ð¸Ð²Ð°Ñ ÑÑи знаÑениÑ, можно вÑÑиÑлиÑÑ Ð¾Ð±ÑÑм даннÑÑ
WAL Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸, Ñак ÑÑо они могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¿ÑогÑеÑÑа пÑи ÑепликаÑии и воÑÑÑановлении.
ÐÑÑÐ½Ð°Ð»Ñ WAL Ñ
ÑанÑÑÑÑ Ð² виде набоÑа Ñайлов ÑегменÑов в каÑалоге pg_wal, наÑ
одÑÑемÑÑ Ð² каÑалоге даннÑÑ
. ÐÑи ÑÐ°Ð¹Ð»Ñ Ð¾Ð±ÑÑно имеÑÑ ÑÐ°Ð·Ð¼ÐµÑ 16 ÐÐ±Ð°Ð¹Ñ ÐºÐ°Ð¶Ð´Ñй. ÐаждÑй Ñайл ÑегменÑа ÑазделÑеÑÑÑ Ð½Ð° ÑÑÑаниÑÑ, обÑÑно по 8 ÐбайÑ. СодеÑжимое запиÑи жÑÑнала завиÑÐ¸Ñ Ð¾Ñ Ñипа ÑобÑÑиÑ, коÑоÑое ÑоÑ
ÑанÑеÑÑÑ Ð² жÑÑнале. Ð¤Ð°Ð¹Ð»Ñ ÑегменÑов имеÑÑ Ð¸Ð¼ÐµÐ½Ð°-номеÑа, коÑоÑÑе наÑинаÑÑÑÑ Ñ 000000010000000000000001 и поÑледоваÑелÑно ÑвелиÑиваÑÑÑÑ. ÐаÑикливание ÑÑиÑ
номеÑов не пÑедÑÑмоÑÑено, но Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑеÑ
доÑÑÑпнÑÑ
номеÑов поÑÑебÑеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени.
ÐÐ¼ÐµÐµÑ ÑмÑÑл ÑазмеÑаÑÑ Ð¶ÑÑÐ½Ð°Ð»Ñ WAL на дÑÑгом диÑке, оÑлиÑном Ð¾Ñ Ñого, где наÑ
одÑÑÑÑ Ð¾ÑновнÑе ÑÐ°Ð¹Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÐ»Ñ ÑÑого можно пеÑемеÑÑиÑÑ ÐºÐ°Ñалог pg_wal в дÑÑгое меÑÑо (ÑазÑмееÑÑÑ, когда ÑеÑÐ²ÐµÑ Ð¾ÑÑановлен) и ÑоздаÑÑ ÑимволиÑеÑкÑÑ ÑÑÑÐ»ÐºÑ Ð¸Ð· иÑÑ
одного меÑÑа на пеÑемеÑÑннÑй каÑалог.
ÐÐ»Ñ WAL важно, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð² жÑÑнал вÑполнÑлаÑÑ Ð´Ð¾ изменений даннÑÑ Ð² базе. Ðо ÑÑÐ¾Ñ Ð¿Ð¾ÑÑдок могÑÑ Ð½Ð°ÑÑÑиÑÑ Ð´Ð¸ÑковÑе ÑÑÑÑойÑÑва, коÑоÑÑе ложно ÑообÑаÑÑ ÑдÑÑ Ð¾Ð± ÑÑпеÑном завеÑÑении запиÑи, Ñ Ð¾ÑÑ ÑакÑиÑеÑки они ÑолÑко вÑполнили кеÑиÑование даннÑÑ Ð¸ пока не ÑÐ¾Ñ Ñанили Ð¸Ñ Ð½Ð° диÑк. Сбой пиÑÐ°Ð½Ð¸Ñ Ð² Ñакой ÑиÑÑаÑии Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к неиÑпÑÐ°Ð²Ð¸Ð¼Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐдминиÑÑÑаÑоÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑбедиÑÑÑÑ, ÑÑо диÑки, где Ñ ÑанÑÑÑÑ ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов WAL Postgres Pro, не вÑдаÑÑ ÑÐ°ÐºÐ¸Ñ Ð»Ð¾Ð¶Ð½ÑÑ ÑообÑений ÑдÑÑ. (См. Раздел 29.1.)
ÐоÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑолÑной ÑоÑки и ÑбÑоÑа жÑÑнала позиÑÐ¸Ñ ÐºÐ¾Ð½ÑÑолÑной ÑоÑки ÑоÑ
ÑанÑеÑÑÑ Ð² Ñайл pg_control. Таким обÑазом, пÑи ÑÑаÑÑе воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÐ²ÐµÑ ÑпеÑва ÑиÑÐ°ÐµÑ Ñайл pg_control и заÑем запиÑÑ ÐºÐ¾Ð½ÑÑолÑной ÑоÑки; заÑем он вÑполнÑÐµÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ REDO, ÑканиÑÑÑ Ð²Ð¿ÐµÑÑд Ð¾Ñ Ð¿Ð¾Ð·Ð¸Ñии в жÑÑнале, обознаÑенной в запиÑи конÑÑолÑной ÑоÑки. ÐоÑколÑÐºÑ Ð¿Ð¾Ð»Ð½Ð¾Ðµ ÑодеÑжимое ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑоÑ
ÑанÑеÑÑÑ Ð² жÑÑнале в пеÑвой ÑÑÑаниÑе поÑле конÑÑолÑной ÑоÑки (пÑедполагаеÑÑÑ, ÑÑо вклÑÑÑн Ñежим full_page_writes), вÑе ÑÑÑаниÑÑ, изменÑннÑе Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа конÑÑолÑной ÑоÑки, бÑдÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² ÑелоÑÑном ÑоÑÑоÑнии.
Ð ÑлÑÑае, еÑли Ñайл pg_control повÑеждÑн, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑеÑÑвÑÑÑиÑ
ÑегменÑов жÑÑнала в обÑаÑном поÑÑдке â Ð¾Ñ Ð½Ð¾Ð²ÑÑ
к ÑÑаÑÑм â ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи поÑледнÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑоÑкÑ. ÐÑо пока не Ñеализовано. pg_control ÑвлÑеÑÑÑ Ð´Ð¾ÑÑаÑоÑно маленÑким Ñайлом (менÑÑе, Ñем одна диÑÐºÐ¾Ð²Ð°Ñ ÑÑÑаниÑа), коÑоÑÑй не должен попадаÑÑ Ð¿Ð¾Ð´ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑаÑÑиÑной запиÑи и на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ докÑменÑаÑии, не бÑло ни одного ÑообÑÐµÐ½Ð¸Ñ Ð¾ ÑбоÑÑ
СУÐРиÑклÑÑиÑелÑно из-за невозможноÑÑи ÑÑÐµÐ½Ð¸Ñ Ñамого Ñайла pg_control. Таким обÑазом, Ñ
оÑÑ ÑеоÑеÑиÑеÑки ÑÑо ÑвлÑеÑÑÑ ÑлабÑм меÑÑом, на пÑакÑике пÑоблем Ñ pg_control не обнаÑÑжено.