18.5. ÐÑÑнал пÑедзапиÑи
Ðа дополниÑелÑной инÑоÑмаÑией о наÑÑÑойке ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов обÑаÑиÑеÑÑ Ðº РазделÑ 29.4.
18.5.1. ÐаÑамеÑÑÑ
wal_level(enum)ÐаÑамеÑÑ
wal_levelопÑеделÑеÑ, как много инÑоÑмаÑии запиÑÑваеÑÑÑ Ð² WAL. Со знаÑениемminimal(по ÑмолÑаниÑ) в жÑÑнал запиÑÑваеÑÑÑ ÑолÑко инÑоÑмаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑÐ±Ð¾Ñ Ð¸Ð»Ð¸ аваÑийного оÑклÑÑениÑ. ÐаÑианÑarchiveдобавлÑÐµÑ Ð¸Ð½ÑоÑмаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð´Ð»Ñ Ð°ÑÑ Ð¸Ð²Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ WAL;hot_standbyвклÑÑÐ°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов на ÑезеÑвном ÑеÑвеÑе в Ñежиме «ÑолÑко ÑÑение»; и наконеÑ,logicalдобавлÑÐµÑ Ð¸Ð½ÑоÑмаÑиÑ, ÑÑебÑемÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки логиÑеÑкого декодиÑованиÑ. ÐаждÑй поÑледÑÑÑий ÑÑÐ¾Ð²ÐµÐ½Ñ Ð²ÐºÐ»ÑÑаÑÑ Ð²ÑÑ Ð¸Ð½ÑоÑмаÑиÑ, запиÑÑваемÑÑ Ð½Ð° вÑÐµÑ Ð¿ÑедÑдÑÑÐ¸Ñ . ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.Ðа ÑÑовне
minimalнекоÑоÑÑе маÑÑовÑе опеÑаÑии могÑÑ Ð²ÑполнÑÑÑÑÑ Ð² Ð¾Ð±Ñ Ð¾Ð´ жÑÑнала без ÑиÑка поÑеÑи даннÑÑ , и пÑи ÑÑом они вÑполнÑÑÑÑ Ð³Ð¾Ñаздо бÑÑÑÑее (Ñм. ÐодÑаздел 14.4.7). Ð ÑаÑÑноÑÑи, ÑÐ°ÐºÐ°Ñ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° Ñ Ð¾Ð¿ÐµÑаÑиÑми:CREATE TABLE ASCREATE INDEXCLUSTERCOPYÑ ÑаблиÑами, коÑоÑÑе бÑли ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¸Ð»Ð¸ опÑÑÑоÑÐµÐ½Ñ Ð² Ñой же ÑÑанзакÑииÐднако Ñакой минималÑнÑй жÑÑнал не бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð´Ð¾ÑÑаÑоÑно инÑоÑмаÑии Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· базовой копии и жÑÑналов, поÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ ÑеализаÑии ÑÑÑаÑегии аÑÑ Ð¸Ð²Ð°Ñии WAL (Ñм. archive_mode) и поÑоковой ÑепликаÑии Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ ÑÑовенÑ
archiveили более вÑÑокий.Ðа ÑÑовне
hot_standbyв жÑÑнал запиÑÑваеÑÑÑ Ñа же инÑоÑмаÑиÑ, ÑÑо и на ÑÑовнеarchive, плÑÑ Ð¸Ð½ÑоÑмаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ ÑабоÑаÑÑÐ¸Ñ ÑÑанзакÑий из WAL. ЧÑÐ¾Ð±Ñ Ð½Ð° ÑезеÑвном ÑеÑвеÑе можно бÑло вÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Â«ÑолÑко на ÑÑение», на ведÑÑемwal_levelдолжен бÑÑÑ Ð½Ðµ нижеhot_standby, а на ÑезеÑвном Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ hot_standby. Ðо наÑÐµÐ¼Ñ ÑбеждениÑ, ÑÑовниhot_standbyиarchiveне Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð½Ð°ÑиÑелÑно оÑлиÑаÑÑÑÑ Ð¿Ð¾ бÑÑÑÑодейÑÑвиÑ, поÑÑÐ¾Ð¼Ñ ÐµÑли в ваÑей ÑÑеде пÑоÑвÑÑÑÑ ÑеÑÑÑзнÑе ÑазлиÑиÑ, Ð¼Ñ Ñ Ð¾Ñели Ð±Ñ ÑзнаÑÑ Ð¾Ð± ÑÑом.Ðа ÑÑовне
logicalв жÑÑнал запиÑÑваеÑÑÑ Ñа же инÑоÑмаÑиÑ, ÑÑо и на ÑÑовнеhot_standby, плÑÑ Ð¸Ð½ÑоÑмаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð¸Ð· жÑÑнала набоÑов логиÑеÑÐºÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. ÐовÑÑение ÑÑÐ¾Ð²Ð½Ñ Ð´Ð¾logicalпÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº знаÑиÑелÑÐ½Ð¾Ð¼Ñ ÑвелиÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑма WAL, оÑобенно еÑли многие ÑаблиÑÑ Ð¸Ð¼ÐµÑÑ Ñ Ð°ÑакÑеÑиÑÑикÑREPLICA IDENTITY FULLи вÑполнÑеÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво командUPDATEиDELETE.fsync(boolean)ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑановлен, ÑеÑÐ²ÐµÑ Postgres Pro ÑÑаÑаеÑÑÑ Ð´Ð¾Ð±Ð¸ÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñли запиÑÐ°Ð½Ñ Ð½Ð° диÑк ÑизиÑеÑки, вÑполнÑÑ ÑиÑÑемнÑе вÑзовÑ
fsync()или дÑÑгими подобнÑми меÑодами (Ñм. wal_sync_method). ÐÑо даÑÑ Ð³Ð°ÑанÑиÑ, ÑÑо клаÑÑÐµÑ Ð±Ð°Ð· даннÑÑ ÑÐ¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑÑÑ Ð² ÑоглаÑованное ÑоÑÑоÑние поÑле ÑÐ±Ð¾Ñ Ð¾Ð±Ð¾ÑÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ опеÑаÑионной ÑиÑÑемÑ.ХоÑÑ Ð¾ÑклÑÑение
fsyncÑаÑÑо даÑÑ Ð²ÑигÑÑÑ Ð² ÑкоÑоÑÑи, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к неиÑпÑавимой поÑÑе даннÑÑ Ð² ÑлÑÑае оÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑÐ±Ð¾Ñ ÑиÑÑемÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¾ÑклÑÑаÑÑfsyncÑекомендÑеÑÑÑ, ÑолÑко еÑли Ð²Ñ Ð»ÐµÐ³ÐºÐ¾ ÑможеÑе воÑÑÑановиÑÑ Ð²ÑÑ Ð±Ð°Ð·Ñ Ð¸Ð· внеÑнего иÑÑоÑника.РкаÑеÑÑве пÑимеÑов, когда оÑклÑÑение
fsyncнеопаÑно, можно пÑивеÑÑи наÑалÑное наполнение нового клаÑÑеÑа даннÑми из копии, обÑабоÑÐºÑ Ð¼Ð°ÑÑива даннÑÑ , поÑле коÑоÑой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑдалиÑÑ Ð¸ ÑоздаÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾, либо ÑкÑплÑаÑаÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸Ð¸ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ ÑолÑко Ð´Ð»Ñ ÑÑениÑ, коÑоÑÐ°Ñ ÑегÑлÑÑно пеÑеÑоздаÑÑÑÑ Ð¸ не иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾ÑÑабоÑки оÑказа. ÐаÑеÑÑвенное обоÑÑдование Ñамо по Ñебе не ÑвлÑеÑÑÑ Ð´Ð¾ÑÑаÑоÑной пÑиÑиной Ð´Ð»Ñ Ð¾ÑклÑÑениÑfsync.ÐÑи Ñмене знаÑениÑ
fsyncÑ off на on Ð´Ð»Ñ Ð½Ð°Ð´Ñжного воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñакже Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑбÑоÑиÑÑ Ð²Ñе изменÑннÑе бÑÑеÑÑ Ð¸Ð· ÑдÑа в надÑжное Ñ ÑанилиÑе. ÐÑо можно ÑделаÑÑ, когда ÑеÑÐ²ÐµÑ Ð¾ÑÑановлен или когда Ñежим fsync вклÑÑÑн, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñinitdb --sync-only, либо вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñsync, ÑазмонÑиÑоваÑÑ ÑайловÑÑ ÑиÑÑÐµÐ¼Ñ Ð¸Ð»Ð¸ пеÑезагÑÑзиÑÑ ÑеÑвеÑ.Ðо Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ Ð¾ÑклÑÑение synchronous_commit Ð´Ð»Ñ Ð½ÐµÐºÑиÑиÑнÑÑ ÑÑанзакÑий Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ Ð±Ð¾Ð»ÑÑий вÑигÑÑÑ Ð² ÑкоÑоÑÑи, Ñем оÑклÑÑение
fsync, пÑи ÑÑом не добавлÑÑ ÑиÑки повÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ .ÐаÑамеÑÑ
fsyncможно задаÑÑ ÑолÑко в Ñайлеpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа. ÐÑли Ð²Ñ Ð¾ÑклÑÑаеÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, возможно, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл оÑклÑÑиÑÑ Ñакже и full_page_writes.synchronous_commit(enum)ÐпÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑеÑÐ²ÐµÑ Ð¿Ñи ÑикÑиÑовании ÑÑанзакÑии ждаÑÑ, пока запиÑи из WAL ÑÐ¾Ñ ÑанÑÑÑÑ Ð½Ð° диÑке, пÑежде Ñем ÑообÑиÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð¾Ð± ÑÑпеÑном завеÑÑении опеÑаÑии. ÐопÑÑÑимÑе знаÑениÑ:
on,remote_write,localиoff. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ (оно же Ñамое безопаÑное) âon. Со знаÑениемoffÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑазоваÑÑÑÑ Ð¾ÐºÐ½Ð¾ Ð¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, когда ÐºÐ»Ð¸ÐµÐ½Ñ ÑзнаÑÑ Ð¾Ð± ÑÑпеÑном завеÑÑении, до моменÑа, когда ÑÑанзакÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно гаÑанÑиÑованно заÑиÑена Ð¾Ñ ÑбоÑ. (ÐакÑималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ Ð¾ÐºÐ½Ð° Ñавен ÑÑÐ¾Ð¹Ð½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ wal_writer_delay.) РоÑлиÑие Ð¾Ñ fsync, знаÑениеoffÐ´Ð»Ñ ÑÑого паÑамеÑÑа не ÑгÑÐ¾Ð¶Ð°ÐµÑ ÑелоÑÑноÑÑи даннÑÑ : Ñбой опеÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð¸Ð»Ð¸ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к поÑеÑе поÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑÑанзакÑий, ÑÑиÑавÑÐ¸Ñ ÑÑ Ð·Ð°ÑикÑиÑованнÑми, но ÑоÑÑоÑние Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð±ÑÐ´ÐµÑ ÑоÑно Ñаким же, как и в ÑлÑÑае ÑÑаÑного пÑеÑÑÐ²Ð°Ð½Ð¸Ñ ÑÑÐ¸Ñ ÑÑанзакÑий. ÐоÑÑÐ¾Ð¼Ñ Ð²ÑклÑÑение Ñежимаsynchronous_commitÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾Ð¹ алÑÑеÑнаÑивой оÑклÑÑÐµÐ½Ð¸Ñ fsync, когда пÑоизводиÑелÑноÑÑÑ Ð²Ð°Ð¶Ð½ÐµÐµ, Ñем надÑÐ¶Ð½Ð°Ñ Ð³Ð°ÑанÑÐ¸Ñ ÑÐ¾Ñ ÑанноÑÑи каждой ÑÑанзакÑии. ÐодÑобнее ÑÑо обÑÑждаеÑÑÑ Ð² Разделе 29.3.ÐÑли задано знаÑение synchronous_standby_names, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ñакже опÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑеÑÐ²ÐµÑ Ð¿Ñи ÑикÑиÑовании ÑÑанзакÑии ждаÑÑ, пока вÑполниÑÑÑ ÑепликаÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñей WAL Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑанзакÑии на ÑезеÑвнÑй ÑеÑвеÑ. Со знаÑением
onÑикÑиÑование завеÑÑаеÑÑÑ ÑолÑко поÑле полÑÑÐµÐ½Ð¸Ñ Ð¾ÑвеÑа Ð¾Ñ ÑекÑÑего ÑÐ¸Ð½Ñ Ñонного ÑезеÑвного ÑеÑвеÑа, подÑвеÑждаÑÑего, ÑÑо он полÑÑил запиÑÑ Ð¾ ÑикÑиÑовании ÑÑанзакÑии и ÑÐ¾Ñ Ñанил ÐµÑ Ð½Ð° диÑке. ÐÑо гаÑанÑиÑÑеÑ, ÑÑо ÑÑанзакÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑна, еÑли ÑолÑко база даннÑÑ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾Ð²Ñеждена и на главном, и на ÑезеÑвном ÑеÑвеÑе. Со знаÑениемremote_writeÑикÑиÑование завеÑÑаеÑÑÑ Ð¿Ð¾Ñле полÑÑÐµÐ½Ð¸Ñ Ð¾ÑвеÑа Ð¾Ñ ÑекÑÑего ÑÐ¸Ð½Ñ Ñонного ÑезеÑвного ÑеÑвеÑа, подÑвеÑждаÑÑего, ÑÑо он полÑÑил запиÑÑ Ð¾ ÑикÑиÑовании ÑÑанзакÑии и пеÑедал ÐµÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑеме (Ñ Ð¾ÑÑ ÑÑи даннÑе могÑÑ ÐµÑÑ Ð½Ðµ доÑÑиÑÑ Ð½Ð°Ð´Ñжного Ñ ÑанилиÑа на нÑм). ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð³Ð°ÑанÑиÑоваÑÑ ÑÐ¾Ñ ÑанноÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑлÑÑае оÑказа ÑезеÑвного ÑеÑвеÑа Postgres Pro, но не в ÑлÑÑае ÑÐ±Ð¾Ñ Ð½Ð° ÑÑовне опеÑаÑионной ÑиÑÑемÑ.Ðогда пÑименÑеÑÑÑ ÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ð°Ñ ÑепликаÑиÑ, обÑÑно Ð¸Ð¼ÐµÐµÑ ÑмÑÑл либо ждаÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð½Ð° локалÑнÑй диÑк и ÑепликаÑии запиÑей WAL, либо ÑазÑеÑиÑÑ Ð°ÑÐ¸Ð½Ñ Ñонное ÑикÑиÑование ÑÑанзакÑий. ÐÑли же ÑÑебÑеÑÑÑ Ð¶Ð´Ð°ÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð½Ð° локалÑнÑй диÑк, но не ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии, Ñакое поведение обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²Ð°ÑианÑ
local. ÐÑли паÑамеÑÑsynchronous_standby_namesне задан, ваÑианÑÑon,remote_writeиlocalÑеализÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй ÑÑÐ¾Ð²ÐµÐ½Ñ ÑÐ¸Ð½Ñ ÑонизаÑии: пÑи ÑикÑиÑовании ÑÑанзакÑии ÑеÑÐ²ÐµÑ Ð¶Ð´ÑÑ ÑолÑко ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° локалÑнÑй диÑк.ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ измениÑÑ Ð² лÑбое вÑемÑ; поведение каждой конкÑеÑной ÑÑанзакÑии опÑеделÑеÑÑÑ Ð·Ð½Ð°Ñением, дейÑÑвÑÑÑим в Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐµÑ ÑикÑиÑованиÑ. Таким обÑазом, еÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ ÑмÑÑл ÑикÑиÑоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑанзакÑии ÑÐ¸Ð½Ñ Ñонно, а дÑÑгие â аÑÐ¸Ð½Ñ Ñонно. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°ÑикÑиÑоваÑÑ Ð¾Ð´Ð½Ñ ÑÑанзакÑÐ¸Ñ Ð¸Ð· неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ аÑÐ¸Ð½Ñ Ñонно, когда по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбÑан пÑоÑивоположнÑй ваÑианÑ, вÑполниÑе в ÑÑой ÑÑанзакÑии
SET LOCAL synchronous_commit TO OFF.wal_sync_method(enum)ÐеÑод, пÑименÑемÑй Ð´Ð»Ñ Ð¿ÑинÑдиÑелÑного ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ WAL на диÑке. ÐÑли Ñежим
fsyncоÑклÑÑÑн, даннÑй паÑамеÑÑ Ð½Ðµ дейÑÑвÑеÑ, Ñак как пÑинÑдиÑелÑное ÑÐ¾Ñ Ñанение изменений WAL не пÑоизводиÑÑÑ Ð²Ð¾Ð²Ñе. ÐозможнÑе знаÑÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа:open_datasync(Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ñайлов WAL оÑкÑÑваÑÑ Ð¸Ñ ÑÑнкÑиейopen()Ñ Ð¿Ð°ÑамеÑÑомO_DSYNC)fdatasync(вÑзÑваÑÑfdatasync()пÑи каждом ÑикÑиÑовании)fsync(вÑзÑваÑÑfsync()пÑи каждом ÑикÑиÑовании)fsync_writethrough(вÑзÑваÑÑfsync()пÑи каждом ÑикÑиÑовании, ÑоÑÑиÑÑÑ ÑквознÑÑ Ð·Ð°Ð¿Ð¸ÑÑ ÐºÐµÑа)open_sync(Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ñайлов WAL оÑкÑÑваÑÑ Ð¸Ñ ÑÑнкÑиейopen()Ñ Ð¿Ð°ÑамеÑÑомO_SYNC)
ÐаÑианÑÑ
open_* Ñакже пÑименÑÑÑ ÑлагO_DIRECT, еÑли он доÑÑÑпен. Ðе вÑе ÑÑи меÑÐ¾Ð´Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð² ÑазнÑÑ ÑиÑÑÐµÐ¼Ð°Ñ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð¿ÐµÑвÑй из ÑÑÐ¸Ñ Ð¼ÐµÑодов, коÑоÑÑй поддеÑживаеÑÑÑ ÑекÑÑей ÑиÑÑемой, Ñ Ð¾Ð´Ð½Ð¸Ð¼ иÑклÑÑением â в Linux по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑfdatasync. ÐÑбиÑаемÑй по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð½Ðµ обÑзаÑелÑно бÑÐ´ÐµÑ Ð¸Ð´ÐµÐ°Ð»ÑнÑм; в завиÑимоÑÑи Ð¾Ñ ÑÑебований к оÑказоÑÑÑойÑивоÑÑи или пÑоизводиÑелÑноÑÑи Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ ÑкоÑÑекÑиÑоваÑÑ Ð²ÑбÑанное знаÑение или внеÑÑи дÑÑгие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² конÑигÑÑаÑÐ¸Ñ Ð²Ð°Ñей ÑиÑÑемÑ. СооÑвеÑÑÑвÑÑÑие аÑпекÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии ÑаÑÑмаÑÑиваÑÑÑÑ Ð² Разделе 29.1. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко в Ñайлеpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.full_page_writes(boolean)Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, ÑеÑÐ²ÐµÑ Postgres Pro запиÑÑÐ²Ð°ÐµÑ Ð² WAL вÑÑ ÑодеÑжимое каждой ÑÑÑаниÑÑ Ð¿Ñи пеÑвом изменении ÑÑой ÑÑÑаниÑÑ Ð¿Ð¾Ñле конÑÑолÑной ÑоÑки. ÐÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, поÑÐ¾Ð¼Ñ ÑÑо запиÑÑ ÑÑÑаниÑÑ, пÑеÑÐ²Ð°Ð½Ð½Ð°Ñ Ð¿Ñи Ñбое опеÑаÑионной ÑиÑÑемÑ, Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑÑÑ ÑаÑÑиÑно, и на диÑке окажеÑÑÑ ÑÑÑаниÑа, ÑодеÑжаÑÐ°Ñ ÑмеÑÑ ÑÑаÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð½Ð¾Ð²Ñми. ÐÑи ÑÑом инÑоÑмаÑии об изменениÑÑ Ð½Ð° ÑÑовне ÑÑÑок, коÑоÑÐ°Ñ Ð¾Ð±ÑÑно ÑÐ¾Ñ ÑанÑеÑÑÑ Ð² WAL, бÑÐ´ÐµÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑоглаÑованного ÑодеÑжимого Ñакой ÑÑÑаниÑÑ Ð¿Ñи воÑÑÑановлении поÑле ÑбоÑ. Ð¡Ð¾Ñ Ñанение обÑаза вÑей ÑÑÑаниÑÑ Ð³Ð°ÑанÑиÑÑеÑ, ÑÑо ÑÑÑаниÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ воÑÑÑановиÑÑ ÐºÐ¾ÑÑекÑно, Ñеной ÑвелиÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑма даннÑÑ , коÑоÑÑе бÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ Ð² WAL. (Так как воÑпÑоизведение WAL вÑегда наÑинаеÑÑÑ Ð¾Ñ ÐºÐ¾Ð½ÑÑолÑной ÑоÑки, доÑÑаÑоÑно ÑделаÑÑ ÑÑо пÑи пеÑвом изменении каждой ÑÑÑаниÑÑ Ð¿Ð¾Ñле конÑÑолÑной ÑоÑки. Таким обÑазом, ÑменÑÑиÑÑ Ð·Ð°ÑÑаÑÑ Ð½Ð° запиÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾, ÑвелиÑив инÑеÑÐ²Ð°Ð»Ñ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑоÑек.)
ÐÑклÑÑение ÑÑого паÑамеÑÑа ÑÑкоÑÑÐµÑ Ð¾Ð±ÑÑнÑе опеÑаÑии, но Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к неиÑпÑÐ°Ð²Ð¸Ð¼Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ незамеÑной поÑÑе даннÑÑ Ð¿Ð¾Ñле ÑÐ±Ð¾Ñ ÑиÑÑемÑ. Так как пÑи ÑÑом возникаÑÑ Ð¿ÑакÑиÑеÑки Ñе же ÑиÑки, ÑÑо и пÑи оÑклÑÑении
fsync, Ñ Ð¾ÑÑ Ð¸ в менÑÑей ÑÑепени, оÑклÑÑаÑÑ ÐµÐ³Ð¾ ÑледÑÐµÑ ÑолÑко пÑи ÑÐµÑ Ð¶Ðµ обÑÑоÑÑелÑÑÑÐ²Ð°Ñ , коÑоÑÑе пеÑеÑиÑлÑлиÑÑ Ð² ÑекомендаÑиÑÑ Ð´Ð»Ñ Ð²ÑÑеопиÑанного паÑамеÑÑа.ÐÑклÑÑение ÑÑого паÑамеÑÑа не влиÑÐµÑ Ð½Ð° возможноÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°ÑÑ Ð¸Ð²Ð¾Ð² WAL Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени (Ñм. Раздел 24.3).
ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко в
postgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñениеon.wal_log_hints(boolean)Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on, ÑеÑÐ²ÐµÑ Postgres Pro запиÑÑÐ²Ð°ÐµÑ Ð² WAL вÑÑ ÑодеÑжимое каждой ÑÑÑаниÑÑ Ð¿Ñи пеÑвом изменении ÑÑой ÑÑÑаниÑÑ Ð¿Ð¾Ñле конÑÑолÑной ÑоÑки, даже пÑи вÑоÑоÑÑепеннÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸ÑÑ Ñак назÑваемÑÑ Ð²ÑпомогаÑелÑнÑÑ Ð±Ð¸Ñов.ÐÑли вклÑÑÑн ÑаÑÑÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑÑмм даннÑÑ , Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑпомогаÑелÑнÑÑ Ð±Ð¸Ñов вÑегда пÑÐ¾Ñ Ð¾Ð´ÑÑ ÑеÑез WAL и ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ. С помоÑÑÑ ÑÑого паÑамеÑÑа можно пÑовеÑиÑÑ, наÑколÑко болÑÑе дополниÑелÑной инÑоÑмаÑии запиÑÑвалоÑÑ Ð±Ñ Ð² жÑÑнал, еÑли Ð±Ñ Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð±Ñл вклÑÑÑн подÑÑÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑÑмм.
ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
off.wal_compression(boolean)Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on, ÑеÑÐ²ÐµÑ Postgres Pro ÑÐ¶Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±Ñаз полной ÑÑÑаниÑÑ, запиÑÑваемÑй в WAL, когда вклÑÑÑн Ñежим full_page_writes или пÑи Ñоздании базовой копии. СжаÑÑй обÑаз ÑÑÑаниÑÑ Ð±ÑÐ´ÐµÑ ÑазвÑÑнÑÑ Ð¿Ñи воÑпÑоизведении WAL. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âoff. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð±ÐµÐ· дополниÑелÑнÑÑ ÑиÑков повÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ ÑменÑÑиÑÑ Ð¾Ð±ÑÑм WAL, Ñеной дополниÑелÑной нагÑÑзки на пÑоÑеÑÑоÑ, ÑвÑзанной Ñо ÑжаÑием даннÑÑ Ð¿Ñи запиÑи в WAL и ÑазвоÑаÑиванием Ð¸Ñ Ð¿Ñи воÑпÑоизведении WAL.
wal_buffers(integer)ÐбÑÑм ÑазделÑемой памÑÑи, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð±ÑÑеÑизаÑии даннÑÑ WAL, еÑÑ Ð½Ðµ запиÑаннÑÑ Ð½Ð° диÑк. ÐнаÑение по ÑмолÑаниÑ, Ñавное -1, задаÑÑ ÑазмеÑ, ÑавнÑй 1/32 (около 3%) Ð¾Ñ shared_buffers, но не менÑÑе Ñем
64 ÐÐи не болÑÑе Ñем ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑегменÑа WAL (обÑÑно16 ÐÐ). ÐÑо знаÑение можно задаÑÑ Ð²ÑÑÑнÑÑ, еÑли вÑбиÑаемое авÑомаÑиÑеÑки ÑлиÑком мало или велико, но пÑи ÑÑом лÑбое положиÑелÑное ÑиÑло менÑÑе32 ÐÐбÑÐ´ÐµÑ Ð²Ð¾ÑпÑинимаÑÑÑÑ ÐºÐ°Ðº32 ÐÐ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.СодеÑжимое бÑÑеÑов WAL запиÑÑваеÑÑÑ Ð½Ð° диÑк пÑи ÑикÑиÑовании каждой ÑÑанзакÑии, Ñак ÑÑо оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑие знаÑÐµÐ½Ð¸Ñ Ð²ÑÑд ли пÑинеÑÑÑ Ð·Ð½Ð°ÑиÑелÑнÑÑ Ð¿Ð¾Ð»ÑзÑ. Ðднако знаÑение как минимÑм в неÑколÑко Ð¼ÐµÐ³Ð°Ð±Ð°Ð¹Ñ Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑ Ð±ÑÑÑÑодейÑÑвие пÑи запиÑи на нагÑÑженном ÑеÑвеÑе, когда ÑÑÐ°Ð·Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑво клиенÑов ÑикÑиÑÑÑÑ ÑÑанзакÑии. ÐвÑонаÑÑÑойка, дейÑÑвÑÑÑÐ°Ñ Ð¿Ñи знаÑении по ÑмолÑÐ°Ð½Ð¸Ñ (-1), в болÑÑинÑÑве ÑлÑÑаев вÑбиÑÐ°ÐµÑ ÑазÑмнÑе знаÑениÑ.
wal_writer_delay(integer)ÐадаÑÑ Ð·Ð°Ð´ÐµÑÐ¶ÐºÑ Ð¼ÐµÐ¶Ð´Ñ ÑаÑндами акÑивноÑÑи пÑоÑеÑÑа запиÑи WAL. Ркаждом Ñаком ÑаÑнде ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ ÑÐ¾Ñ ÑанÑÐµÑ WAL на диÑк, заÑем Ð´ÐµÐ»Ð°ÐµÑ Ð¿Ð°ÑÐ·Ñ Ð½Ð°
wal_writer_delayмиллиÑекÑнд, а заÑем вÑÑ Ð¿Ð¾Ð²ÑоÑÑеÑÑÑ Ñнова. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð·Ð°Ð´ÐµÑжка 200 миллиÑекÑнд (200ms). ÐамеÑÑÑе, ÑÑо во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ ÑазÑеÑение ÑаймеÑа ÑоÑÑавлÑÐµÑ 10 мÑ, поÑÑÐ¾Ð¼Ñ ÐµÑли задаÑÑ Ð²wal_writer_delayзнаÑение, не кÑаÑное 10, ÑакÑиÑеÑки бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен ÑÐ¾Ñ Ð¶Ðµ ÑезÑлÑÑаÑ, ÑÑо и Ñо ÑледÑÑÑим за ним кÑаÑнÑм 10. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко вpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.commit_delay(integer)ÐаÑамеÑÑ
commit_delayдобавлÑÐµÑ Ð¿Ð°ÑÐ·Ñ (в микÑоÑекÑÐ½Ð´Ð°Ñ ) пеÑед ÑобÑÑвенно вÑполнением ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ WAL. ÐÑа задеÑжка Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑ Ð±ÑÑÑÑодейÑÑвие пÑи ÑикÑиÑовании множеÑÑва ÑÑанзакÑий, позволÑÑ Ð·Ð°ÑикÑиÑоваÑÑ Ð±Ð¾Ð»ÑÑее ÑиÑло ÑÑанзакÑий за Ð¾Ð´Ð½Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ WAL, еÑли ÑиÑÑема нагÑÑжена доÑÑаÑоÑно ÑилÑно и за заданное вÑÐµÐ¼Ñ ÑÑпеваÑÑ Ð·Ð°ÑикÑиÑоваÑÑÑÑ Ð´ÑÑгие ÑÑанзакÑии. Ðднако ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ñакже ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð·Ð°Ð´ÐµÑÐ¶ÐºÑ Ð¼Ð°ÐºÑимÑм доcommit_delayмикÑоÑекÑнд пÑи каждом ÑÐ¾Ñ Ñанении WAL. ÐÑа задеÑжка окажеÑÑÑ Ð±ÐµÑполезной, еÑли никакие дÑÑгие ÑÑанзакÑии не бÑдÑÑ Ð·Ð°ÑикÑиÑÐ¾Ð²Ð°Ð½Ñ Ð·Ð° ÑÑо вÑемÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° добавлÑеÑÑÑ, ÑолÑко еÑли в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð·Ð°Ð¿ÑоÑа ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ WAL акÑÐ¸Ð²Ð½Ñ ÐºÐ°Ðº минимÑмcommit_siblingsдÑÑÐ³Ð¸Ñ ÑÑанзакÑий. ÐÑоме Ñого, ÑÑи задеÑжки не добавлÑÑÑÑÑ Ð¿Ñи вÑклÑÑенномfsync. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñениеcommit_delayÑавно нÑÐ»Ñ (задеÑжка оÑÑÑÑÑÑвÑеÑ). ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.Ð PostgreSQL до веÑÑии 9.3, паÑамеÑÑ
commit_delayÑабоÑал по-дÑÑÐ³Ð¾Ð¼Ñ Ð¸ не Ñак ÑÑÑекÑивно: он задеÑживал ÑолÑко ÑикÑиÑование ÑÑанзакÑий, а не вÑе опеÑаÑии ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ WAL, и Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð°Ñза вÑдеÑживалаÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ, даже еÑли WAL ÑдавалоÑÑ ÑÐ¾Ñ ÑаниÑÑ Ð±ÑÑÑÑее. ÐаÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии 9.3, заданное вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ ÑолÑко пеÑвÑй пÑоÑеÑÑ, гоÑовÑй пÑоизвеÑÑи ÑÐ¾Ñ Ñанение, Ñогда как вÑе поÑледÑÑÑие пÑоÑеÑÑÑ Ð¶Ð´ÑÑ ÑолÑко, когда он законÑÐ¸Ñ ÑÑÑ Ð¾Ð¿ÐµÑаÑиÑ.commit_siblings(integer)ÐинималÑное ÑиÑло одновÑеменно оÑкÑÑÑÑÑ ÑÑанзакÑий, пÑи коÑоÑом бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð·Ð°Ð´ÐµÑжка
commit_delay. Чем болÑÑе ÑÑо знаÑение, Ñем болÑÑе веÑоÑÑноÑÑÑ, ÑÑо минимÑм одна ÑÑанзакÑÐ¸Ñ Ð¾ÐºÐ°Ð¶ÐµÑÑÑ Ð³Ð¾Ñовой к ÑикÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð° вÑÐµÐ¼Ñ Ð·Ð°Ð´ÐµÑжки. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо ÑиÑло Ñавно пÑÑи.
18.5.2. ÐонÑÑолÑнÑе ÑоÑки
checkpoint_timeout(integer)ÐакÑималÑное вÑÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñ Ð°Ð²ÑомаÑиÑеÑкими конÑÑолÑнÑми ÑоÑками в WAL (в ÑекÑÐ½Ð´Ð°Ñ ). ÐопÑÑкаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾Ñ 30 ÑекÑнд до одного ÑаÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â пÑÑÑ Ð¼Ð¸Ð½ÑÑ (
5min). УвелиÑение ÑÑого паÑамеÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑвелиÑÐµÐ½Ð¸Ñ Ð²Ñемени, коÑоÑое поÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑбоÑ. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко вpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.checkpoint_completion_target(floating point)ÐадаÑÑ Ñелевое вÑÐµÐ¼Ñ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ ÐºÐ¾Ð½ÑÑолÑной ÑоÑки, как коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð´Ð»Ñ Ð¾Ð±Ñего вÑемени Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð½ÑÑолÑнÑми ÑоÑками. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо знаÑение Ñавно 0.5. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко в
postgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.checkpoint_warning(integer)ÐапиÑÑваÑÑ Ð² жÑÑнал ÑеÑвеÑа ÑообÑение в ÑлÑÑае, еÑли конÑÑолÑнÑе ÑоÑки, вÑзваннÑе заполнением Ñайлов ÑегменÑов, вÑполнÑÑÑÑÑ ÑанÑÑе, Ñем ÑеÑез заданное ÑиÑло ÑекÑнд (ÑÑо говоÑÐ¸Ñ Ð¾ Ñом, ÑÑо знаÑение
max_wal_sizeнÑжно ÑвелиÑиÑÑ). ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно 30 ÑекÑндам (30s). ÐÑи нÑле ÑÑо пÑедÑпÑеждение оÑклÑÑаеÑÑÑ. ÐÑлиcheckpoint_timeoutменÑÑе, Ñемcheckpoint_warning, пÑедÑпÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ñак же не бÑдÑÑ Ð²ÑводиÑÑÑÑ. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко вpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.max_wal_size(integer)ÐакÑималÑнÑй ÑазмеÑ, до коÑоÑого Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑаÑÑаÑÑ WAL Ð¼ÐµÐ¶Ð´Ñ Ð°Ð²ÑомаÑиÑеÑкими конÑÑолÑнÑми ÑоÑками в WAL. ÐÑо мÑгкий пÑедел; ÑÐ°Ð·Ð¼ÐµÑ WAL Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑÑаÑÑ
max_wal_sizeпÑи оÑобÑÑ Ð¾Ð±ÑÑоÑÑелÑÑÑÐ²Ð°Ñ , напÑимеÑ, пÑи вÑÑокой нагÑÑзке, Ñбое вarchive_commandили пÑи болÑÑом знаÑенииwal_keep_segments. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1 ÐÐ. УвелиÑение ÑÑого паÑамеÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑвелиÑÐµÐ½Ð¸Ñ Ð²Ñемени, коÑоÑое поÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑбоÑ. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко вpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.min_wal_size(integer)Ðока WAL Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð° диÑке менÑÑе ÑÑого обÑÑма, ÑÑаÑÑе ÑÐ°Ð¹Ð»Ñ WAL в конÑÑолÑнÑÑ ÑоÑÐºÐ°Ñ Ð²Ñегда пеÑеÑабаÑÑваÑÑÑÑ, а не ÑдалÑÑÑÑÑ. ÐÑо позволÑÐµÑ Ð·Ð°ÑезеÑвиÑоваÑÑ Ð´Ð¾ÑÑаÑоÑно меÑÑа Ð´Ð»Ñ WAL, ÑÑÐ¾Ð±Ñ ÑпÑавиÑÑÑÑ Ñ Ñезкими ÑкаÑками иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ WAL, напÑимеÑ, пÑи вÑполнении болÑÑÐ¸Ñ Ð¿Ð°ÐºÐµÑнÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 80 ÐÐ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑÑановиÑÑ ÑолÑко в
postgresql.confили в командной ÑÑÑоке ÑеÑвеÑа.
18.5.3. ÐÑÑ Ð¸Ð²Ð°ÑиÑ
archive_mode(enum)Ðогда паÑамеÑÑ
archive_modeвклÑÑÑн, полнÑе ÑегменÑÑ WAL пеÑедаÑÑÑÑ Ð² Ñ ÑанилиÑе аÑÑ Ð¸Ð²Ð° командой archive_command. Ðомимо знаÑениÑoff(вÑклÑÑаÑÑего аÑÑ Ð¸Ð²Ð°ÑиÑ) еÑÑÑ ÐµÑÑ Ð´Ð²Ð°:on(вкл.) иalways(вÑегда). РобÑÑном ÑоÑÑоÑнии ÑÑи два Ñежима не ÑазлиÑаÑÑÑÑ, но в ÑежимеalwaysаÑÑ Ð¸Ð²Ð°ÑÐ¸Ñ WAL акÑивна и во вÑÐµÐ¼Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÑÑ Ð¸Ð²Ð°, и пÑи иÑполÑзовании ведомого ÑеÑвеÑа. Ð ÑÑом Ñежиме вÑе ÑайлÑ, воÑÑÑановленнÑе из аÑÑ Ð¸Ð²Ð° или полÑÑеннÑе пÑи поÑоковой ÑепликаÑии, бÑдÑÑ Ð°ÑÑ Ð¸Ð²Ð¸ÑоваÑÑÑÑ (Ñнова). Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 25.2.9.ÐаÑамеÑÑÑ
archive_modeиarchive_commandÑазделенÑ, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð°ÑÑ Ð¸Ð²Ð°Ñии (archive_command) можно бÑло изменÑÑÑ, не оÑклÑÑÐ°Ñ Ñежим аÑÑ Ð¸Ð²Ð°Ñии. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа. Режим аÑÑ Ð¸Ð²Ð°Ñии нелÑÐ·Ñ Ð²ÐºÐ»ÑÑиÑÑ, когда ÑÑÑановлен минималÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ WAL (wal_levelÐ¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñениеminimal).archive_command(string)Ðоманда локалÑной оболоÑки, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð´Ð»Ñ Ð°ÑÑ Ð¸Ð²Ð°Ñии завеÑÑÑнного ÑегменÑа WAL. ÐÑбое Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ
%pв ÑÑой ÑÑÑоке заменÑеÑÑÑ Ð¿ÑÑÑм аÑÑ Ð¸Ð²Ð¸ÑÑемого Ñайла, а Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ%fзаменÑеÑÑÑ ÑолÑко его именем. (ÐÑÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¾ÑноÑиÑелÑно ÑабоÑего каÑалога ÑеÑвеÑа, Ñо еÑÑÑ ÐºÐ°Ñалога даннÑÑ ÐºÐ»Ð°ÑÑеÑа.) ЧÑÐ¾Ð±Ñ Ð²ÑÑавиÑÑ Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñимвол%, его нÑжно запиÑаÑÑ ÐºÐ°Ðº%%. Ðажно, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° возвÑаÑала нÑлевой код, ÑолÑко еÑли она завеÑÑаеÑÑÑ ÑÑпеÑно. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 24.3.1.ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко в
postgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа. ÐÑли Ñежим аÑÑ Ð¸Ð²Ð°Ñии (archive_mode) не бÑл вклÑÑÑн пÑи запÑÑке, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ. ÐÑли знаÑениеarchive_commandâ пÑÑÑÐ°Ñ ÑÑÑока (по ÑмолÑаниÑ), ноarchive_modeвклÑÑÑн, аÑÑ Ð¸Ð²Ð°ÑÐ¸Ñ WAL вÑеменно оÑклÑÑаеÑÑÑ, но ÑеÑÐ²ÐµÑ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð½Ð°ÐºÐ°Ð¿Ð»Ð¸Ð²Ð°ÑÑ ÑÐ°Ð¹Ð»Ñ ÑегменÑов WAL в ожидании, ÑÑо команда бÑÐ´ÐµÑ Ð²ÑкоÑе опÑеделена. ÐÑли в каÑеÑÑвеarchive_commandзадаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, коÑоÑÐ°Ñ Ð½Ð¸Ñего не делаеÑ, но ÑообÑÐ°ÐµÑ Ð¾Ð± ÑÑпеÑном завеÑÑении, напÑимеÑ/bin/true(илиREMв Windows), аÑÑ Ð¸Ð²Ð°ÑÐ¸Ñ Ð¿Ð¾ ÑÑÑи оÑклÑÑаеÑÑÑ, но пÑи ÑÑом наÑÑÑаеÑÑÑ ÑепоÑка Ñайлов WAL, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°ÑÑ Ð¸Ð²Ð°, поÑÑÐ¾Ð¼Ñ Ñакой ваÑÐ¸Ð°Ð½Ñ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑолÑко в оÑобÑÑ ÑлÑÑаÑÑ .archive_timeout(integer)Ðоманда archive_command вÑзÑваеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÑннÑÑ ÑегменÑов WAL. ÐоÑÑомÑ, еÑли Ð²Ð°Ñ ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ Ð¼Ð°Ð»Ð¾ даннÑÑ WAL (или ÑÑо наблÑдаеÑÑÑ Ð² некоÑоÑÑе пеÑÐ¸Ð¾Ð´Ñ Ð²Ñемени), Ð¾Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑÑанзакÑии до надÑжного ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐµÑ Ð² аÑÑ Ð¸Ð²Ð½Ð¾Ð¼ Ñ ÑанилиÑе Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑойÑи доволÑно много вÑемени. ÐÐ»Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²Ñемени ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐ°ÑÑ Ð¸Ð²Ð¸ÑованнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑÑановиÑÑ Ð·Ð½Ð°Ñение
archive_timeout, ÑÑÐ¾Ð±Ñ ÑеÑÐ²ÐµÑ Ð¿ÐµÑиодиÑеÑки пеÑеклÑÑалÑÑ Ð½Ð° новÑй Ñайл ÑегменÑа WAL. Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð±Ð¾Ð»ÑÑе нÑлÑ, ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÐµÑеклÑÑаÑÑÑÑ Ð½Ð° новÑй Ñайл ÑегменÑа, еÑли Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа поÑледнего пеÑеклÑÑÐµÐ½Ð¸Ñ Ð½Ð° новÑй Ñайл пÑоÑло заданное ÑиÑло ÑекÑнд, и наблÑдалаÑÑ ÐºÐ°ÐºÐ°Ñ-Ñо акÑивноÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , даже еÑли ÑÑо бÑла пÑоÑÑо конÑÑолÑÐ½Ð°Ñ ÑоÑка. (ÐÐ»Ñ ÑокÑаÑÐµÐ½Ð¸Ñ ÑиÑла ненÑжнÑÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑоÑек в пÑоÑÑаиваÑÑей ÑиÑÑеме можно ÑвелиÑиÑÑcheckpoint_timeout.) ÐамеÑÑÑе, ÑÑо аÑÑ Ð¸Ð²Ð¸ÑÑемÑе ÑайлÑ, закÑÑваемÑе ÑанÑÑе из-за пÑинÑдиÑелÑного пеÑеклÑÑениÑ, вÑÑ Ñавно бÑдÑÑ Ð¸Ð¼ÐµÑÑ ÑÐ¾Ñ Ð¶Ðµ ÑазмеÑ, ÑÑо и полноÑÑÑÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð½Ñе. ÐоÑÑÐ¾Ð¼Ñ ÑÑÑанавливаÑÑ Ð´Ð»Ñarchive_timeoutоÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкое знаÑение неÑазÑмно â ÑÑо ведÑÑ Ðº замÑÑоÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð°ÑÑ Ð¸Ð²Ð½Ð¾Ð³Ð¾ Ñ ÑанилиÑа. ÐбÑÑно длÑarchive_timeoutÐ¸Ð¼ÐµÐµÑ ÑмÑÑл задаваÑÑ Ð·Ð½Ð°Ñение около минÑÑÑ. ÐÑли вам нÑжно, ÑÑÐ¾Ð±Ñ Ð´Ð°Ð½Ð½Ñе копиÑовалиÑÑ Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа бÑÑÑÑее, вам ÑледÑÐµÑ Ð¿Ð¾Ð´ÑмаÑÑ Ð¾ пеÑÐµÑ Ð¾Ð´Ðµ Ð¾Ñ Ð°ÑÑ Ð¸Ð²Ð°Ñии к поÑоковой ÑепликаÑии. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко вpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.