F.52. pg_visibility
ÐодÑÐ»Ñ pg_visibility даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑÑледоваÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнной ÑаблиÑÑ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи (Visibility Map, VM) и инÑоÑмаÑÐ¸Ñ Ð¾ видимоÑÑи на ÑÑовне ÑÑÑаниÑ. Ðн Ñакже пÑедоÑÑавлÑÐµÑ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÑовеÑки ÑелоÑÑноÑÑи каÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи и пÑинÑдиÑелÑного ÐµÑ Ð¿ÐµÑеÑозданиÑ.
ÐÐ»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о видимоÑÑи на ÑÑовне ÑÑÑÐ°Ð½Ð¸Ñ Ð¿ÑименÑÑÑÑÑ Ð¿Ð¾ ÑÑи ÑазлиÑнÑÑ
биÑа. ÐÐ¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи в каÑÑе показÑваеÑ, ÑÑо каждÑй коÑÑеж в ÑооÑвеÑÑÑвÑÑÑей ÑÑÑаниÑе оÑноÑÐµÐ½Ð¸Ñ ÑвлÑеÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñм Ð´Ð»Ñ Ð²ÑеÑ
ÑекÑÑиÑ
и бÑдÑÑиÑ
ÑÑанзакÑий. ÐÐ¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ замоÑозки в каÑÑе видимоÑÑи показÑваеÑ, ÑÑо вÑе коÑÑежи в данной ÑÑÑаниÑе ÑвлÑÑÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑми; Ñо еÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ опеÑаÑии оÑиÑÑки в бÑдÑÑем не пÑидÑÑÑÑ Ð¾Ð±ÑабаÑÑваÑÑ ÑÑÑ ÑÑÑаниÑÑ, пока в ней не бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½, изменÑн, ÑдалÑн или заблокиÑован коÑÑеж. ÐÐ¸Ñ PD_ALL_VISIBLE в заголовке ÑÑÑаниÑÑ Ð¸Ð¼ÐµÐµÑ Ñо же знаÑение, ÑÑо и Ð±Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи в каÑÑе видимоÑÑи, но он Ñ
ÑаниÑÑÑ Ð² Ñамой ÑÑÑаниÑе даннÑÑ
, а не в оÑделÑной ÑÑÑÑкÑÑÑе даннÑÑ
. РобÑÑной ÑиÑÑаÑии ÑÑи два биÑа бÑдÑÑ ÑоглаÑованÑ, но Ð±Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи в ÑÑÑаниÑе иногда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлен, Ñогда как в каÑÑе видимоÑÑи он оказÑваеÑÑÑ ÑбÑоÑеннÑм пÑи воÑÑÑановлении поÑле ÑбоÑ. СÑиÑÑваемÑе знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ñакже ÑазлиÑаÑÑÑÑ, еÑли они подвеÑгаÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² пÑомежÑÑке Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±ÑаÑениÑми pg_visibility к каÑÑе видимоÑÑи и к ÑÑÑаниÑе даннÑÑ
. РазÑмееÑÑÑ, ÑÑи биÑÑ Ñакже могÑÑ ÑазлиÑаÑÑÑÑ Ð¿Ñи ÑобÑÑиÑÑ
, пÑиводÑÑиÑ
к ÑазÑÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
.
ФÑнкÑии, вÑдаÑÑие инÑоÑмаÑÐ¸Ñ Ð¾ биÑаÑ
PD_ALL_VISIBLE, более доÑогоÑÑоÑÑие, Ñем Ñе, ÑÑо обÑаÑаÑÑÑÑ ÑолÑко к каÑÑе видимоÑÑи, Ñак как они Ð´Ð¾Ð»Ð¶Ð½Ñ ÑиÑаÑÑ Ð±Ð»Ð¾ÐºÐ¸ оÑноÑениÑ, а не ÑолÑко каÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи (коÑоÑÐ°Ñ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ менÑÑе). ÐоÑогоÑÑоÑÑими ÑвлÑÑÑÑÑ Ñакже и ÑÑнкÑии, пÑовеÑÑÑÑие блоки даннÑÑ
оÑноÑениÑ.
F.52.1. ФÑнкÑии
pg_visibility_map(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) returns recordÐозвÑаÑÐ°ÐµÑ Ð±Ð¸ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи и полной замоÑозки в каÑÑе видимоÑÑи Ð´Ð»Ñ Ñказанного блока заданного оÑноÑениÑ.
pg_visibility(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns recordÐозвÑаÑÐ°ÐµÑ Ð±Ð¸ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи и полной замоÑозки в каÑÑе видимоÑÑи Ð´Ð»Ñ Ñказанного блока заданного оÑноÑениÑ, а Ñакже биÑ
PD_ALL_VISIBLEÑÑого блока.pg_visibility_map(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) returns setof recordÐозвÑаÑÐ°ÐµÑ Ð±Ð¸ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи и полной замоÑозки в каÑÑе видимоÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ блока заданного оÑноÑениÑ.
pg_visibility(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns setof recordÐозвÑаÑÐ°ÐµÑ Ð±Ð¸ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ видимоÑÑи и полной замоÑозки в каÑÑе видимоÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ блока заданного оÑноÑениÑ, а Ñакже биÑ
PD_ALL_VISIBLEкаждого блока.pg_visibility_map_summary(relation regclass, all_visible OUT bigint, all_frozen OUT bigint) returns recordÐозвÑаÑÐ°ÐµÑ ÑиÑло полноÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¸ полноÑÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð² оÑноÑении, ÑоглаÑно каÑÑе видимоÑÑи.
pg_check_frozen(relation regclass, t_ctid OUT tid) returns setof tidÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ TID незамоÑоженнÑÑ ÐºÐ¾ÑÑежей в ÑÑÑаниÑÐ°Ñ , помеÑеннÑÑ ÐºÐ°Ðº полноÑÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑе в каÑÑе видимоÑÑи. ÐÑли ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½ÐµÐ¿ÑÑÑой Ð½Ð°Ð±Ð¾Ñ TID, каÑÑа видимоÑÑи иÑпоÑÑена.
pg_check_visible(relation regclass, t_ctid OUT tid) returns setof tidÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ TID не полноÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ ÐºÐ¾ÑÑежей в ÑÑÑаниÑÐ°Ñ , помеÑеннÑÑ ÐºÐ°Ðº полноÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñе в каÑÑе видимоÑÑи. ÐÑли ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½ÐµÐ¿ÑÑÑой Ð½Ð°Ð±Ð¾Ñ TID, каÑÑа видимоÑÑи иÑпоÑÑена.
pg_truncate_visibility_map(relation regclass) returns voidÐннÑлиÑÑÐµÑ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ оÑноÑениÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°, еÑли Ð²Ñ ÑÑиÑаеÑе, ÑÑо каÑÑа видимоÑÑи Ð´Ð»Ñ Ñказанного оÑноÑÐµÐ½Ð¸Ñ Ð¸ÑпоÑÑена, и Ñ Ð¾ÑиÑе пÑинÑдиÑелÑно пеÑеÑоздаÑÑ ÐµÑ. ÐеÑÐ²Ð°Ñ Ð¶Ðµ команда
VACUUM, вÑполнÑÐµÐ¼Ð°Ñ Ñ Ð´Ð°Ð½Ð½Ñм оÑноÑением поÑле ÑÑой ÑÑнкÑии, пÑоÑканиÑÑÐµÑ Ð²Ñе ÑÑÑаниÑÑ Ð² оÑноÑении и пеÑеÑоздаÑÑ ÐºÐ°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи. (Ðока ÑÑо не пÑоизойдÑÑ, Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов каÑÑа видимоÑÑи бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ ÐºÐ°Ðº полноÑÑÑÑ Ð½ÑлеваÑ.)
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑи ÑÑнкÑии ÑазÑеÑено вÑполнÑÑÑ ÑолÑко ÑÑпеÑполÑзоваÑелÑм и Ñленам Ñоли pg_stat_scan_tables, за иÑклÑÑением pg_truncate_visibility_map(relation regclass), коÑоÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð²ÑполнÑÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
F.52.2. ÐвÑоÑ
РобеÑÑ Ð¥Ð°Ð°Ñ <[email protected]>