23.1. РегламенÑÐ½Ð°Ñ Ð¾ÑиÑÑка
- 23.1.1. ÐÑновнÑе пÑинÑÐ¸Ð¿Ñ Ð¾ÑиÑÑки
- 23.1.2. ÐÑÑвобождение диÑкового пÑоÑÑÑанÑÑва
- 23.1.3. Ðбновление ÑÑаÑиÑÑики планиÑовÑика
- 23.1.4. Ðбновление каÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи
- 23.1.5. ÐÑедоÑвÑаÑение оÑибок из-за заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ ÑÑÑÑÑика ÑÑанзакÑий
- 23.1.6. Ðемон авÑооÑиÑÑки
- 23.1.2. ÐÑÑвобождение диÑкового пÑоÑÑÑанÑÑва
ÐÐ°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Postgres Pro ÑÑебÑÑÑ Ð¿ÐµÑиодиÑеÑкого пÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ Ð¾Ð±ÑлÑживаниÑ, коÑоÑÐ°Ñ Ð½Ð°Ð·ÑваеÑÑÑ Ð¾ÑиÑÑкой. Ðо многиÑ
ÑлÑÑаÑÑ
оÑиÑÑÐºÑ Ð´Ð¾ÑÑаÑоÑно вÑполнÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð´ÐµÐ¼Ð¾Ð½Ð° авÑооÑиÑÑки, коÑоÑÑй опиÑан в ÐодÑазделе 23.1.6. Ðозможно, в ваÑей ÑиÑÑаÑии Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑималÑнÑÑ
ÑезÑлÑÑаÑов поÑÑебÑеÑÑÑ Ð½Ð°ÑÑÑоиÑÑ Ð¾Ð¿Ð¸ÑаннÑе Ñам же паÑамеÑÑÑ Ð°Ð²ÑооÑиÑÑки. ÐекоÑоÑÑе админиÑÑÑаÑоÑÑ Ð¡Ð£ÐРмогÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑÑ Ð¸Ð»Ð¸ замениÑÑ Ð´ÐµÐ¹ÑÑвие ÑÑого демона командами VACUUM (обÑÑно они вÑполнÑÑÑÑÑ Ð¿Ð¾ ÑаÑпиÑÐ°Ð½Ð¸Ñ Ð² заданиÑÑ
cron или ÐланиÑовÑика задаÑ). ЧÑÐ¾Ð±Ñ Ð¿ÑавилÑно оÑганизоваÑÑ Ð¾ÑиÑÑÐºÑ Ð²ÑÑÑнÑÑ, необÑ
одимо понимаÑÑ ÑемÑ, коÑоÑÑе бÑдÑÑ ÑаÑÑмоÑÑÐµÐ½Ñ Ð² ÑледÑÑÑиÑ
подÑазделаÑ
. ÐдминиÑÑÑаÑоÑÑ, коÑоÑÑе полагаÑÑÑÑ Ð½Ð° авÑооÑиÑÑкÑ, возможно, вÑÑ Ð¶Ðµ заÑ
оÑÑÑ Ð¿ÑоÑмоÑÑеÑÑ ÑÑÐ¾Ñ Ð¼Ð°ÑеÑиал, ÑÑÐ¾Ð±Ñ Ð»ÑÑÑе понимаÑÑ Ð¸ наÑÑÑаиваÑÑ ÑÑÑ Ð¿ÑоÑедÑÑÑ.
23.1.1. ÐÑновнÑе пÑинÑÐ¸Ð¿Ñ Ð¾ÑиÑÑки
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM в Postgres Pro Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾Ð±ÑабаÑÑваÑÑ ÐºÐ°Ð¶Ð´ÑÑ ÑаблиÑÑ Ð¿Ð¾ ÑледÑÑÑим пÑиÑинам:
- ÐÐ»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ повÑоÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñкового пÑоÑÑÑанÑÑва, занÑÑого изменÑннÑми или ÑдалÑннÑми ÑÑÑоками.
- ÐÐ»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑаÑиÑÑики по даннÑм, иÑполÑзÑемой планиÑовÑиком запÑоÑов Postgres Pro.
- ÐÐ»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи, коÑоÑÐ°Ñ ÑÑкоÑÑÐµÑ ÑканиÑование ÑолÑко индекÑа.
- ÐÐ»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑеÑи оÑÐµÐ½Ñ ÑÑаÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð·-за заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов ÑÑанзакÑий или мÑлÑÑиÑÑанзакÑий.
РазнÑе пÑиÑÐ¸Ð½Ñ Ð´Ð¸ÐºÑÑÑÑ Ð²Ñполнение дейÑÑвий VACUUM Ñ Ñазной ÑаÑÑоÑой и в Ñазном обÑÑме, как ÑаÑÑмаÑÑиваеÑÑÑ Ð² ÑледÑÑÑиÑ
подÑазделаÑ
.
СÑÑеÑÑвÑÐµÑ Ð´Ð²Ð° ваÑианÑа VACUUM: обÑÑнÑй VACUUM и VACUUM FULL. Ðоманда VACUUM FULL Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑвободиÑÑ Ð±Ð¾Ð»ÑÑе диÑкового пÑоÑÑÑанÑÑва, однако ÑабоÑÐ°ÐµÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ. ÐÑоме Ñого, обÑÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° VACUUM Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð°ÑаллелÑно Ñ Ð¸ÑполÑзованием пÑоизводÑÑвенной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. (ÐÑи ÑÑом Ñакие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÐºÐ°Ðº SELECT, INSERT, UPDATE и DELETE бÑдÑÑ Ð²ÑполнÑÑÑÑÑ Ð½Ð¾ÑмалÑно, Ñ
оÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð±ÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¾Ð¿Ñеделение ÑаблиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ Ñипа ALTER TABLE.) Ðоманда VACUUM FULL ÑÑебÑÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки обÑабаÑÑваемой ÑаблиÑÑ Ð² Ñежиме ACCESS EXCLUSIVE и поÑÑÐ¾Ð¼Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð°ÑаллелÑно Ñ Ð´ÑÑгими опеÑаÑиÑми Ñ ÑÑой ÑаблиÑей. Ðо ÑÑой пÑиÑине админиÑÑÑаÑоÑÑ, как пÑавило, Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑаÑаÑÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð±ÑÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM и избегаÑÑ VACUUM FULL.
Ðоманда VACUUM поÑÐ¾Ð¶Ð´Ð°ÐµÑ ÑÑÑеÑÑвеннÑй обÑÑм ÑÑаÑика ввода-вÑвода, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð¿ÑиÑиной низкой пÑоизводиÑелÑноÑÑи в дÑÑгиÑ
акÑивнÑÑ
ÑеанÑаÑ
. ÐÑо влиÑние Ñоновой оÑиÑÑки можно ÑегÑлиÑоваÑÑ, наÑÑÑÐ°Ð¸Ð²Ð°Ñ Ð¿Ð°ÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии (Ñм. ÐодÑаздел 18.4.4).
23.1.2. ÐÑÑвобождение диÑкового пÑоÑÑÑанÑÑва
Ð Postgres Pro ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ UPDATE или DELETE не вÑзÑваÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑÑаÑой веÑÑии изменÑемÑÑ
ÑÑÑок. ÐÑÐ¾Ñ Ð¿Ð¾Ð´Ñ
од необÑ
одим Ð´Ð»Ñ ÑеализаÑии ÑÑÑекÑивного многовеÑÑионного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐºÑÑенÑнÑм доÑÑÑпом (MVCC, Ñм. ÐлавÑ 13): веÑÑÐ¸Ñ ÑÑÑоки не должна ÑдалÑÑÑÑÑ Ð´Ð¾ ÑеÑ
поÑ, пока она оÑÑаÑÑÑÑ Ð¿Ð¾ÑенÑиалÑно видимой Ð´Ð»Ñ Ð´ÑÑгиÑ
ÑÑанзакÑий. Ðднако в конÑе конÑов ÑÑÑаÑевÑÐ°Ñ Ð¸Ð»Ð¸ ÑдалÑÐ½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑÑÑоки оказÑваеÑÑÑ Ð½Ðµ нÑжна ни одной из ÑÑанзакÑий. ÐоÑле ÑÑого занимаемое ей меÑÑо должно бÑÑÑ Ð¾Ñвобождено и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ñдано новÑм ÑÑÑокам, во избежание неогÑаниÑенного ÑоÑÑа поÑÑебноÑÑи в диÑковом пÑоÑÑÑанÑÑве. ÐÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ñи вÑполнении ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM.
ÐбÑÑÐ½Ð°Ñ ÑоÑма VACUUM ÑдалÑÐµÑ Ð½ÐµÐ¸ÑполÑзÑемÑе веÑÑии ÑÑÑок в ÑаблиÑаÑ
и индекÑаÑ
и помеÑÐ°ÐµÑ Ð¿ÑоÑÑÑанÑÑво ÑвободнÑм Ð´Ð»Ñ Ð´Ð°Ð»ÑнейÑего иÑполÑзованиÑ. Ðднако ÑÑо диÑковое пÑоÑÑÑанÑÑво не возвÑаÑаеÑÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑеме, кÑоме оÑобого ÑлÑÑаÑ, когда полноÑÑÑÑ Ð¾ÑвобождаÑÑÑÑ Ð¾Ð´Ð½Ð° или неÑколÑко ÑÑÑÐ°Ð½Ð¸Ñ Ð² конÑе ÑаблиÑÑ Ð¸ можно легко полÑÑиÑÑ Ð¸ÑклÑÑиÑелÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ÑаблиÑÑ. Ðоманда VACUUM FULL, напÑоÑив, каÑдиналÑно ÑÐ¶Ð¸Ð¼Ð°ÐµÑ ÑаблиÑÑ, запиÑÑÐ²Ð°Ñ Ð°Ð±ÑолÑÑно новÑÑ Ð²ÐµÑÑÐ¸Ñ Ñайла ÑаблиÑÑ Ð±ÐµÐ· неиÑполÑзÑемого пÑоÑÑÑанÑÑва. ÐÑо минимизиÑÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÑаблиÑÑ, однако Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени. ÐÑоме Ñого, Ð´Ð»Ñ ÑÑого ÑÑебÑеÑÑÑ Ð±Ð¾Ð»ÑÑе меÑÑа на диÑке Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи новой копии ÑаблиÑÑ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии.
ÐбÑÑно ÑÐµÐ»Ñ ÑегÑлÑÑной оÑиÑÑки â вÑполнÑÑÑ Ð¿ÑоÑÑÑÑ Ð¾ÑиÑÑÐºÑ (VACUUM) доÑÑаÑоÑно ÑаÑÑо, ÑÑÐ¾Ð±Ñ Ð½Ðµ возникала необÑ
одимоÑÑÑ Ð² VACUUM FULL. Ðемон авÑооÑиÑÑки пÑÑаеÑÑÑ ÑабоÑаÑÑ Ð² ÑÑом Ñежиме, и на Ñамом деле он Ñам никогда не вÑполнÑÐµÑ VACUUM FULL. ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ Ñакого подÑ
ода не в Ñом, ÑÑÐ¾Ð±Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð¸ÑоваÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑаблиÑ, а в Ñом, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð¸ÑполÑзование диÑкового пÑоÑÑÑанÑÑва на ÑÑабилÑном ÑÑовне: ÐºÐ°Ð¶Ð´Ð°Ñ ÑаблиÑа Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±ÑÑм, ÑавнÑй ÐµÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑÐ½Ð¾Ð¼Ñ ÑазмеÑÑ, плÑÑ Ð¾Ð±ÑÑм, коÑоÑÑй бÑл занÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð¿ÑоÑедÑÑами оÑиÑÑки. ХоÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ VACUUM FULL можно ÑжаÑÑ ÑаблиÑÑ Ð´Ð¾ минимÑма и возвÑаÑиÑÑ Ð´Ð¸Ñковое пÑоÑÑÑанÑÑво опеÑаÑионной ÑиÑÑеме, болÑÑого ÑмÑÑла в ÑÑом неÑ, еÑли в бÑдÑÑем ÑаблиÑа Ñак же вÑÑаÑÑÐµÑ Ñнова. СледоваÑелÑно, Ð´Ð»Ñ Ð°ÐºÑивно изменÑемÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð»ÑÑÑе Ñ ÑмеÑенной ÑаÑÑоÑой вÑполнÑÑÑ VACUUM, Ñем оÑÐµÐ½Ñ Ñедко вÑполнÑÑÑ VACUUM FULL.
ÐекоÑоÑÑе админиÑÑÑаÑоÑÑ Ð¿ÑедпоÑиÑаÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑоваÑÑ Ð¾ÑиÑÑÐºÑ ÐÐ ÑамоÑÑоÑÑелÑно, напÑимеÑ, пÑÐ¾Ð²Ð¾Ð´Ñ Ð²Ñе ÑабоÑÑ Ð½Ð¾ÑÑÑ Ð² пеÑиод низкой загÑÑзки. Ðднако оÑиÑÑка ÑолÑко по ÑикÑиÑÐ¾Ð²Ð°Ð½Ð½Ð¾Ð¼Ñ ÑаÑпиÑÐ°Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ
а Ñем, ÑÑо пÑи Ñезком ÑкаÑке инÑенÑивноÑÑи изменений ÑаздÑвание ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑомÑ, ÑÑо Ð´Ð»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва дейÑÑвиÑелÑно понадобиÑÑÑ Ð²ÑполниÑÑ VACUUM FULL. ÐÑполÑзование демона авÑооÑиÑÑки ÑÐ½Ð¸Ð¼Ð°ÐµÑ ÑÑÑ Ð¿ÑоблемÑ, поÑколÑÐºÑ Ð¾Ð½ планиÑÑÐµÑ Ð¾ÑиÑÑÐºÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки, оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ñ Ð¸Ð½ÑенÑивноÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. ÐолноÑÑÑÑ Ð¾ÑклÑÑаÑÑ ÑÑÐ¾Ñ Ð´ÐµÐ¼Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑмÑÑл, ÑолÑко еÑли Ð²Ñ Ð¸Ð¼ÐµÐµÑе дело Ñ Ð¿ÑеделÑно пÑедÑказÑемой загÑÑзкой. Ðозможен и компÑомиÑÑнÑй ваÑÐ¸Ð°Ð½Ñ â наÑÑÑоиÑÑ Ð¿Ð°ÑамеÑÑÑ Ð´ÐµÐ¼Ð¾Ð½Ð° авÑооÑиÑÑки Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½ ÑеагиÑовал ÑолÑко на необÑÑайно вÑÑокÑÑ Ð¸Ð½ÑенÑивноÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ и мог ÑдеÑжаÑÑ ÑиÑÑаÑÐ¸Ñ Ð¿Ð¾Ð´ конÑÑолем, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM, запÑÑкаемÑе по ÑаÑпиÑаниÑ, бÑдÑÑ Ð²ÑполнÑÑÑ Ð¾ÑновнÑÑ ÑабоÑÑ Ð² пеÑÐ¸Ð¾Ð´Ñ Ð½Ð¾ÑмалÑной загÑÑзки.
ÐÑли же авÑооÑиÑÑка не пÑименÑеÑÑÑ, обÑÑно планиÑÑеÑÑÑ Ð²Ñполнение VACUUM Ð´Ð»Ñ Ð²Ñей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñаз в ÑÑÑки в пеÑиод низкой акÑивноÑÑи, и в ÑлÑÑае необÑ
одимоÑÑи оно дополнÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑаÑÑой оÑиÑÑкой инÑенÑивно изменÑемÑÑ
ÑаблиÑ. (РнекоÑоÑÑÑ
ÑиÑÑаÑиÑÑ
, когда Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑоизводÑÑÑÑ ÐºÑайне инÑенÑивно, ÑамÑе воÑÑÑебованнÑе ÑаблиÑÑ Ð¼Ð¾Ð³ÑÑ Ð¾ÑиÑаÑÑÑÑ Ñаз в неÑколÑко минÑÑ.) ÐÑли в ваÑем клаÑÑеÑе неÑколÑко баз даннÑÑ
, не забÑвайÑе вÑполнÑÑÑ VACUUM Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ниÑ
; пÑи ÑÑом Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° пÑогÑамма vacuumdb.
ÐодÑказка
РезÑлÑÑÐ°Ñ Ð¾Ð±ÑÑного VACUUM Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑдовлеÑвоÑиÑелÑнÑм, когда вÑледÑÑвие маÑÑового Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð² ÑаблиÑе оказÑваеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ мÑÑÑвÑÑ
веÑÑий ÑÑÑок. ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑÐ°ÐºÐ°Ñ ÑаблиÑа и вам нÑжно оÑвободиÑÑ Ð»Ð¸Ñнее пÑоÑÑÑанÑÑво, коÑоÑое она занимаеÑ, иÑполÑзÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM FULL или, в каÑеÑÑве алÑÑеÑнаÑивÑ, CLUSTER или один из ваÑианÑов ALTER TABLE, вÑполнÑÑÑий пеÑезапиÑÑ ÑаблиÑÑ. ÐÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð°Ð±ÑолÑÑно новÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÑаблиÑÑ Ð¸ ÑÑÑоÑÑ Ð´Ð»Ñ Ð½ÐµÑ Ð¸Ð½Ð´ÐµÐºÑÑ. ÐÑе ÑÑи ваÑианÑÑ ÑÑебÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки в Ñежиме ACCESS EXCLUSIVE. ÐамеÑÑÑе, ÑÑо они Ñакже на вÑÐµÐ¼Ñ ÑÑебÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑного пÑоÑÑÑанÑÑва на диÑке в обÑÑме, пÑиблизиÑелÑно Ñавном ÑазмеÑÑ ÑаблиÑÑ, поÑколÑÐºÑ ÑÑаÑÑе копии ÑаблиÑÑ Ð¸ индекÑов нелÑÐ·Ñ ÑдалиÑÑ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ
копий.
ÐодÑказка
ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑаблиÑа, вÑÑ ÑодеÑжимое коÑоÑой пеÑиодиÑеÑки нÑжно ÑдалÑÑÑ, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл делаÑÑ ÑÑо, вÑполнÑÑ ÑолÑко TRUNCATE, а не DELETE и заÑем VACUUM. TRUNCATE немедленно ÑдалÑÐµÑ Ð²ÑÑ ÑодеÑжимое ÑаблиÑÑ, не ÑÑебÑÑ Ð¿Ð¾ÑледÑÑÑей оÑиÑÑки (VACUUM или VACUUM FULL) Ð´Ð»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½ÐµÐ¸ÑполÑзÑемого диÑкового пÑоÑÑÑанÑÑва. ÐедоÑÑаÑком Ñакого подÑ
ода ÑвлÑеÑÑÑ Ð½Ð°ÑÑÑение ÑÑÑогой ÑеманÑики MVCC.
23.1.3. Ðбновление ÑÑаÑиÑÑики планиÑовÑика
ÐланиÑовÑик запÑоÑов в Postgres Pro, вÑбиÑÐ°Ñ ÑÑÑекÑивнÑе Ð¿Ð»Ð°Ð½Ñ Ð·Ð°Ð¿ÑоÑов, полагаеÑÑÑ Ð½Ð° ÑÑаÑиÑÑиÑеÑкÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑодеÑжимом ÑаблиÑ. ÐÑа ÑÑаÑиÑÑика ÑобиÑаеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ANALYZE, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзÑваÑÑÑÑ Ñама по Ñебе или как дополниÑелÑное дейÑÑвие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM. СÑаÑиÑÑика должна бÑÑÑ Ð´Ð¾ÑÑаÑоÑно ÑоÑной, Ñак как в пÑоÑивном ÑлÑÑае неÑдаÑно вÑбÑаннÑе Ð¿Ð»Ð°Ð½Ñ Ð·Ð°Ð¿ÑоÑов могÑÑ ÑнизиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
Ðемон авÑооÑиÑÑки, еÑли он вклÑÑÑн, бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки вÑполнÑÑÑ ANALYZE поÑле ÑÑÑеÑÑвеннÑÑ
изменений ÑодеÑжимого ÑаблиÑÑ. Ðднако админиÑÑÑаÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÑедпоÑеÑÑÑ Ð²Ñполнение ANALYZE вÑÑÑнÑÑ, в ÑаÑÑноÑÑи, еÑли извеÑÑно, ÑÑо пÑоизводимÑе в ÑаблиÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ повлиÑÑÑ Ð½Ð° ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ «инÑеÑеÑнÑм» ÑÑолбÑам. Ðемон же планиÑÑÐµÑ Ð²Ñполнение ANALYZE в завиÑимоÑÑи ÑолÑко Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва вÑÑавленнÑÑ
или изменÑннÑÑ
ÑÑÑок; он не знаеÑ, пÑиведÑÑ Ð»Ð¸ они к знаÑимÑм изменениÑм ÑÑаÑиÑÑики.
Ðзменение коÑÑежей в доÑеÑниÑ
ÑаблиÑаÑ
и ÑекÑиÑÑ
не ÑÑиÑаеÑÑÑ Ð¿Ð¾Ð²Ð¾Ð´Ð¾Ð¼ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка анализа ÑодиÑелÑÑкой ÑаблиÑÑ. ÐÑли ÑодиÑелÑÑÐºÐ°Ñ ÑаблиÑа пÑÑÑа или изменÑеÑÑÑ Ñедко, пÑоÑеÑÑ Ð°Ð²ÑооÑиÑÑки Ð¼Ð¾Ð¶ÐµÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не заÑÑонÑÑÑ ÐµÑ Ð¸ ÑÑаÑиÑÑика иеÑаÑÑ
ии наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÑобиÑаÑÑÑÑ Ð½Ðµ бÑдеÑ. ÐоÑÑÐ¾Ð¼Ñ Ð½ÐµÐ¾Ð±Ñ
одимо вÑполнÑÑÑ ANALYZE Ð´Ð»Ñ ÑодиÑелÑÑкой ÑаблиÑÑ Ð²ÑÑÑнÑÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð² акÑÑалÑном ÑоÑÑоÑнии.
Ðак и пÑоÑедÑÑа оÑиÑÑки Ð´Ð»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва, ÑаÑÑое обновление ÑÑаÑиÑÑики полезнее Ð´Ð»Ñ Ð¸Ð½ÑенÑивно изменÑемÑÑ
ÑаблиÑ, нежели Ð´Ð»Ñ ÑеÑ
ÑаблиÑ, коÑоÑÑе изменÑÑÑÑÑ Ñедко. Ðднако даже в ÑлÑÑае ÑаÑÑо изменÑемой ÑаблиÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ ÑÑаÑиÑÑики Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑÑебоваÑÑÑÑ, еÑли ÑÑаÑиÑÑиÑеÑкое ÑаÑпÑеделение даннÑÑ
менÑеÑÑÑ Ñлабо. Ðак пÑавило, доÑÑаÑоÑно оÑениÑÑ, наÑколÑко менÑÑÑÑÑ Ð¼Ð°ÐºÑималÑное и минималÑное знаÑÐµÐ½Ð¸Ñ Ð² ÑÑолбÑаÑ
ÑаблиÑÑ. ÐапÑимеÑ, макÑималÑное знаÑение в ÑÑолбÑе timestamp, Ñ
ÑанÑÑем вÑÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑоки, бÑÐ´ÐµÑ Ð¿Ð¾ÑÑоÑнно ÑвелиÑиваÑÑÑÑ Ð¿Ð¾ меÑе Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑок; Ð´Ð»Ñ Ñакого ÑÑолбÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑаÑÑое обновление ÑÑаÑиÑÑики, Ñем, к пÑимеÑÑ, Ð´Ð»Ñ ÑÑолбÑа, ÑодеÑжаÑего адÑеÑа ÑÑÑÐ°Ð½Ð¸Ñ (URL), коÑоÑÑе запÑаÑивалиÑÑ Ñ ÑайÑа. СÑÐ¾Ð»Ð±ÐµÑ Ñ URL-адÑеÑами Ð¼Ð¾Ð¶ÐµÑ Ð¼ÐµÐ½ÑÑÑÑÑ ÑÑÐ¾Ð»Ñ Ð¶Ðµ ÑаÑÑо, однако ÑÑаÑиÑÑиÑеÑкое ÑаÑпÑеделение его знаÑений, веÑоÑÑно, бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð¾ÑноÑиÑелÑно медленно.
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE можно вÑполнÑÑÑ Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ даже пÑоÑÑо Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
ÑÑолбÑов ÑаблиÑÑ, поÑÑомÑ, еÑли Ñого ÑÑебÑÐµÑ Ð¿Ñиложение, одни ÑÑаÑиÑÑиÑеÑкие даннÑе можно обновлÑÑÑ ÑаÑе, Ñем дÑÑгие. Ðднако на пÑакÑике обÑÑно лÑÑÑе пÑоÑÑо анализиÑоваÑÑ Ð²ÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, поÑколÑÐºÑ ÑÑо бÑÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑиÑ, Ñак как ANALYZE ÑиÑÐ°ÐµÑ Ð½Ðµ каждÑÑ Ð¾ÑделÑнÑÑ ÑÑÑокÑ, а ÑÑаÑиÑÑиÑеÑки ÑлÑÑайнÑÑ Ð²ÑбоÑÐºÑ ÑÑÑок ÑаблиÑÑ.
ÐодÑказка
ХоÑÑ Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑалÑÐ½Ð°Ñ Ð½Ð°ÑÑÑойка ÑаÑÑоÑÑ ANALYZE Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
ÑÑолбÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾Ð¹, ÑмÑÑл Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½Ð°ÑÑÑойка деÑализаÑии ÑÑаÑиÑÑики, ÑобиÑаемой командой ANALYZE. ÐÐ»Ñ ÑÑолбÑов, коÑоÑÑе ÑаÑÑо иÑполÑзÑÑÑÑÑ Ð² пÑедложениÑÑ
WHERE, и имеÑÑ Ð¾ÑÐµÐ½Ñ Ð½ÐµÑавномеÑное ÑаÑпÑеделение даннÑÑ
, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ деÑалÑнаÑ, по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð´ÑÑгими ÑÑолбÑами, гиÑÑогÑамма даннÑÑ
. Ð ÑакиÑ
ÑлÑÑаÑÑ
можно воÑполÑзоваÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER TABLE SET STATISTICS или измениÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑа ÑÑÐ¾Ð²Ð½Ñ ÐÐ default_statistics_target.
ÐÑоме Ñого, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± избиÑаÑелÑноÑÑи ÑÑнкÑий огÑаниÑена. Ðднако еÑли Ð²Ñ ÑоздаÑÑе обÑÐµÐºÑ ÑÑаÑиÑÑики или Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñ Ð²Ñзовом ÑÑнкÑии, об ÑÑой ÑÑнкÑии бÑÐ´ÐµÑ ÑобÑана Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ ÑÑаÑиÑÑиÑеÑÐºÐ°Ñ Ð¸Ð½ÑоÑмаÑиÑ, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑиÑелÑно ÑлÑÑÑиÑÑ Ð¿Ð»Ð°Ð½Ñ Ð·Ð°Ð¿ÑоÑов, задейÑÑвÑÑÑие даннÑй индекÑ.
ÐодÑказка
Ðемон авÑооÑиÑÑки не вÑполнÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE Ð´Ð»Ñ ÑÑоÑонниÑ
ÑаблиÑ, поÑколÑÐºÑ Ð¾Ð½ не знаеÑ, как ÑаÑÑо ÑÑо ÑледÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ. ÐÑли Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÐºÐ°ÑеÑÑвеннÑÑ
планов ваÑим запÑоÑам необÑ
одима ÑÑаÑиÑÑика по ÑÑоÑонним ÑаблиÑам, бÑÐ´ÐµÑ Ñ
оÑоÑей идеей дополниÑелÑно запÑÑкаÑÑ ANALYZE Ð´Ð»Ñ Ð½Ð¸Ñ
по подÑ
одÑÑÐµÐ¼Ñ ÑаÑпиÑаниÑ.
ÐодÑказка
Ðемон авÑооÑиÑÑки не вÑполнÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE Ð´Ð»Ñ ÑекÑиониÑованнÑÑ
ÑаблиÑ. РиеÑаÑÑ
ии наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð½Ð°Ð»Ð¸Ð· ÑодиÑелÑÑкой ÑаблиÑÑ Ð¿ÑоводиÑÑÑ, ÑолÑко еÑли менÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñе в ней Ñамой â Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² доÑеÑней ÑаблиÑе не ÑÑиÑаÑÑÑÑ Ð¿Ð¾Ð²Ð¾Ð´Ð¾Ð¼ Ð´Ð»Ñ Ð°Ð²Ñоанализа ÑодиÑелÑÑкой ÑаблиÑÑ. ÐÑли Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÐºÐ°ÑеÑÑвеннÑÑ
планов ваÑим запÑоÑам необÑ
одима ÑÑаÑиÑÑика по ÑодиÑелÑÑким ÑаблиÑам, нÑжно пеÑиодиÑеÑки вÑполнÑÑÑ ANALYZE вÑÑÑнÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ñ
ÑÑаÑиÑÑика бÑла акÑÑалÑной.
23.1.4. Ðбновление каÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи
ÐÑоÑедÑÑа оÑиÑÑки поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ, позволÑÑÑие опÑеделиÑÑ, в ÐºÐ°ÐºÐ¸Ñ ÑÑÑаниÑÐ°Ñ ÐµÑÑÑ ÑолÑко запиÑи, заведомо видимÑе Ð´Ð»Ñ Ð²ÑÐµÑ Ð°ÐºÑивнÑÑ ÑÑанзакÑий (и вÑÐµÑ Ð±ÑдÑÑÐ¸Ñ ÑÑанзакÑий, пока ÑÑÑаниÑа не бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð°). ÐÑо Ð¸Ð¼ÐµÐµÑ Ð´Ð²Ð° пÑименениÑ. Ðо-пеÑвÑÑ , Ñам пÑоÑеÑÑ Ð¾ÑиÑÑки Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑопÑÑкаÑÑ Ñакие ÑÑÑаниÑÑ Ð¿Ñи ÑледÑÑÑем запÑÑке, поÑколÑÐºÑ Ð½Ð° ÑÑÐ¸Ñ ÑÑÑаниÑÐ°Ñ Ð²ÑÑиÑаÑÑ Ð½ÐµÑего.
Ðо-вÑоÑÑÑ , Ñ Ñакими каÑÑами Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаваÑÑ ÑезÑлÑÑаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð·Ð°Ð¿ÑоÑов, иÑполÑзÑÑ ÑолÑко индекÑ, не обÑаÑаÑÑÑ Ðº даннÑм ÑаблиÑÑ. Так как индекÑÑ Postgres Pro не ÑодеÑÐ¶Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ видимоÑÑи запиÑей, пÑи обÑÑном ÑканиÑовании по индекÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ извлеÑÑ ÑооÑвеÑÑÑвÑÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¸Ð· ÑаблиÑÑ Ð¸ пÑовеÑиÑÑ ÐµÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð´Ð»Ñ ÑекÑÑей ÑÑанзакÑии. ÐоÑÑÐ¾Ð¼Ñ Ð¿Ñи ÑканиÑовании ÑолÑко индекÑа, наобоÑоÑ, ÑнаÑала пÑовеÑÑеÑÑÑ ÐºÐ°ÑÑа видимоÑÑи. ÐÑли извеÑÑно, ÑÑо вÑе запиÑи на ÑÑÑаниÑе видимÑ, Ñо вÑбоÑÐºÑ Ð¸Ð· ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑопÑÑÑиÑÑ. ÐÑо наиболее полезно Ñ Ð±Ð¾Ð»ÑÑими набоÑами даннÑÑ , когда благодаÑÑ ÐºÐ°ÑÑе видимоÑÑи можно опÑимизиÑоваÑÑ ÑÑение Ñ Ð´Ð¸Ñка. ÐаÑÑа видимоÑÑи знаÑиÑелÑно менÑÑе ÑаблиÑÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° легко помеÑаеÑÑÑ Ð² кеÑ, даже когда обÑÑм ÑÐ°Ð¼Ð¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¾ÑÐµÐ½Ñ Ð²ÐµÐ»Ð¸Ðº.
23.1.5. ÐÑедоÑвÑаÑение оÑибок из-за заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ ÑÑÑÑÑика ÑÑанзакÑий
Ð Postgres Pro ÑеманÑика ÑÑанзакÑий MVCC завиÑÐ¸Ñ Ð¾Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑов иденÑиÑикаÑоÑов ÑÑанзакÑий (XID): веÑÑÐ¸Ñ ÑÑÑоки, Ñ ÐºÐ¾ÑоÑой XID добавивÑей ÐµÑ ÑÑанзакÑии болÑÑе, Ñем XID ÑекÑÑей ÑÑанзакÑии, оÑноÑиÑÑÑ Â«Ðº бÑдÑÑемÑ» и не должна бÑÑÑ Ð²Ð¸Ð´Ð½Ð° в ÑекÑÑей ÑÑанзакÑии. Ðднако поÑколÑÐºÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ ÑÑанзакÑий имеÑÑ Ð¾Ð³ÑаниÑеннÑй ÑÐ°Ð·Ð¼ÐµÑ (32 биÑа), клаÑÑеÑ, ÑабоÑаÑÑий долгое вÑÐµÐ¼Ñ (более 4 миллиаÑдов ÑÑанзакÑий) ÑÑолкнÑÑÑÑ Ñ Ð·Ð°Ñикливанием иденÑиÑикаÑоÑов ÑÑанзакÑий: ÑÑÑÑÑик XID пÑокÑÑÑиÑÑÑ Ð´Ð¾ нÑлÑ, и внезапно ÑÑанзакÑии, коÑоÑÑе оÑноÑилиÑÑ Ðº пÑоÑломÑ, окажÑÑÑÑ Ð² бÑдÑÑем â ÑÑо ознаÑаеÑ, ÑÑо Ð¸Ñ ÑезÑлÑÑаÑÑ ÑÑанÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñми. Ðдним Ñловом, ÑÑо каÑаÑÑÑоÑиÑеÑÐºÐ°Ñ Ð¿Ð¾ÑеÑÑ Ð´Ð°Ð½Ð½ÑÑ . (Ðа Ñамом деле даннÑе никÑда не пÑопадаÑÑ, однако еÑли Ð²Ñ Ð½Ðµ можеÑе Ð¸Ñ Ð¿Ð¾Ð»ÑÑиÑÑ, Ñо ÑÑо Ñлабое ÑÑеÑение.) ÐÐ»Ñ Ñого ÑÑÐ¾Ð±Ñ ÑÑого избежаÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑполнÑÑÑ Ð¾ÑиÑÑÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ Ð² каждой базе даннÑÑ ÐºÐ°Ðº минимÑм ÐµÐ´Ð¸Ð½Ð¾Ð¶Ð´Ñ Ð½Ð° два миллиаÑда ÑÑанзакÑий.
ÐеÑиодиÑеÑкое вÑполнение оÑиÑÑки ÑеÑÐ°ÐµÑ ÑÑÑ Ð¿ÑоблемÑ, поÑÐ¾Ð¼Ñ ÑÑо пÑоÑедÑÑа VACUUM помеÑÐ°ÐµÑ ÑÑÑоки как замоÑоженнÑе, ÑказÑваÑ, ÑÑо они бÑли вÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑÑанзакÑией, заÑикÑиÑованной доÑÑаÑоÑно давно, Ñак ÑÑо ÑÑÑÐµÐºÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑей ÑÑанзакÑии Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ MVCC опÑеделÑнно бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÐ½ во вÑеÑ
ÑекÑÑиÑ
и бÑдÑÑиÑ
ÑÑанзакÑиÑÑ
. ÐбÑÑнÑе знаÑÐµÐ½Ð¸Ñ XID ÑÑавниваÑÑÑÑ Ð¿Ð¾ модÑÐ»Ñ 232. ÐÑо ознаÑаеÑ, ÑÑо Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ обÑÑного XID ÑÑÑеÑÑвÑÑÑ Ð´Ð²Ð° миллиаÑда знаÑений XID, коÑоÑÑе «ÑÑаÑÑе» него, и два миллиаÑда знаÑений, коÑоÑÑе «младÑе» него; дÑÑгими Ñловами, пÑоÑÑÑанÑÑво знаÑений XID ÑиклиÑно и не Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð½ÐµÑной ÑоÑки. СледоваÑелÑно, как ÑолÑко ÑоздаÑÑÑÑ Ð²ÐµÑÑÐ¸Ñ ÑÑÑоки Ñ Ð¾Ð±ÑÑнÑм XID, Ð´Ð»Ñ ÑледÑÑÑиÑ
двÑÑ
миллиаÑдов ÑÑанзакÑий ÑÑа веÑÑÐ¸Ñ ÑÑÑоки оказÑваеÑÑÑ Â«Ð² пÑоÑлом», неважно о каком знаÑении обÑÑного XID Ð¸Ð´ÐµÑ ÑеÑÑ. ÐÑли поÑле двÑÑ
миллиаÑдов ÑÑанзакÑий ÑÑа веÑÑÐ¸Ñ ÑÑÑоки вÑÑ ÐµÑÑ ÑÑÑеÑÑвÑеÑ, она внезапно окажеÑÑÑ Ð² бÑдÑÑем. ÐÐ»Ñ Ñого ÑÑÐ¾Ð±Ñ ÑÑо пÑедоÑвÑаÑиÑÑ, в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð·Ð½Ð°Ñение XID Ð´Ð»Ñ ÑÑаÑÑÑ
веÑÑий ÑÑÑок должно бÑÑÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ð¾ на FrozenTransactionId (замоÑожено) до Ñого, как бÑÐ´ÐµÑ Ð´Ð¾ÑÑигнÑÑа гÑаниÑа в два миллиаÑда ÑÑанзакÑий. ÐоÑле полÑÑÐµÐ½Ð¸Ñ ÑÑого оÑобенного XID Ð´Ð»Ñ Ð²ÑеÑ
обÑÑнÑÑ
ÑÑанзакÑий ÑÑи веÑÑии ÑÑÑок бÑдÑÑ Ð¾ÑноÑиÑÑÑÑ Â«Ðº пÑоÑломÑ», незавиÑимо Ð¾Ñ Ð·Ð°ÑикливаниÑ, и, Ñаким обÑазом, ÑÑи веÑÑии ÑÑÑок бÑдÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑÐ½Ñ Ð´Ð¾ моменÑа иÑ
ÑдалениÑ, когда Ð±Ñ ÑÑо ни пÑоизоÑло.
ÐÑимеÑание
РвеÑÑиÑÑ
PostgreSQL до 9.4 замоÑаживание бÑло Ñеализовано как замена XID Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑоки ÑпеÑиалÑнÑм иденÑиÑикаÑоÑом FrozenTransactionId, коÑоÑÑй можно бÑло ÑвидеÑÑ Ð² ÑиÑÑемной колонке xmin данной ÑÑÑоки. РновÑÑ
веÑÑиÑÑ
пÑоÑÑо ÑÑÑанавливаеÑÑÑ Ð±Ð¸ÑовÑй Ñлаг, а иÑÑ
однÑй xmin ÑÑÑоки ÑоÑ
ÑанÑеÑÑÑ Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ð³Ð¾ ÑаÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² бÑдÑÑем. Ðднако ÑÑÑоки Ñ xmin, ÑавнÑм FrozenTransactionId (2), можно по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð²ÑÑÑеÑиÑÑ Ð² базаÑ
даннÑÑ
, обновлÑннÑÑ
(Ñ Ð¿Ñименением pg_upgrade) Ñ Ð²ÐµÑÑий до 9.4.
Также ÑиÑÑемнÑе каÑалоги могÑÑ ÑодеÑжаÑÑ ÑÑÑоки Ñо знаÑением xmin, ÑавнÑм BootstrapTransactionId (1), показÑваÑÑим, ÑÑо они бÑли вÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð° пеÑвом ÑÑапе initdb. Ðак и FrozenTransactionId, ÑÑÐ¾Ñ ÑпеÑиалÑнÑй XID ÑÑиÑаеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÑаÑÑм, Ñем лÑбой обÑÑнÑй XID.
ÐаÑамеÑÑ vacuum_freeze_min_age опÑеделÑеÑ, наÑколÑко ÑÑаÑÑм должен ÑÑаÑÑ XID, ÑÑÐ¾Ð±Ñ ÑÑÑоки Ñ Ñаким XID бÑли замоÑоженÑ. УвелиÑение его знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð½ÐµÐ½Ñжной ÑабоÑÑ, еÑли ÑÑÑоки, коÑоÑÑе могли Ð±Ñ Ð±ÑÑÑ Ð·Ð°Ð¼Ð¾ÑÐ¾Ð¶ÐµÐ½Ñ Ð² ближайÑее вÑемÑ, бÑдÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ ÐµÑÑ Ñаз, а ÑменÑÑение пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑвелиÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва ÑÑанзакÑий, коÑоÑÑе могÑÑ Ð²ÑполниÑÑÑÑ, пÑежде Ñем поÑÑебÑеÑÑÑ Ð¾ÑеÑÐµÐ´Ð½Ð°Ñ Ð¾ÑиÑÑка ÑаблиÑÑ.
VACUUM опÑеделÑеÑ, какие ÑÑÑаниÑÑ ÑаблиÑÑ Ð½Ñжно ÑканиÑоваÑÑ, анализиÑÑÑ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи. ÐбÑÑно пÑи ÑÑой опеÑаÑии пÑопÑÑкаÑÑÑÑ ÑÑÑаниÑÑ, в коÑоÑÑÑ
Ð½ÐµÑ Ð¼ÑÑÑвÑÑ
веÑÑий ÑÑÑок, даже еÑли в ниÑ
могÑÑ Ð±ÑÑÑ Ð²ÐµÑÑии ÑÑÑок Ñо ÑÑаÑÑми XID. Таким обÑазом, обÑÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° VACUUM не бÑÐ´ÐµÑ Ð²Ñегда замоÑаживаÑÑ Ð²Ñе веÑÑии ÑÑÑок, имеÑÑиеÑÑ Ð² ÑаблиÑе. ÐеÑиодиÑеÑки VACUUM бÑÐ´ÐµÑ Ñакже пÑоизводиÑÑ Ð°Ð³ÑеÑÑивнÑÑ Ð¾ÑиÑÑкÑ, пÑопÑÑÐºÐ°Ñ ÑолÑко Ñе ÑÑÑаниÑÑ, коÑоÑÑе не ÑодеÑÐ¶Ð°Ñ Ð½Ð¸ мÑÑÑвÑÑ
ÑÑÑок, ни незамоÑоженнÑÑ
знаÑений XID или MXID. Ðогда VACUUM бÑÐ´ÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑо, завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð°ÑамеÑÑа vacuum_freeze_table_age: полноÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñе, но не полноÑÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑе ÑÑÑаниÑÑ Ð±ÑдÑÑ ÑканиÑоваÑÑÑÑ, еÑли ÑиÑло ÑÑанзакÑий, пÑоÑедÑиÑ
Ñо вÑемени поÑледнего Ñакого ÑканиÑованиÑ, оказÑваеÑÑÑ Ð±Ð¾Ð»ÑÑе Ñем vacuum_freeze_table_age минÑÑ vacuum_freeze_min_age. ÐÑли vacuum_freeze_table_age Ñавно 0, VACUUM бÑÐ´ÐµÑ Ð¿ÑименÑÑÑ ÑÑÑ Ð±Ð¾Ð»ÐµÐµ агÑеÑÑивнÑÑ ÑÑÑаÑÐµÐ³Ð¸Ñ Ð¿Ñи каждом ÑканиÑовании.
ÐакÑималÑное вÑемÑ, в ÑеÑение коÑоÑого ÑаблиÑа Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ñ
одиÑÑÑÑ Ð±ÐµÐ· оÑиÑÑки, ÑоÑÑавлÑÐµÑ Ð´Ð²Ð° миллиаÑда ÑÑанзакÑий минÑÑ Ð·Ð½Ð°Ñение vacuum_freeze_min_age Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа поÑледней агÑеÑÑивной оÑиÑÑки. ÐÑли Ð±Ñ ÑаблиÑа не подвеÑгалаÑÑ Ð¾ÑиÑÑке долÑÑе, бÑла Ð±Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° поÑеÑÑ Ð´Ð°Ð½Ð½ÑÑ
. ЧÑÐ¾Ð±Ñ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо ÑÑо не пÑоизойдÑÑ, Ð´Ð»Ñ Ð»Ñбой ÑаблиÑÑ, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ XID ÑÑаÑÑе, Ñем возÑаÑÑ, ÑказаннÑй в конÑигÑÑаÑионном паÑамеÑÑе autovacuum_freeze_max_age, вÑзÑваеÑÑÑ Ð°Ð²ÑооÑиÑÑка. (ÐÑо ÑлÑÑиÑÑÑ, даже еÑли авÑооÑиÑÑка оÑклÑÑена.)
ÐÑо ознаÑаеÑ, ÑÑо еÑли оÑиÑÑка ÑаблиÑÑ Ð½Ðµ вÑзÑваеÑÑÑ Ð´ÑÑгим ÑпоÑобом, Ñо авÑооÑиÑÑка Ð´Ð»Ñ Ð½ÐµÑ Ð±ÑÐ´ÐµÑ Ð²ÑзÑваÑÑÑÑ Ð¿ÑиблизиÑелÑно ÑеÑез каждÑе autovacuum_freeze_max_age минÑÑ vacuum_freeze_min_age ÑÑанзакÑий. ÐÐ»Ñ ÑаблиÑ, оÑиÑаемÑÑ
ÑегÑлÑÑно Ð´Ð»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва, ÑÑо неакÑÑалÑно. Ð Ñо же вÑÐµÐ¼Ñ ÑÑаÑиÑнÑе ÑаблиÑÑ (вклÑÑÐ°Ñ ÑаблиÑÑ, в коÑоÑÑÑ
даннÑе вÑÑавлÑÑÑÑÑ, но не изменÑÑÑÑÑ Ð¸ не ÑдалÑÑÑÑÑ) не нÑждаÑÑÑÑ Ð² оÑиÑÑке Ð´Ð»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва, поÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑиÑ
ÑÑаÑиÑнÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑвелиÑиÑÑ Ð¸Ð½ÑеÑвал Ð¼ÐµÐ¶Ð´Ñ Ð²ÑнÑжденнÑми запÑÑками авÑооÑиÑÑки. ÐÑевидно, ÑÑо можно ÑделаÑÑ, либо ÑвелиÑив autovacuum_freeze_max_age, либо ÑменÑÑив vacuum_freeze_min_age.
ФакÑиÑеÑкий макÑимÑм Ð´Ð»Ñ vacuum_freeze_table_age ÑоÑÑавлÑÐµÑ 0.95 * autovacuum_freeze_max_age; болÑÑее знаÑение бÑÐ´ÐµÑ Ð¾Ð³ÑаниÑено ÑÑим пÑеделом. ÐнаÑение, пÑевÑÑаÑÑее autovacuum_freeze_max_age, не имело Ð±Ñ ÑмÑÑла, поÑколÑÐºÑ Ð¿Ð¾ доÑÑижении ÑÑого знаÑÐµÐ½Ð¸Ñ Ð² лÑбом ÑлÑÑае вÑзÑвалаÑÑ Ð±Ñ Ð°Ð²ÑооÑиÑÑка Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð·Ð°ÑикливаниÑ, а коÑÑÑиÑÐ¸ÐµÐ½Ñ 0.95 оÑÑавлÑÐµÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ вÑемени Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM вÑÑÑнÑÑ Ð´Ð¾ Ñого, как ÑÑо пÑоизойдÑÑ. Ðак пÑавило, ÑÑÑановленное знаÑение vacuum_freeze_table_age должно бÑÑÑ Ð½ÐµÑколÑко менÑÑе autovacuum_freeze_max_age, ÑÑÐ¾Ð±Ñ Ð¾ÑÑавленнÑй пÑомежÑÑок бÑл доÑÑаÑоÑен Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð² ÑÑом окне VACUUM по ÑаÑпиÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ авÑооÑиÑÑки, ÑпÑавлÑемой обÑÑной акÑивноÑÑÑÑ Ð¾Ð¿ÐµÑаÑий ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ изменениÑ. ÐÑли ÑÑо знаÑение бÑÐ´ÐµÑ ÑлиÑком близким к макÑимÑмÑ, авÑооÑиÑÑка Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð·Ð°ÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ, даже еÑли ÑаблиÑа ÑолÑко ÑÑо бÑла оÑиÑена Ð´Ð»Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва, в Ñо же вÑÐµÐ¼Ñ Ð¿Ñи неболÑÑом знаÑении бÑÐ´ÐµÑ ÑаÑе пÑоизводиÑÑÑÑ Ð°Ð³ÑеÑÑÐ¸Ð²Ð½Ð°Ñ Ð¾ÑиÑÑка.
ÐдинÑÑвеннÑй минÑÑ ÑвелиÑÐµÐ½Ð¸Ñ autovacuum_freeze_max_age (и vacuum_freeze_table_age Ñ Ð½Ð¸Ð¼) заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо подкаÑалоги pg_xact и pg_commit_ts в клаÑÑеÑе баз даннÑÑ
бÑдÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð±Ð¾Ð»ÑÑе меÑÑа, поÑколÑÐºÑ Ð² ниÑ
нÑжно бÑÐ´ÐµÑ Ñ
ÑаниÑÑ ÑÑаÑÑÑ Ð¸ (пÑи вклÑÑÑнном track_commit_timestamp) вÑÐµÐ¼Ñ ÑикÑаÑии вÑеÑ
ÑÑанзакÑий вплоÑÑ Ð´Ð¾ гоÑизонÑа autovacuum_freeze_max_age. ÐÐ»Ñ ÑÑаÑÑÑа ÑикÑаÑии иÑполÑзÑеÑÑÑ Ð¿Ð¾ два биÑа на ÑÑанзакÑиÑ, поÑÑÐ¾Ð¼Ñ ÐµÑли в autovacuum_freeze_max_age ÑÑÑановлено макÑималÑно допÑÑÑимое знаÑение в два миллиаÑда, Ñо ÑÐ°Ð·Ð¼ÐµÑ pg_xact Ð¼Ð¾Ð¶ÐµÑ ÑоÑÑавиÑÑ Ð¿ÑимеÑно Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ Ð³Ð¸Ð³Ð°Ð±Ð°Ð¹Ñа, а pg_commit_ts пÑимеÑно 20 ÐÐ. ÐÑли по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¾Ð±ÑÑмом ваÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑÑÐ¾Ñ Ð¾Ð±ÑÑм незнаÑиÑелен, Ñогда ÑекомендÑеÑÑÑ ÑÑÑановиÑÑ Ð´Ð»Ñ autovacuum_freeze_max_age макÑималÑно допÑÑÑимое знаÑение. РпÑоÑивном ÑлÑÑае ÑÑÑановиÑе знаÑение ÑÑого паÑамеÑÑа в завиÑимоÑÑи Ð¾Ñ Ð¾Ð±ÑÑма, коÑоÑÑй Ð²Ñ Ð³Ð¾ÑÐ¾Ð²Ñ Ð²ÑделиÑÑ Ð´Ð»Ñ pg_xact и pg_commit_ts. (ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, 200 миллионам ÑÑанзакÑий, ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑиблизиÑелÑно 50 ÐРв pg_xact и около 2 ÐРв pg_commit_ts.)
УменÑÑение знаÑÐµÐ½Ð¸Ñ vacuum_freeze_min_age, Ñ Ð´ÑÑгой ÑÑоÑонÑ, ÑÑеваÑо Ñем, ÑÑо команда VACUUM Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑ Ð±ÐµÑполезнÑÑ ÑабоÑÑ: замоÑаживание веÑÑии ÑÑÑоки â пÑÑÑÐ°Ñ ÑÑаÑа вÑемени, еÑли ÑÑа ÑÑÑока бÑÐ´ÐµÑ Ð²ÑкоÑе изменена (и в ÑезÑлÑÑаÑе полÑÑÐ¸Ñ Ð½Ð¾Ð²Ñй XID). ÐоÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°Ñение ÑÑого паÑамеÑÑа должно бÑÑÑ Ð´Ð¾ÑÑаÑоÑно болÑÑим Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑÑÑоки не замоÑаживалиÑÑ, пока иÑ
поÑледÑÑÑее изменение не ÑÑÐ°Ð½ÐµÑ Ð¼Ð°Ð»Ð¾Ð²ÐµÑоÑÑнÑм.
ÐÐ»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·ÑаÑÑа ÑамÑÑ
ÑÑаÑÑÑ
знаÑений XID в базе даннÑÑ
команда VACUUM ÑоÑ
ÑанÑÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ XID в ÑиÑÑемнÑÑ
ÑаблиÑаÑ
pg_class и pg_database. Ð ÑаÑÑноÑÑи, ÑÑÐ¾Ð»Ð±ÐµÑ relfrozenxid в запиÑи Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнной ÑаблиÑÑ Ð² pg_class ÑодеÑÐ¶Ð¸Ñ Ð³ÑаниÑное знаÑение XID, Ñ ÐºÐ¾ÑоÑÑм в поÑледний Ñаз вÑполнÑлаÑÑ Ð°Ð³ÑеÑÑÐ¸Ð²Ð½Ð°Ñ Ð¾ÑиÑÑка (VACUUM) ÑÑой ÑаблиÑÑ. ÐÑе ÑÑÑоки, добавленнÑе ÑÑанзакÑиÑми Ñ Ð±Ð¾Ð»ÐµÐµ Ñанними XID, гаÑанÑиÑованно бÑдÑÑ Ð·Ð°Ð¼Ð¾ÑоженÑ. ÐналогиÑно ÑÑÐ¾Ð»Ð±ÐµÑ datfrozenxid в запиÑи Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
в pg_database пÑедÑÑавлÑÐµÑ Ð½Ð¸Ð¶Ð½ÑÑ Ð³ÑаниÑÑ Ð¾Ð±ÑÑнÑÑ
знаÑений XID, вÑÑÑеÑаÑÑиÑ
ÑÑ Ð² ÑÑой базе â он пÑоÑÑо Ñ
ÑÐ°Ð½Ð¸Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñное из вÑеÑ
знаÑений relfrozenxid Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ ÑÑой базÑ. ÐÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ñдобно полÑÑаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑакиÑ
запÑоÑов:
SELECT c.oid::regclass as table_name,
greatest(age(c.relfrozenxid),age(t.relfrozenxid)) as age
FROM pg_class c
LEFT JOIN pg_class t ON c.reltoastrelid = t.oid
WHERE c.relkind IN ('r', 'm');
SELECT datname, age(datfrozenxid) FROM pg_database; СÑÐ¾Ð»Ð±ÐµÑ age показÑÐ²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑанзакÑий Ð¾Ñ Ð³ÑаниÑного знаÑÐµÐ½Ð¸Ñ XID до XID ÑекÑÑей ÑÑанзакÑии.
ÐбÑÑно VACUUM ÑканиÑÑÐµÑ ÑолÑко Ñе ÑÑÑаниÑÑ, коÑоÑÑе изменÑлиÑÑ Ð¿Ð¾Ñле поÑледней оÑиÑÑки, однако relfrozenxid Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑÑÑ ÑолÑко пÑи ÑканиÑовании вÑеÑ
ÑÑÑÐ°Ð½Ð¸Ñ ÑаблиÑÑ, вклÑÑÐ°Ñ Ñе, ÑÑо могÑÑ ÑодеÑжаÑÑ Ð½ÐµÐ·Ð°Ð¼Ð¾ÑоженнÑе XID. ÐÑо пÑоиÑÑ
одиÑ, когда возÑаÑÑ relfrozenxid пÑевÑÑÐ°ÐµÑ vacuum_freeze_table_age ÑÑанзакÑий, когда VACUUM вÑзÑваеÑÑÑ Ñ Ñказанием FREEZE, или когда оказÑваеÑÑÑ, ÑÑо оÑиÑÑÐºÑ Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¼ÑÑÑвÑÑ
веÑÑий ÑÑÑок нÑжно пÑовеÑÑи во вÑеÑ
еÑÑ Ð½Ðµ замоÑоженнÑÑ
ÑÑÑаниÑаÑ
. Ðогда VACUUM ÑканиÑÑÐµÑ Ð² ÑаблиÑе каждÑÑ ÐµÑÑ Ð½Ðµ полноÑÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑÑ ÑÑÑаниÑÑ, знаÑение age(relfrozenxid) в ÑезÑлÑÑаÑе должно ÑÑаÑÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ болÑÑе, Ñем ÑÑÑановленное знаÑение vacuum_freeze_min_age (болÑÑе на ÑиÑло ÑÑанзакÑий, наÑаÑÑÑ
Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа запÑÑка VACUUM). ÐÑли по доÑÑижении autovacuum_freeze_max_age Ð´Ð»Ñ ÑаблиÑÑ Ð½Ð¸ ÑÐ°Ð·Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð²Ñполнена опеÑаÑÐ¸Ñ relfrozenxid, в ÑкоÑом вÑемени Ð´Ð»Ñ Ð½ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÑинÑдиÑелÑно запÑÑена авÑооÑиÑÑка.
ÐÑли по какой-либо пÑиÑине авÑооÑиÑÑка не Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑиÑÑиÑÑ ÑÑаÑÑе знаÑÐµÐ½Ð¸Ñ XID из ÑаблиÑÑ, ÑиÑÑема наÑÐ¸Ð½Ð°ÐµÑ Ð²ÑдаваÑÑ Ð¿ÑедÑпÑеждаÑÑие ÑообÑениÑ, подобнÑе пÑиведÑÐ½Ð½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ðµ, когда Ñамое ÑÑаÑое знаÑение XID в базе даннÑÑ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð² ÑоÑока Ð¼Ð¸Ð»Ð»Ð¸Ð¾Ð½Ð°Ñ ÑÑанзакÑий Ð¾Ñ ÑоÑки заÑикливаниÑ:
ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ: база даннÑÑ "mydb" должна бÑÑÑ Ð¾ÑиÑена (пÑеделÑное ÑиÑло ÑÑанзакÑий: 39985967) ÐÐÐСÐÐÐÐÐ: Ðо избежание оÑклÑÑÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²ÑполниÑе оÑиÑÑÐºÑ (VACUUM) вÑей базÑ.
(ÐÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеÑиÑÑ, как пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð¿Ð¾Ð´Ñказка, запÑÑÑив VACUUM вÑÑÑнÑÑ; однако ÑÑÑиÑе, ÑÑо вÑполнÑÑÑ VACUUM должен ÑÑпеÑполÑзоваÑелÑ, в пÑоÑивном ÑлÑÑае ÑÑа пÑоÑедÑÑа не ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабоÑаÑÑ ÑиÑÑемнÑе каÑалоги и, ÑледоваÑелÑно, не ÑÐ¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑ Ð·Ð½Ð°Ñение datfrozenxid Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.) ÐÑли ÑÑи пÑедÑпÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ, ÑиÑÑема оÑклÑÑиÑÑÑ Ð¸ не бÑÐ´ÐµÑ Ð½Ð°ÑинаÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
ÑÑанзакÑий, как ÑолÑко до ÑоÑки заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÑанеÑÑÑ Ð¼ÐµÐ½ÐµÐµ ÑÑÑÑ
миллионов ÑÑанзакÑий:
ÐШÐÐÐÐ: база даннÑÑ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð²Ð¾ избежание поÑеÑи даннÑÑ Ð¸Ð·-за заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð² ÐÐ "mydb" ÐÐÐСÐÐÐÐÐ: ÐÑÑановиÑе ÑпÑавлÑÑÑий пÑоÑеÑÑ (postmaster) и вÑполниÑе оÑиÑÑÐºÑ (VACUUM) Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² однополÑзоваÑелÑÑком Ñежиме.
Ð ÑÑом ÑоÑÑоÑнии лÑбÑе Ñже вÑполнÑемÑе ÑÑанзакÑии могÑÑ Ð¿ÑодолжаÑÑÑÑ, но могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¿ÑÑÐµÐ½Ñ Ð»Ð¸ÑÑ ÑÑанзакÑии ÑолÑко Ð´Ð»Ñ ÑÑениÑ. ÐпеÑаÑии, изменÑÑÑие запиÑи Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
или ÑдалÑÑÑие оÑноÑениÑ, завеÑÑаÑÑÑ Ð¾Ñибкой. ÐÐ¾Ð¼Ð°Ð½Ð´Ñ VACUUM по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ запÑÑкаÑÑ Ð² обÑÑном Ñежиме. ÐопÑеки ÑомÑ, ÑÑо говоÑиÑÑÑ Ð² подÑказке, Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи или даже нежелаÑелÑно оÑÑанавливаÑÑ ÑпÑавлÑÑÑий пÑоÑеÑÑ postmaster или вÑ
одиÑÑ Ð² однополÑзоваÑелÑÑкий Ñежим, ÑÑÐ¾Ð±Ñ Ð²Ð¾ÑÑÑановиÑÑ Ð½Ð¾ÑмалÑнÑÑ ÑабоÑÑ. ÐмеÑÑо ÑÑого вÑполниÑе ÑледÑÑÑие дейÑÑвиÑ:
- РазбеÑиÑе ÑÑаÑÑе подгоÑовленнÑе ÑÑанзакÑии. ÐÑ
можно найÑи, пÑовеÑив pg_prepared_xacts на налиÑие ÑÑÑок Ñ Ð±Ð¾Ð»ÑÑим знаÑением
age(transactionid). Такие ÑÑанзакÑии ÑледÑÐµÑ ÑикÑиÑоваÑÑ Ð¸Ð»Ð¸ оÑменÑÑÑ. - ÐавеÑÑиÑе длиÑелÑнÑе оÑкÑÑÑÑе ÑÑанзакÑии. ÐÑ
можно найÑи, пÑовеÑив pg_stat_activity на налиÑие ÑÑÑок Ñ Ð±Ð¾Ð»ÑÑим знаÑением
age(backend_xid)илиage(backend_xmin). Такие ÑÑанзакÑии ÑледÑÐµÑ ÑикÑиÑоваÑÑ Ð¸Ð»Ð¸ оÑменÑÑÑ, либо можно завеÑÑиÑÑ ÑÐµÐ°Ð½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑpg_terminate_backend. - УдалиÑе вÑе ÑÑаÑÑе ÑлоÑÑ ÑепликаÑии. ÐÑполÑзÑйÑе pg_stat_replication, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи ÑлоÑÑ Ñ Ð±Ð¾Ð»ÑÑим знаÑением
age(xmin)илиage(catalog_xmin). Ðо Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ Ñакие ÑлоÑÑ ÑоздавалиÑÑ Ð´Ð»Ñ ÑепликаÑии на ÑеÑвеÑÑ, коÑоÑÑÑ Ñже Ð½ÐµÑ Ð¸Ð»Ð¸ коÑоÑÑе давно не ÑабоÑаÑÑ. ÐÑли ÑдалиÑÑ ÑÐ»Ð¾Ñ Ð´Ð»Ñ ÑеÑвеÑа, коÑоÑÑй вÑÑ ÐµÑÑ ÑÑÑеÑÑвÑÐµÑ Ð¸ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº ÑÑÐ¾Ð¼Ñ ÑлоÑÑ, возможно, ÑÑÑ ÑÐµÐ¿Ð»Ð¸ÐºÑ Ð¿ÑидÑÑÑÑ Ð¿ÐµÑеÑоздаÑÑ. - ÐÑполниÑе
VACUUMв Ñелевой базе даннÑÑ . ÐÑоÑе вÑего иÑполÑзоваÑÑVACUUMÐ´Ð»Ñ Ð²Ñей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ЧÑÐ¾Ð±Ñ ÑокÑаÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð²ÑполнениÑ, Ñакже можно вÑÑÑнÑÑ Ð²ÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑVACUUMÐ´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ñ ÑамÑм ÑÑаÑÑмrelminxid. Ðе иÑполÑзÑйÑеVACUUM FULLв ÑÑом ÑÑенаÑии, поÑколÑÐºÑ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ ÑÑебÑеÑÑÑ XID и, ÑледоваÑелÑно, пÑоизойдÑÑ Ñбой, за иÑклÑÑением Ñежима ÑÑпеÑполÑзоваÑелÑ, где напÑоÑив бÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ XID и, Ñаким обÑазом, ÑвелиÑиÑÑÑ ÑиÑк заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ ÑÑÑÑÑика иденÑиÑикаÑоÑа ÑÑанзакÑии. Ðе иÑполÑзÑйÑеVACUUM FREEZE, поÑколÑÐºÑ Ð¿Ñи ÑÑом вÑполниÑÑÑ Ð¾Ð±ÑÑм ÑабоÑÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑе минималÑно Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð³Ð¾ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾ÑмалÑного ÑÑнкÑиониÑованиÑ. - ÐоÑле воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾ÑмалÑной ÑабоÑÑ Ð¿ÑовеÑÑÑе, ÑÑо авÑооÑиÑÑка пÑавилÑно наÑÑÑоена в Ñелевой базе даннÑÑ , ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿Ñоблем в бÑдÑÑем.
ÐÑимеÑание
Рболее ÑанниÑ
веÑÑиÑÑ
иногда бÑло необÑ
одимо оÑÑанавливаÑÑ Ð¿ÑоÑеÑÑ postmaster и вÑполнÑÑÑ VACUUM Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
в однополÑзоваÑелÑÑком Ñежиме. Ð ÑипиÑнÑÑ
ÑÑенаÑиÑÑ
в ÑÑом болÑÑе Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ возможноÑÑи ÑледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑÑиÑ
дейÑÑвий, поÑколÑÐºÑ Ð¾Ð½Ð¸ могÑÑ Ð¿ÑивеÑÑи к ÑÐ±Ð¾Ñ ÑиÑÑÐµÐ¼Ñ Ð¸ повÑÑаÑÑ ÑиÑки, Ñак как оÑклÑÑаÑÑ Ð·Ð°ÑиÑÑ Ð¾Ñ Ð·Ð°ÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа ÑÑанзакÑии, пÑедназнаÑеннÑÑ Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑеÑи даннÑÑ
. ÐÑполÑзоваÑÑ Ð¾Ð´Ð½Ð¾Ð¿Ð¾Ð»ÑзоваÑелÑÑкий Ñежим в ÑÑом ÑÑенаÑии ÑледÑÐµÑ Ð»Ð¸ÑÑ Ð¿Ñи желании вÑполниÑÑ TRUNCATE или DROP ненÑжнÑÑ
ÑаблиÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи вÑполнÑÑÑ Ð´Ð»Ñ Ð½Ð¸Ñ
VACUUM. РезеÑв в ÑÑи миллиона ÑÑанзакÑий позволÑÐµÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ ÑÑо ÑделаÑÑ. Ðа подÑобной инÑоÑмаÑией об иÑполÑзовании однополÑзоваÑелÑÑкого Ñежима обÑаÑиÑеÑÑ Ðº ÑÑÑаниÑе ÑпÑавки по postgres.
23.1.5.1. ÐÑлÑÑиÑÑанзакÑии и заÑикливание
ÐденÑиÑикаÑоÑÑ Ð¼ÑлÑÑиÑÑанзакÑий иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки блокиÑовки ÑÑÑок неÑколÑкими ÑÑанзакÑиÑми одновÑеменно. ÐоÑколÑÐºÑ Ð² заголовке ÑÑÑоки еÑÑÑ ÑолÑко огÑаниÑенное пÑоÑÑÑанÑÑво Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о блокиÑовкаÑ
, в нÑм ÑказÑваеÑÑÑ Â«Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑвенной ÑÑанзакÑии», или иденÑиÑикаÑÐ¾Ñ Ð¼ÑлÑÑиÑÑанзакÑии Ð´Ð»Ñ ÐºÑаÑкоÑÑи, когда ÑÑÑÐ¾ÐºÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно неÑколÑко ÑÑанзакÑий. ÐнÑоÑмаÑÐ¸Ñ Ð¾ Ñом, какие именно иденÑиÑикаÑоÑÑ ÑÑанзакÑий оÑноÑÑÑÑÑ Ðº опÑеделÑнной мÑлÑÑиÑÑанзакÑии, Ñ
ÑаниÑÑÑ Ð¾ÑделÑно в подкаÑалоге pg_multixact, а в поле xmax в заголовке ÑÑÑоки ÑоÑ
ÑанÑеÑÑÑ ÑолÑко иденÑиÑикаÑÐ¾Ñ Ð¼ÑлÑÑиÑÑанзакÑии. Ðак и иденÑиÑикаÑоÑÑ ÑÑанзакÑий, иденÑиÑикаÑоÑÑ Ð¼ÑлÑÑиÑÑанзакÑий иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð² виде 32-ÑазÑÑдного ÑÑÑÑÑика и Ñ
ÑанÑÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно, ÑÑо ÑÑебÑÐµÑ Ð°ÐºÐºÑÑаÑного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñ
возÑаÑÑом, оÑиÑÑкой Ñ
ÑанилиÑа и пÑедоÑвÑаÑением заÑикливаний. СÑÑеÑÑвÑÐµÑ Ð¾ÑделÑÐ½Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ, в коÑоÑой ÑодеÑжиÑÑÑ ÑпиÑок Ñленов каждой мÑлÑÑиÑÑанзакÑии, где ÑÑÑÑÑики Ñакже 32-биÑнÑе и ÑÑебÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾Ð³Ð¾ конÑÑолÑ. ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ ÑÑанзакÑий, ÑвÑзаннÑÑ
Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑом мÑлÑÑиÑÑанзакÑии, можно воÑполÑзоваÑÑÑÑ ÑиÑÑемной ÑÑнкÑией pg_get_multixact_members(), опиÑанной в ТаблиÑе 9.76.
Ðогда VACUUM ÑканиÑÑÐµÑ ÐºÐ°ÐºÑÑ-либо ÑаÑÑÑ ÑаблиÑÑ, каждÑй иденÑиÑикаÑÐ¾Ñ Ð¼ÑлÑÑиÑÑанзакÑии ÑÑаÑее Ñем vacuum_multixact_freeze_min_age заменÑеÑÑÑ Ð´ÑÑгим знаÑением, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÑлевÑм, иденÑиÑикаÑоÑом одиноÑной ÑÑанзакÑии или новÑм иденÑиÑикаÑоÑом мÑлÑÑиÑÑанзакÑии. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ Ð² pg_class.relminmxid Ñ
ÑаниÑÑÑ ÑамÑй ÑÑаÑÑй возможнÑй иденÑиÑикаÑÐ¾Ñ Ð¼ÑлÑÑиÑÑанзакÑии, вÑÑ ÐµÑÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвованнÑй в какой-либо ÑÑÑоке ÑÑой ÑаблиÑÑ. ÐÑли ÑÑо знаÑение оказÑваеÑÑÑ ÑÑаÑее vacuum_multixact_freeze_table_age, вÑполнÑеÑÑÑ Ð°Ð³ÑеÑÑÐ¸Ð²Ð½Ð°Ñ Ð¾ÑиÑÑка. Ðак ÑаÑÑказÑвалоÑÑ Ð² пÑедÑдÑÑем Ñазделе, пÑи агÑеÑÑивной оÑиÑÑке бÑдÑÑ Ð¿ÑопÑÑкаÑÑÑÑ ÑолÑко Ñе ÑÑÑаниÑÑ, коÑоÑÑе ÑÑиÑаÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑми. УзнаÑÑ Ð²Ð¾Ð·ÑаÑÑ pg_class.relminmxid можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии mxid_age().
ÐлагодаÑÑ Ð°Ð³ÑеÑÑивнÑм опеÑаÑиÑм VACUUM, вне завиÑимоÑÑи Ð¾Ñ Ð¸Ñ
пÑиÑинÑ, ÑÑо знаÑение Ð´Ð»Ñ ÑаблиÑÑ Ð±ÑÐ´ÐµÑ ÑвелиÑиваÑÑÑÑ. РконÑе конÑов, по меÑе ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑеÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð²Ð¾ вÑеÑ
базаÑ
даннÑÑ
и ÑвелиÑÐµÐ½Ð¸Ñ Ð¸Ñ
ÑÑаÑейÑиÑ
знаÑений мÑлÑÑиÑÑанзакÑий, инÑоÑмаÑÐ¸Ñ Ð¾ ÑÑаÑÑÑ
мÑлÑÑиÑÑанзакÑиÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдалена Ñ Ð´Ð¸Ñка.
РкаÑеÑÑве меÑÑ Ð·Ð°ÑиÑÑ, агÑеÑÑивное ÑканиÑование Ñ ÑелÑÑ Ð¾ÑиÑÑки бÑÐ´ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð´Ð»Ñ Ð»Ñбой ÑаблиÑÑ, возÑаÑÑ Ð¼ÑлÑÑиÑÑанзакÑий коÑоÑой болÑÑе, Ñем autovacuum_multixact_freeze_max_age. ÐгÑеÑÑивное ÑканиÑование Ñакже бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ ÑаÑе Ñо вÑеми ÑаблиÑами, наÑÐ¸Ð½Ð°Ñ Ñ Ð¸Ð¼ÐµÑÑÐ¸Ñ ÑÑаÑейÑие мÑлÑÑиÑÑанзакÑии, еÑли обÑÑм занÑÑой облаÑÑи Ñленов мÑлÑÑиÑÑанзакÑий пÑевÑÑÐ°ÐµÑ Ð¿ÑимеÑно 10 ÐÐ. ÐÑи два ваÑианÑа агÑеÑÑивного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÑÑеÑÑвлÑÑÑÑÑ, даже еÑли пÑоÑеÑÑ Ð°Ð²ÑооÑиÑÑки оÑклÑÑÑн. ÐблаÑÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ñленов мÑлÑÑиÑÑанзакÑий Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑÑÑ Ð´Ð¾ пÑимеÑно 20 ÐÐ, пÑежде Ñем наÑнÑÑÑÑ Ð·Ð°Ñикливание.
Ðак и в ÑлÑÑае Ñ XID, еÑли пÑи авÑооÑиÑÑке не ÑдаÑÑÑÑ ÑдалиÑÑ ÑÑаÑÑе MXID из ÑаблиÑÑ, ÑиÑÑема наÑÐ½ÐµÑ Ð²ÑдаваÑÑ ÑообÑÐµÐ½Ð¸Ñ Ñ Ð¿ÑедÑпÑеждением, когда ÑамÑе ÑÑаÑÑе MXID Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð¾ÑÑигнÑÑ ÑоÑока миллионов ÑÑанзакÑий Ð¾Ñ ÑоÑки заÑикливаниÑ. Ð Ñнова, как и в ÑлÑÑае Ñ XID, еÑли ÑÑи пÑедÑпÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ, ÑиÑÑема пеÑеÑÑÐ°Ð½ÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð½Ð¾Ð²Ñе MXID, еÑли до ÑоÑки заÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÑанеÑÑÑ Ð¼ÐµÐ½ÐµÐµ ÑÑÑÑ Ð¼Ð¸Ð»Ð»Ð¸Ð¾Ð½Ð¾Ð² ÑÑанзакÑий.
Ðогда заканÑиваÑÑÑÑ MXID, ноÑмалÑнÑÑ ÑабоÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ воÑÑÑановиÑÑ Ð¿ÑакÑиÑеÑки Ñак же, как когда заканÑиваÑÑÑÑ XID. ÐÑполниÑе Ñе же дейÑÑвиÑ, ÑÑо и в пÑедÑдÑÑем Ñазделе, но Ñо ÑледÑÑÑими оÑлиÑиÑми:
- ÐапÑÑеннÑе ÑÑанзакÑии и подгоÑовленнÑе ÑÑанзакÑии можно игноÑиÑоваÑÑ, еÑли они ÑоÑно не могÑÑ Ð¿Ð¾ÑвиÑÑÑÑ Ð² мÑлÑÑиÑÑанзакÑии.
- ÐнÑоÑмаÑÐ¸Ñ Ð¾ MXID не оÑобÑажаеÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð² ÑиÑÑемнÑÑ
пÑедÑÑавлениÑÑ
, ÑакиÑ
как
pg_stat_activity, однако поиÑк ÑÑаÑÑÑ XID по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑÑÑекÑивно опÑеделиÑÑ, какие ÑÑанзакÑии вÑзÑваÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð·Ð°Ñикливанием MXID. - Ðогда заканÑиваÑÑÑÑ XID, блокиÑÑÑÑÑÑ Ð²Ñе пиÑÑÑие ÑÑанзакÑии, а когда заканÑиваÑÑÑÑ MXID, блокиÑÑеÑÑÑ ÑолÑко подмножеÑÑво пиÑÑÑÐ¸Ñ ÑÑанзакÑий, а именно Ñе, коÑоÑÑе вклÑÑаÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки ÑÑÑок, ÑÑебÑÑÑие MXID.
23.1.6. Ðемон авÑооÑиÑÑки
Ð Postgres Pro имееÑÑÑ Ð½Ðµ обÑзаÑелÑнаÑ, но наÑÑоÑÑелÑно ÑекомендÑÐµÐ¼Ð°Ñ Ðº иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑиÑ, назÑÐ²Ð°ÐµÐ¼Ð°Ñ Ð°Ð²ÑооÑиÑÑкой, пÑедназнаÑение коÑоÑой â авÑомаÑизиÑоваÑÑ Ð²Ñполнение команд VACUUM и ANALYZE. Ðогда авÑооÑиÑÑка вклÑÑена, она пÑовеÑÑеÑ, в какиÑ
ÑаблиÑаÑ
бÑло вÑÑавлено, изменено или Ñдалено много ÑÑÑок. ÐÑи ÑÑиÑ
пÑовеÑкаÑ
иÑполÑзÑÑÑÑÑ ÑÑедÑÑва ÑбоÑа ÑÑаÑиÑÑики; поÑÑÐ¾Ð¼Ñ Ð°Ð²ÑооÑиÑÑка бÑÐ´ÐµÑ ÑабоÑаÑÑ, ÑолÑко еÑли паÑамеÑÑ track_counts Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true. РконÑигÑÑаÑии по ÑмолÑÐ°Ð½Ð¸Ñ Ð°Ð²ÑооÑиÑÑка вклÑÑена и ÑооÑвеÑÑÑвÑÑÑие паÑамеÑÑÑ Ð¸Ð¼ÐµÑÑ Ð¿Ð¾Ð´Ñ
одÑÑие знаÑениÑ.
«Ðемон авÑооÑиÑÑки» на Ñамом деле ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· неÑколÑкиÑ
пÑоÑеÑÑов. СÑÑеÑÑвÑÐµÑ Ð¿Ð¾ÑÑоÑннÑй ÑоновÑй пÑоÑеÑÑ, назÑваемÑй пÑоÑеÑÑом запÑÑка авÑооÑиÑÑки, коÑоÑÑй оÑвеÑÐ°ÐµÑ Ð·Ð° запÑÑк ÑабоÑиÑ
пÑоÑеÑÑов авÑооÑиÑÑки Ð´Ð»Ñ Ð²ÑеÑ
баз даннÑÑ
. ÐÑÐ¾Ñ ÐºÐ¾Ð½ÑÑолиÑÑÑÑий пÑоÑеÑÑ ÑаÑпÑеделÑÐµÑ ÑабоÑÑ Ð¿Ð¾ вÑемени, ÑÑаÑаÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ÑабоÑий пÑоÑеÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
каждÑе autovacuum_naptime ÑекÑнд. (СледоваÑелÑно, еÑли вÑего имееÑÑÑ N баз даннÑÑ
, новÑй ÑабоÑий пÑоÑеÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ ÐºÐ°Ð¶Ð´Ñе autovacuum_naptime/N ÑекÑнд.) ÐдновÑеменно могÑÑ Ð²ÑполнÑÑÑÑÑ Ð´Ð¾ autovacuum_max_workers ÑабоÑиÑ
пÑоÑеÑÑов. ÐÑли ÑиÑло баз даннÑÑ
, ÑÑебÑÑÑиÑ
обÑабоÑки, пÑевÑÑÐ°ÐµÑ autovacuum_max_workers, обÑабоÑка ÑледÑÑÑей Ð±Ð°Ð·Ñ Ð½Ð°ÑинаеÑÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾ завеÑÑении пеÑвого ÑабоÑего пÑоÑеÑÑа. ÐаждÑй ÑабоÑий пÑоÑеÑÑ Ð¿ÑовеÑÑÐµÑ Ð²Ñе ÑаблиÑÑ Ð² Ñвоей базе даннÑÑ
и в ÑлÑÑае необÑ
одимоÑÑи вÑполнÑÐµÑ VACUUM и/или ANALYZE. ÐÐ»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑвий ÑабоÑиÑ
пÑоÑеÑÑов можно ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ log_autovacuum_min_duration.
ÐÑли в ÑеÑение коÑоÑкого пÑомежÑÑка вÑемени поÑÑебноÑÑÑ Ð² оÑиÑÑке Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ ÑаблиÑ, вÑе ÑабоÑие пÑоÑеÑÑÑ Ð°Ð²ÑооÑиÑÑки могÑÑ Ð¿ÑодолжиÑелÑное вÑÐµÐ¼Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑÑÑ Ð¾ÑиÑÑкой ÑолÑко ÑÑÐ¸Ñ ÑаблиÑ. Ð ÑезÑлÑÑаÑе дÑÑгие ÑаблиÑÑ Ð¸ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð±ÑдÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð¾ÑиÑÑки, пока не поÑвиÑÑÑ ÑвободнÑй ÑабоÑий пÑоÑеÑÑ. ЧиÑло ÑабоÑÐ¸Ñ Ð¿ÑоÑеÑÑов Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ð±Ð°Ð·Ñ Ð½Ðµ огÑаниÑиваеÑÑÑ, пÑи ÑÑом каждÑй пÑоÑеÑÑ ÑÑаÑаеÑÑÑ Ð½Ðµ повÑоÑÑÑÑ ÑабоÑÑ, ÑолÑко ÑÑо вÑполненнÑÑ Ð´ÑÑгими. ÐамеÑÑÑе, ÑÑо в огÑаниÑениÑÑ max_connections или superuser_reserved_connections ÑиÑло вÑполнÑÑÑÐ¸Ñ ÑÑ ÑабоÑÐ¸Ñ Ð¿ÑоÑеÑÑов не ÑÑиÑÑваеÑÑÑ.
ÐÐ»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ñ relfrozenxid, ÑÑÑаÑевÑим более Ñем на autovacuum_freeze_max_age ÑÑанзакÑий, оÑиÑÑка вÑполнÑеÑÑÑ Ð²Ñегда (ÑÑо Ñакже пÑименимо к ÑаблиÑам, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
макÑималÑнÑй поÑог замоÑозки бÑл изменÑн ÑеÑез паÑамеÑÑÑ Ñ
ÑанениÑ; Ñм. ниже). РпÑоÑивном ÑлÑÑае оÑиÑÑка ÑаблиÑÑ Ð¿ÑоизводиÑÑÑ, еÑли колиÑеÑÑво коÑÑежей, ÑÑÑаÑевÑиÑ
Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа поÑледнего вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ VACUUM, пÑевÑÑÐ°ÐµÑ Â«Ð¿Ð¾Ñоговое знаÑение оÑиÑÑки». ÐоÑоговое знаÑение оÑиÑÑки опÑеделÑеÑÑÑ ÐºÐ°Ðº:
поÑог оÑиÑÑки = базовÑй поÑог оÑиÑÑки + коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð´Ð¾Ð»Ð¸ Ð´Ð»Ñ Ð¾ÑиÑÑки * колиÑеÑÑво коÑÑежей
где базовÑй поÑог оÑиÑÑки â знаÑение autovacuum_vacuum_threshold, коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð´Ð¾Ð»Ð¸ â autovacuum_vacuum_scale_factor, а колиÑеÑÑво коÑÑежей â pg_class.reltuples.
ТаблиÑа Ñакже оÑиÑаеÑÑÑ, еÑли ÑиÑло коÑÑежей, добавленнÑÑ Ð¿Ð¾Ñле пÑедÑдÑÑей оÑиÑÑки, пÑевÑÑÐ°ÐµÑ ÑÑÑановленнÑй поÑог оÑиÑÑки пÑи добавлении, коÑоÑÑй опÑеделÑеÑÑÑ Ñак:
поÑог оÑиÑÑки пÑи добавлении = базовÑй поÑог оÑиÑÑки пÑи добавлении + коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð´Ð¾Ð»Ð¸ Ð´Ð»Ñ Ð¾ÑиÑÑки пÑи добавлении * колиÑеÑÑво коÑÑежей
ÐазовÑй поÑог оÑиÑÑки пÑи добавлении и коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð´Ð¾Ð»Ð¸ Ð´Ð»Ñ Ð¾ÑиÑÑки пÑи добавлении опÑеделÑÑÑÑÑ Ð¿Ð°ÑамеÑÑами autovacuum_vacuum_insert_threshold и autovacuum_vacuum_insert_scale_factor, ÑооÑвеÑÑÑвенно. ÐÑи Ñакой оÑиÑÑке ÑаÑÑÑ ÑÑÑÐ°Ð½Ð¸Ñ ÑаблиÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð¼ÐµÑÐµÐ½Ñ ÐºÐ°Ðº полноÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñе и могÑÑ Ð±ÑÑÑ Ñакже замоÑÐ¾Ð¶ÐµÐ½Ñ ÐºÐ¾ÑÑежи, ÑÑо ÑменÑÑÐ¸Ñ Ð¾Ð±ÑÑм ÑабоÑÑ, коÑоÑÑÑ Ð½Ñжно бÑÐ´ÐµÑ Ð¿ÑоделаÑÑ Ð¿Ñи ÑледÑÑÑей оÑиÑÑке. ÐÐ»Ñ ÑаблиÑ, в коÑоÑÑÑ
вÑполнÑÑÑÑÑ Ð² оÑновном опеÑаÑии INSERT и пÑакÑиÑеÑки не вÑполнÑÑÑÑÑ UPDATE/DELETE, Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑмÑÑл ÑменÑÑиÑÑ Ð¿Ð°ÑамеÑÑ ÑаблиÑÑ autovacuum_freeze_min_age, Ñак как ÑÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð·Ð°Ð¼Ð¾ÑаживаÑÑ ÐºÐ¾ÑÑежи ÑанÑÑе. ÐолиÑеÑÑво ÑÑÑаÑевÑиÑ
и добавленнÑÑ
коÑÑежей полÑÑаеÑÑÑ Ð¾Ñ ÑбоÑÑика ÑÑаÑиÑÑики; оно пÑедÑÑавлÑÐµÑ Ñобой пÑиблизиÑелÑное ÑиÑло, обновлÑемое поÑле каждой опеÑаÑии UPDATE, DELETE и INSERT. (ТоÑноÑÑÑ Ð½Ðµ гаÑанÑиÑÑеÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо пÑи болÑÑой нагÑÑзке ÑаÑÑÑ Ð¸Ð½ÑоÑмаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾ÑеÑÑна.) ÐÑли знаÑение relfrozenxid Ð´Ð»Ñ ÑаблиÑÑ ÑÑаÑее vacuum_freeze_table_age ÑÑанзакÑий, пÑоизводиÑÑÑ Ð°Ð³ÑеÑÑÐ¸Ð²Ð½Ð°Ñ Ð¾ÑиÑÑка Ñ ÑелÑÑ Ð·Ð°Ð¼Ð¾ÑозиÑÑ ÑÑаÑÑе веÑÑии ÑÑÑок и ÑвелиÑиÑÑ Ð·Ð½Ð°Ñение relfrozenxid; в пÑоÑивном ÑлÑÑае ÑканиÑÑÑÑÑÑ ÑолÑко ÑÑÑаниÑÑ, изменÑннÑе поÑле поÑледней оÑиÑÑки.
ÐÐ»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑбоÑа ÑÑаÑиÑÑики иÑполÑзÑеÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñное ÑÑловие: поÑоговое знаÑение, опÑеделÑемое как:
поÑог анализа = базовÑй поÑог анализа + коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð´Ð¾Ð»Ð¸ Ð´Ð»Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð° * колиÑеÑÑво коÑÑежей
ÑÑавниваеÑÑÑ Ñ Ð¾Ð±Ñим колиÑеÑÑвом коÑÑежей добавленнÑÑ
, изменÑннÑÑ
или ÑдалÑннÑÑ
поÑле поÑледнего вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ANALYZE.
Ð ÑекÑиониÑованнÑÑ
ÑаблиÑаÑ
коÑÑежи не Ñ
ÑанÑÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸, ÑледоваÑелÑно, не обÑабаÑÑваÑÑÑÑ Ð°Ð²ÑооÑиÑÑкой. (ÐвÑооÑиÑÑка обÑабаÑÑÐ²Ð°ÐµÑ ÑекÑии ÑаблиÑÑ Ñак же, как и дÑÑгие ÑаблиÑÑ.) Ð ÑожалениÑ, ÑÑо ознаÑаеÑ, ÑÑо авÑооÑиÑÑка не запÑÑÐºÐ°ÐµÑ ANALYZE Ð´Ð»Ñ ÑекÑиониÑованнÑÑ
ÑаблиÑ, в ÑезÑлÑÑаÑе Ñего ÑоздаÑÑÑÑ Ð½ÐµÐ¾Ð¿ÑималÑнÑе Ð¿Ð»Ð°Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов, ÑÑÑлаÑÑиÑ
ÑÑ Ð½Ð° ÑÑаÑиÑÑÐ¸ÐºÑ ÑекÑиониÑованнÑÑ
ÑаблиÑ. ÐÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обойÑи, вÑÑÑнÑÑ Ð·Ð°Ð¿ÑÑÐºÐ°Ñ ANALYZE Ð´Ð»Ñ ÑекÑиониÑованнÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ñи иÑ
пеÑвом заполнении, а Ñакже вÑÑкий Ñаз, когда ÑаÑпÑеделение даннÑÑ
в иÑ
ÑекÑиÑÑ
ÑÑÑеÑÑвенно менÑеÑÑÑ.
ÐвÑооÑиÑÑка не обÑабаÑÑÐ²Ð°ÐµÑ Ð²ÑеменнÑе ÑаблиÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¾ÑиÑÑÐºÑ Ð¸ ÑÐ±Ð¾Ñ ÑÑаÑиÑÑики в Ð½Ð¸Ñ Ð½Ñжно пÑоизводиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SQL-команд в обÑÑном ÑеанÑе.
ÐÑполÑзÑемÑе по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ÑоговÑе знаÑÐµÐ½Ð¸Ñ Ð¸ коÑÑÑиÑиенÑÑ Ð±ÐµÑÑÑÑÑ Ð¸Ð· postgresql.conf, однако иÑ
(и многие дÑÑгие паÑамеÑÑÑ, ÑпÑавлÑÑÑие авÑооÑиÑÑкой) можно пеÑеопÑеделиÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ; за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐаÑамеÑÑÑ Ñ
ÑанениÑ. ÐÑли какие-либо знаÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ ÑеÑез паÑамеÑÑÑ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑаблиÑÑ, пÑи обÑабоÑке ÑÑой ÑаблиÑÑ Ð´ÐµÐ¹ÑÑвÑÑÑ Ð¾Ð½Ð¸, а в пÑоÑивном ÑлÑÑае â глобалÑнÑе паÑамеÑÑÑ. Ðа более подÑобной инÑоÑмаÑией о глобалÑнÑÑ
паÑамеÑÑаÑ
обÑаÑиÑеÑÑ Ðº РазделÑ 18.10.
Ðогда вÑполнÑÑÑÑÑ Ð½ÐµÑколÑко ÑабоÑиÑ
пÑоÑеÑÑов, паÑамеÑÑÑ Ð·Ð°Ð´ÐµÑжки авÑооÑиÑÑки по ÑÑоимоÑÑи (Ñм. ÐодÑаздел 18.4.4) «ÑаÑпÑеделÑÑÑÑÑ» Ð¼ÐµÐ¶Ð´Ñ Ð²Ñеми ÑÑими пÑоÑеÑÑами, Ñак ÑÑо обÑее воздейÑÑвие на ÑиÑÑÐµÐ¼Ñ Ð¾ÑÑаÑÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ñм, незавиÑимо Ð¾Ñ Ð¸Ñ
ÑиÑла. Ðднако ÑÑÐ¾Ñ Ð°Ð»Ð³Ð¾ÑиÑм ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð³ÑÑзки не ÑÑиÑÑÐ²Ð°ÐµÑ Ð¿ÑоÑеÑÑÑ, обÑабаÑÑваÑÑие ÑаблиÑÑ Ñ Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑалÑнÑми знаÑениÑми паÑамеÑÑов Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ autovacuum_vacuum_cost_delay и autovacuum_vacuum_cost_limit.
РабоÑие пÑоÑеÑÑÑ Ð°Ð²ÑооÑиÑÑки обÑÑно не меÑаÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´ÑÑгиÑ
команд. ÐÑли какой-либо пÑоÑеÑÑ Ð¿Ð¾Ð¿ÑÑаеÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ, конÑликÑÑÑÑÑÑ Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовкой SHARE UPDATE EXCLUSIVE, коÑоÑÐ°Ñ ÑдеÑживаеÑÑÑ Ð² Ñ
оде авÑооÑиÑÑки, авÑооÑиÑÑка пÑеÑвÑÑÑÑ Ð¸ пÑоÑеÑÑ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð½ÑжнÑÑ ÐµÐ¼Ñ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ. ÐонÑликÑÑÑÑие ÑÐµÐ¶Ð¸Ð¼Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовок оÑмеÑÐµÐ½Ñ Ð² ТаблиÑе 13.2. Ðднако еÑли авÑооÑиÑÑка вÑполнÑеÑÑÑ Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð·Ð°ÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов ÑÑанзакÑий (Ñ. е. опиÑание запÑоÑа авÑооÑиÑÑки в пÑедÑÑавлении pg_stat_activity заканÑиваеÑÑÑ Ð½Ð° (to prevent wraparound)), авÑооÑиÑÑка не пÑеÑÑваеÑÑÑ Ð±ÐµÐ· ÑÑÑного вмеÑаÑелÑÑÑва.
ÐÑедÑпÑеждение
ÐÑи ÑаÑÑом вÑполнении ÑакиÑ
команд, как ANALYZE, коÑоÑÑе заÑÑебÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки, конÑликÑÑÑÑие Ñ SHARE UPDATE EXCLUSIVE, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑÑÑ Ñак, ÑÑо авÑооÑиÑÑка не бÑÐ´ÐµÑ ÑÑпеваÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑÑÑ Ð² пÑинÑипе.