F.2. amcheck
ÐодÑÐ»Ñ amcheck пÑедоÑÑавлÑÐµÑ ÑÑнкÑии, позволÑÑÑие пÑовеÑÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑелоÑÑноÑÑÑ ÑÑÑÑкÑÑÑÑ Ð¾ÑноÑений. ÐÑли наÑÑÑÐµÐ½Ð¸Ñ ÑÑÑÑкÑÑÑÑ Ð½Ðµ обнаÑÑживаÑÑÑÑ, ÑÑи ÑÑнкÑии оÑÑабаÑÑваÑÑ Ð±ÐµÐ· оÑибок.
ÐÑи ÑÑнкÑии пÑовеÑÑÑÑ ÑазлиÑнÑе инваÑианÑÑ Ð² ÑÑÑÑкÑÑÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑннÑÑ
оÑноÑений. ÐÑавилÑноÑÑÑ ÑабоÑÑ ÑÑнкÑий меÑодов доÑÑÑпа, ÑÑоÑÑиÑ
за ÑканиÑованием индекÑа и дÑÑгими важнÑми опеÑаÑиÑми, завиÑÐ¸Ñ Ð¾Ñ Ð²Ñегда ÑоблÑдаемÑÑ
инваÑианÑов. ÐапÑимеÑ, опÑеделÑннÑе ÑÑнкÑии пÑовеÑÑÑÑ, помимо оÑÑалÑнÑÑ
веÑей, ÑÑо вÑе ÑÑÑаниÑÑ B-деÑева ÑодеÑÐ¶Ð°Ñ ÑлеменÑÑ Ð² «логиÑеÑком» поÑÑдке (напÑимеÑ, индекÑ-B-деÑево, поÑÑÑоеннÑй по ÑÑолбÑÑ text, должен ÑодеÑжаÑÑ ÐºÐ¾ÑÑежи, ÑпоÑÑдоÑеннÑе в лекÑиÑеÑком поÑÑдке Ñ ÑÑÑÑом пÑавила ÑоÑÑиÑовки). ÐÑли ÑÑÐ¾Ñ ÐºÐ¾Ð½ÐºÑеÑнÑй инваÑÐ¸Ð°Ð½Ñ ÐºÐ°ÐºÐ¸Ð¼-Ñо обÑазом наÑÑÑаеÑÑÑ, ÑледÑÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, ÑÑо бинаÑнÑй поиÑк на заÑÑонÑÑой ÑÑÑаниÑе введÑÑ Ð² заблÑждение пÑоÑедÑÑÑ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа, ÑÑо пÑиведÑÑ Ðº невеÑнÑм ÑезÑлÑÑаÑам запÑоÑов SQL.
ÐÑовеÑка вÑполнÑеÑÑÑ Ñеми же пÑоÑедÑÑами, ÑÑо иÑполÑзÑÑÑÑÑ Ð¿Ñи ÑканиÑовании индекÑа, и ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ¾Ð´ полÑзоваÑелÑÑкого клаÑÑа опеÑаÑоÑов. ÐапÑимеÑ, пÑовеÑка индекÑа-B-деÑева задейÑÑвÑÐµÑ ÑÑавнениÑ, вÑполнÑемÑе одной или неÑколÑкими опоÑнÑми ÑÑнкÑиÑми B-деÑева под номеÑом 1. ÐодÑобнее опоÑнÑе ÑÑнкÑии клаÑÑа опеÑаÑоÑов опиÑÑваÑÑÑÑ Ð² ÐодÑазделе 36.15.3.
ФÑнкÑии amcheck могÑÑ Ð²ÑполнÑÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
F.2.1. ФÑнкÑии
-
bt_index_check(index regclass, heapallindexed boolean) returns void bt_index_checkпÑовеÑÑеÑ, ÑоблÑдаÑÑÑÑ Ð»Ð¸ в Ñелевом индекÑе-B-деÑеве ÑазлиÑнÑе инваÑианÑÑ. ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:test=# SELECT bt_index_check(index => c.oid, heapallindexed => i.indisunique), c.relname, c.relpages FROM pg_index i JOIN pg_opclass op ON i.indclass[0] = op.oid JOIN pg_am am ON op.opcmethod = am.oid JOIN pg_class c ON i.indexrelid = c.oid JOIN pg_namespace n ON c.relnamespace = n.oid WHERE am.amname = 'btree' AND n.nspname = 'pg_catalog' -- Ðе пÑовеÑÑÑÑ Ð²ÑеменнÑе ÑаблиÑÑ (они могÑÑ Ð¾ÑноÑиÑÑÑÑ Ðº дÑÑгим ÑеанÑам): AND c.relpersistence != 't' -- ФÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð±ÐµÐ· ÑÑÐ¸Ñ ÑÑловий: AND c.relkind = 'i' AND i.indisready AND i.indisvalid ORDER BY c.relpages DESC LIMIT 10; bt_index_check | relname | relpages ----------------+---------------------------------+---------- | pg_depend_reference_index | 43 | pg_depend_depender_index | 40 | pg_proc_proname_args_nsp_index | 31 | pg_description_o_c_o_index | 21 | pg_attribute_relid_attnam_index | 14 | pg_proc_oid_index | 10 | pg_attribute_relid_attnum_index | 9 | pg_amproc_fam_proc_index | 5 | pg_amop_opr_fam_index | 5 | pg_amop_fam_strat_index | 5 (10 rows)ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑиÑÑÐµÑ ÑÐµÐ°Ð½Ñ Ð¿ÑовеÑки 10 ÑамÑÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов ÑиÑÑемнÑÑ ÐºÐ°Ñалогов в базе даннÑÑ Â«test». ÐÑовеÑка вÑÐµÑ ÐºÐ¾ÑÑежей кÑÑи на пÑÐµÐ´Ð¼ÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÐºÐ¾ÑÑежей индекÑа запÑаÑиваеÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÐµÑ Ð¸Ð· ÑÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов, коÑоÑÑе ÑвлÑÑÑÑÑ ÑникалÑнÑми. Так как оÑибки не бÑло, вÑе пÑовеÑеннÑе индекÑÑ Ð¿ÑедÑÑавлÑÑÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑки ÑелоÑÑнÑми. ÐÑÑеÑÑвенно, ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ легко измениÑÑ, ÑÑÐ¾Ð±Ñ ÑÑнкÑиÑ
bt_index_checkвÑзÑвалаÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑов в базе, коÑоÑÑе поддеÑживаÑÑ ÑÑÑ Ð¿ÑовеÑкÑ.ФÑнкÑиÑ
bt_index_checkзапÑаÑÐ¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑовкÑAccessShareLockÐ´Ð»Ñ Ñелевого индекÑа и оÑноÑениÑ, коÑоÑÐ¾Ð¼Ñ Ð¾Ð½ пÑинадлежиÑ. ÐÑо ÑÐ¾Ñ Ð¶Ðµ Ñежим блокиÑовки, ÑÑо запÑаÑиваеÑÑÑ Ð´Ð»Ñ Ð¾ÑноÑений обÑÑнÑми опеÑаÑоÑамиSELECT.bt_index_checkне пÑовеÑÑÐµÑ Ð¸Ð½Ð²Ð°ÑианÑÑ, ÑÑÑеÑÑвÑÑÑие в иеÑаÑÑ Ð¸Ð¸ поÑомок/ÑодиÑелÑ, но пÑовеÑÑÐµÑ Ð¿ÑедÑÑавление вÑÐµÑ ÐºÐ¾ÑÑежей кÑÑи в индекÑе в виде индекÑнÑÑ ÐºÐ¾ÑÑежей, когда паÑамеÑÑheapallindexedÑавенtrue. Ðогда в ÑабоÑаÑÑей пÑоизводÑÑвенной ÑÑеде ÑÑебÑеÑÑÑ ÑегÑлÑÑÐ½Ð°Ñ Ð»ÑÐ³ÐºÐ°Ñ Ð¿ÑовеÑка на налиÑие наÑÑÑений, иÑполÑзованиеbt_index_checkÑаÑÑо бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑим компÑомиÑÑом Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñой пÑовеÑки и минимизаÑией влиÑÐ½Ð¸Ñ Ð½Ð° пÑоизводиÑелÑноÑÑÑ Ð¸ доÑÑÑпноÑÑÑ Ð¿ÑиложениÑ.-
bt_index_parent_check(index regclass, heapallindexed boolean) returns void ФÑнкÑиÑ
bt_index_parent_checkпÑовеÑÑеÑ, ÑоблÑдаÑÑÑÑ Ð»Ð¸ в Ñелевом обÑекÑе, индекÑе-B-деÑеве, ÑазлиÑнÑе инваÑианÑÑ. ÐÑоме Ñого, еÑли аÑгÑменÑheapallindexedÑавенtrue, ÑÑа ÑÑнкÑÐ¸Ñ Ð¿ÑовеÑÑÐµÑ Ð½Ð°Ð»Ð¸Ñие в индекÑе вÑÐµÑ ÐºÐ¾ÑÑежей из кÑÑи, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð² него попаÑÑÑ, и оÑÑÑÑÑÑвие поÑеÑÑннÑÑ ÑвÑзей в ÑÑÑÑкÑÑÑе индекÑа. ÐÑовеÑки, коÑоÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизводиÑÑbt_index_parent_check, вклÑÑаÑÑ Ð² ÑÐµÐ±Ñ Ð²Ñе пÑовеÑки, вÑполнÑемÑе ÑÑнкÑиейbt_index_check. ФÑнкÑиÑbt_index_parent_checkможно ÑÑиÑаÑÑ Ð±Ð¾Ð»ÐµÐµ полноÑеннÑм ваÑианÑомbt_index_check: в оÑлиÑие оÑbt_index_check,bt_index_parent_checkпÑовеÑÑÐµÑ ÐµÑÑ Ð¸ инваÑианÑÑ, ÑÑÑеÑÑвÑÑÑие в иеÑаÑÑ Ð¸Ð¸ ÑодиÑелÑ/поÑомок.bt_index_parent_checkÑледÑÐµÑ Ð¾Ð±ÑÐµÐ¼Ñ ÑоглаÑÐµÐ½Ð¸Ñ Ð¸ вÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð² ÑлÑÑае обнаÑÑÐ¶ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой неÑоглаÑованноÑÑи или дÑÑгой пÑоблемÑ.ФÑнкÑиÑ
bt_index_parent_checkзапÑаÑÐ¸Ð²Ð°ÐµÑ Ð² Ñелевом индекÑе блокиÑовкÑShareLock(ÑакжеShareLockзапÑаÑиваеÑÑÑ Ð¸ в оÑновном оÑноÑении). ÐÑи блокиÑовки пÑедоÑвÑаÑаÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменное изменение даннÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸INSERT,UPDATEиDELETE. ÐÑи блокиÑовки Ñакже пÑепÑÑÑÑвÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменной обÑабоÑке нижележаÑего оÑноÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹VACUUMи дÑÑгими вÑпомогаÑелÑнÑми командами. ÐамеÑÑÑе, ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки ÑолÑко во вÑÐµÐ¼Ñ Ð²ÑполнениÑ, а не на пÑоÑÑжении вÑей ÑÑанзакÑии.ÐополниÑелÑнÑе пÑовеÑки, пÑоводимÑе ÑÑнкÑией
bt_index_parent_check, более оÑиенÑиÑÐ¾Ð²Ð°Ð½Ñ Ð½Ð° вÑÑвление ÑазлиÑнÑÑ Ð¿Ð°ÑологиÑеÑÐºÐ¸Ñ ÑлÑÑаев. Ð Ñом ÑиÑле ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¿ÑавилÑно ÑеализованнÑй клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов B-деÑева, иÑполÑзÑемÑй пÑовеÑÑемÑм индекÑом, или, гипоÑеÑиÑеÑки, неизвеÑÑнÑе оÑибки в нижележаÑем коде меÑода доÑÑÑпа индекÑа-B-деÑева. ÐамеÑÑÑе, ÑÑо ÑÑнкÑиÑbt_index_parent_checkнелÑÐ·Ñ Ð¿ÑименÑÑÑ, когда вклÑÑÑн Ñежим гоÑÑÑего ÑезеÑва (Ñо еÑÑÑ Ð½Ð° ÑизиÑеÑÐºÐ¸Ñ ÑÐµÐ¿Ð»Ð¸ÐºÐ°Ñ Ð² Ñежиме «ÑолÑко ÑÑение»), в оÑлиÑие оÑbt_index_check.
F.2.2. ÐополниÑелÑÐ½Ð°Ñ Ð¿ÑовеÑка heapallindexed
Ðогда аÑгÑÐ¼ÐµÐ½Ñ heapallindexed пÑовеÑÑÑÑиÑ
ÑÑнкÑий Ñавен true, Ð´Ð»Ñ ÑаблиÑÑ, ÑвÑзанной Ñ Ð¾ÑноÑением Ñелевого индекÑа, добавлÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ Ñаза пÑовеÑки. Ðна вклÑÑÐ°ÐµÑ Â«ÑикÑивнÑÑ» опеÑаÑÐ¸Ñ CREATE INDEX, коÑоÑÐ°Ñ Ð¿ÑовеÑÑÐµÑ Ð¿ÑиÑÑÑÑÑвие вÑеÑ
гипоÑеÑиÑеÑкиÑ
новÑÑ
индекÑнÑÑ
коÑÑежей по вÑеменной Ñводной ÑÑÑÑкÑÑÑе в памÑÑи (она ÑоздаÑÑÑÑ Ð¿Ñи необÑ
одимоÑÑи на пеÑвом ÑÑапе пÑовеÑки). Ð¡Ð²Ð¾Ð´Ð½Ð°Ñ ÑÑÑÑкÑÑÑа «помеÑаеÑ» каждÑй коÑÑеж, коÑоÑÑй наÑ
одиÑÑÑ Ð² Ñелевом индекÑе. Ðа вÑÑоком ÑÑовне Ð¸Ð´ÐµÑ Ð¿ÑовеÑки heapallindexed ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо новÑй индекÑ, ÑавнознаÑнÑй ÑелевомÑ, ÑодеÑÐ¶Ð¸Ñ ÑолÑко Ñе запиÑи, коÑоÑÑе можно найÑи в ÑÑÑеÑÑвÑÑÑей ÑÑÑÑкÑÑÑе.
С дополниÑелÑнÑм ÑÑапом heapallindexed ÑвÑÐ·Ð°Ð½Ñ Ð·Ð½Ð°ÑиÑелÑнÑе издеÑжки: пÑовеÑка обÑÑно бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð² неÑколÑко Ñаз долÑÑе. Ðднако никакие новÑе блокиÑовки ÑÑÐ¾Ð²Ð½Ñ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð¿Ñи пÑовеÑке heapallindexed не запÑаÑиваÑÑÑÑ.
Ð¡Ð²Ð¾Ð´Ð½Ð°Ñ ÑÑÑÑкÑÑÑа огÑаниÑиваеÑÑÑ Ð¿Ð¾ обÑÑÐ¼Ñ Ð·Ð½Ð°Ñением maintenance_work_mem. ÐÐ»Ñ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÑоглаÑованноÑÑи в пÑедÑÑавленнÑÑ
в индекÑе коÑÑежаÑ
Ñ Ð²ÐµÑоÑÑноÑÑÑÑ ÑпÑÑений в пÑеделаÑ
2% ÑÑебÑеÑÑÑ Ð¿ÑиблизиÑелÑно 2 байÑа памÑÑи на коÑÑеж. Ðо меÑе ÑменÑÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑма памÑÑи в пеÑеÑÑÑÑе на коÑÑеж ÑÑÐ¾Ñ Ð¿ÑоÑÐµÐ½Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ ÑаÑÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð¾Ð´Ñ
од знаÑиÑелÑно огÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¸Ð·Ð´ÐµÑжки Ñакой пÑовеÑки, и пÑи ÑÑом лиÑÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ ÑменÑÑаеÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоблемÑ, оÑобенно в инÑÑаллÑÑиÑÑ
, где ÑÑа пÑовеÑка вклÑÑена в пÑоÑедÑÑÑ ÑегÑлÑÑного обÑлÑживаниÑ. Ðаже еÑли единиÑное оÑÑÑÑÑÑвие или повÑеждение коÑÑежа ÑпÑÑено, еÑÑÑ Ð²Ñе ÑанÑÑ Ð²ÑÑвиÑÑ ÐµÐ³Ð¾ пÑи оÑеÑедной пÑовеÑке.
F.2.3. ÐÑÑекÑивное иÑполÑзование amcheck
ÐодÑÐ»Ñ amcheck Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð´Ð»Ñ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑазлиÑнÑÑ
Ñипов пÑоблем, коÑоÑÑе могÑÑ Ð¾ÑÑаÑÑÑÑ Ð½ÐµÐ·Ð°Ð¼ÐµÑеннÑми пÑи вклÑÑении конÑÑолÑнÑÑ
ÑÑмм ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. Ð ÑаÑÑноÑÑи ÑÑо:
СÑÑÑкÑÑÑнÑе неÑооÑвеÑÑÑвиÑ, возникаÑÑие пÑи некоÑÑекÑной ÑеализаÑии клаÑÑа опеÑаÑоÑов.
Ð Ñом ÑиÑле ÑÑо пÑоблемÑ, возникаÑÑие пÑи изменении пÑавил ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð² опеÑаÑионной ÑиÑÑеме. СÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ ÑоÑÑиÑÑемого Ñипа, напÑимеÑ
text, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾ÑÑоÑннÑми (как и вÑе ÑÑавнениÑ, пÑименÑемÑе пÑи ÑканиÑовании индекÑа-B-деÑева), ÑÑо подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾ÑÑÑ Ð¿Ñавил ÑоÑÑиÑовки в опеÑаÑионной ÑиÑÑеме. ÐÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð³ÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ Ð¿Ñи обновлениÑÑ Ð¿Ñавил в опеÑаÑионной ÑиÑÑеме, Ñ Ð¾ÑÑ Ñакие ÑлÑÑаи Ñедки. ЧаÑе пÑоÑвлÑÑÑÑÑ Ð½ÐµÑооÑвеÑÑÑÐ²Ð¸Ñ Ð¿Ð¾ÑÑдка ÑоÑÑиÑовки Ð¼ÐµÐ¶Ð´Ñ Ð²ÐµÐ´ÑÑим и ведомÑм ÑеÑвеÑом, напÑимеÑ, из-за ÑазлиÑий оÑновнÑÑ Ð²ÐµÑÑий иÑполÑзÑемÑÑ Ð¾Ð¿ÐµÑаÑионнÑÑ ÑиÑÑем. ÐозникаÑÑие ÑаÑÑ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑно наблÑдаÑÑÑÑ ÑолÑко на ведомÑÑ ÑеÑвеÑÐ°Ñ , Ñак ÑÑо и вÑÑвиÑÑ Ð¸Ñ Ð¾Ð±ÑÑно можно ÑолÑко на Ð½Ð¸Ñ .Ðогда Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ð¿Ñоблема, она Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°ÑÑагиваÑÑ Ð½Ðµ абÑолÑÑно вÑе индекÑÑ, поÑÑÑоеннÑе Ñ Ð¿Ð¾ÑоÑнÑм пÑавилом ÑоÑÑиÑовки, пÑоÑÑо поÑÐ¾Ð¼Ñ ÑÑо индекÑиÑованнÑе знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸Ð¼ÐµÑÑ ÑÐ¾Ñ Ð¶Ðµ абÑолÑÑнÑй поÑÑдок, незавиÑÑÑий Ð¾Ñ ÑазлиÑий поведениÑ. Ðа дополниÑелÑнÑми ÑведениÑми об иÑполÑзовании в Postgres Pro пÑавил ÑоÑÑиÑовки и локалей опеÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº РазделÑ 22.1 и РазделÑ 22.2.
ÐеÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑÑÑкÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð¸Ð½Ð´ÐµÐºÑами и пÑоиндекÑиÑованнÑми оÑноÑениÑми в кÑÑе (когда вÑполнÑеÑÑÑ Ð¿ÑовеÑка
heapallindexed).Ðо вÑÐµÐ¼Ñ Ð¾Ð±ÑÑнÑÑ Ð¾Ð¿ÐµÑаÑий пеÑекÑÑÑÑÐ½Ð°Ñ Ð¿ÑовеÑка индекÑов по оÑноÑениÑм в кÑÑе не пÑоизводиÑÑÑ. СимпÑÐ¾Ð¼Ñ Ð¿Ð¾Ð²ÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² кÑÑе могÑÑ Ð±ÑÑÑ Ð½ÐµÐ¾ÑевиднÑми.
ÐовÑеждениÑ, вÑзваннÑе гипоÑеÑиÑеÑкими неизвеÑÑнÑми оÑибками в нижележаÑем коде меÑодов доÑÑÑпа, коде ÑоÑÑиÑовки и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми Postgres Pro.
ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð¿ÑовеÑка ÑÑÑÑкÑÑÑной ÑелоÑÑноÑÑи индекÑов игÑÐ°ÐµÑ Ð²Ð°Ð¶Ð½ÑÑ ÑÐ¾Ð»Ñ Ð² обÑем ÑеÑÑиÑовании новÑÑ Ð¸Ð»Ð¸ пÑедлагаемÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей Postgres Pro, Ñ ÐºÐ¾ÑоÑÑми Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑÐºÐ°Ñ Ð½ÐµÑоглаÑованноÑÑÑ. ТакÑÑ Ð¶Ðµ ÑÐ¾Ð»Ñ Ð¸Ð³ÑÐ°ÐµÑ Ð¿ÑовеÑка ÑÑÑÑкÑÑÑÑ ÑаблиÑÑ Ð¸ ÑвÑзанной инÑоÑмаÑии о видимоÑÑи и ÑоÑÑоÑнии ÑÑанзакÑий. РпоÑÑÐ¾Ð¼Ñ Ð¾Ð´Ð½Ð° из оÑевиднÑÑ ÑÑÑаÑегий ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ â ÑегÑлÑÑно вÑзÑваÑÑ ÑÑнкÑии
amcheckпÑи пÑоведении ÑÑандаÑÑнÑÑ ÑегÑеÑÑионнÑÑ ÑеÑÑов.ÐÑибки в Ñайловой ÑиÑÑеме или подÑиÑÑеме Ñ ÑанениÑ, когда пÑоÑÑо не вклÑÑÐµÐ½Ñ ÐºÐ¾Ð½ÑÑолÑнÑе ÑÑммÑ.
ÐамеÑÑÑе, ÑÑо
amcheckÑаÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ ÑÑÑаниÑÑ Ð² Ñом виде, как она пÑедÑÑавлена в некоÑоÑом бÑÑеÑе ÑазделÑемой памÑÑи к моменÑÑ Ð¿ÑовеÑки, еÑли пÑи обÑаÑÐµÐ½Ð¸Ñ Ðº нÑÐ¶Ð½Ð¾Ð¼Ñ Ð±Ð»Ð¾ÐºÑ Ð¾Ð½ Ñже Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² ÑазделÑемом бÑÑеÑе. ÐÑледÑÑвие ÑÑого,amcheckне обÑзаÑелÑно Ð²Ð¸Ð´Ð¸Ñ Ð´Ð°Ð½Ð½Ñе, Ð½Ð°Ñ Ð¾Ð´ÑÑиеÑÑ Ð² Ñайловой ÑиÑÑеме в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿ÑовеÑки. ÐамеÑÑÑе, ÑÑо когда конÑÑолÑнÑе ÑÑÐ¼Ð¼Ñ Ð²ÐºÐ»ÑÑенÑ,amcheckÐ¼Ð¾Ð¶ÐµÑ Ð²ÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¸Ð·-за неÑооÑвеÑÑÑÐ²Ð¸Ñ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑÑмм, еÑли в бÑÑÐµÑ Ð±ÑÐ´ÐµÑ ÑÑиÑÑваÑÑÑÑ Ð¸ÑпоÑÑеннÑй блок.ÐовÑеждениÑ, вÑзваннÑе деÑекÑнÑми Ñипами ÐÐУ или вообÑе подÑиÑÑемой памÑÑи.
Postgres Pro не заÑиÑÐ°ÐµÑ Ð¾Ñ Ð¾Ñибок памÑÑи; пÑедполагаеÑÑÑ, ÑÑо в ÑкÑплÑаÑиÑÑемом вами ÑеÑвеÑе ÑÑÑановлена памÑÑÑ Ñ ECC (Error Correcting Codes, ÐÐ¾Ð´Ñ Ð¸ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñибок) или лÑÑÑÐ°Ñ Ð·Ð°ÑиÑа. Ðднако памÑÑÑ ECC обÑÑно заÑиÑÐ°ÐµÑ ÑолÑко Ð¾Ñ Ð¾Ñибок в одном биÑе и не ÑледÑÐµÑ ÑÑиÑаÑÑ ÐµÑ Ð°Ð±ÑолÑÑной заÑиÑой Ð¾Ñ Ñбоев, пÑиводÑÑÐ¸Ñ Ðº повÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи.
Ðогда вÑполнÑеÑÑÑ Ð¿ÑовеÑка
heapallindexed, в Ñелом знаÑиÑелÑно ÑвелиÑиваеÑÑÑ ÑÐ°Ð½Ñ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñибок в оÑделÑнÑÑ Ð±Ð¸ÑÐ°Ñ , Ñак как она ÑеÑÑиÑÑÐµÑ ÑоÑное двоиÑное ÑавенÑÑво и ÑвеÑÑÐµÑ Ð¿ÑоиндекÑиÑованнÑе аÑÑибÑÑÑ Ñ ÐºÑÑей.
ÐообÑе говоÑÑ, amcheck Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾ÐºÐ°Ð·Ð°ÑÑ ÑолÑко налиÑие повÑеждений, но не доказаÑÑ Ð¸Ñ
оÑÑÑÑÑÑвие.
F.2.4. ÐÑпÑавление повÑеждений
Ðогда amcheck ÑигнализиÑÑÐµÑ Ð¾ повÑеждении даннÑÑ
, ложнÑе ÑÑабаÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿ÑакÑиÑеÑки иÑклÑÑенÑ. amcheck ÑÑиÑÐ°ÐµÑ Ð¾ÑибоÑнÑми ÑиÑÑаÑии, коÑоÑÑе никогда не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°Ð±Ð»ÑдаÑÑÑÑ Ð¿Ð¾ опÑеделениÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ñибки amcheck, как пÑавило, ÑÑебÑÑÑ ÑÑаÑелÑного анализа.
ÐбÑего меÑода ÑÑÑÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ñоблем, коÑоÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑвиÑÑ amcheck, не ÑÑÑеÑÑвÑеÑ. ÐаÑаÑÑ Ð½Ñжно Ñ Ð¿Ð¾Ð¸Ñка коÑÐ½Ñ Ð¿ÑоблемÑ, пÑиводÑÑей к наÑÑÑÐµÐ½Ð¸Ñ Ð¸Ð½Ð²Ð°ÑианÑа. ÐолезнÑÑ ÑÐ¾Ð»Ñ Ð² диагноÑÑике повÑеждений, коÑоÑÑе вÑÑвлÑÐµÑ amcheck, Ð¼Ð¾Ð¶ÐµÑ ÑÑгÑаÑÑ pageinspect. Ðдна лиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° REINDEX Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑÑÑекÑивна, когда поÑÑебÑеÑÑÑ Ð¸ÑпÑавиÑÑ Ð¿Ð¾Ð²ÑеждениÑ.