F.33. pgstattuple â полÑÑение ÑÑаÑиÑÑики на ÑÑовне коÑÑежей #
ÐодÑÐ»Ñ pgstattuple пÑедоÑÑавлÑÐµÑ ÑазлиÑнÑе ÑÑнкÑии Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑÑаÑиÑÑики на ÑÑовне коÑÑежей.
Так как ÑÑи ÑÑнкÑии возвÑаÑаÑÑ Ð¿Ð¾Ð´ÑобнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, оÑноÑÑÑÑÑÑÑ Ðº ÑÑÐ¾Ð²Ð½Ñ ÑÑÑаниÑÑ, доÑÑÑп к ним по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð³ÑаниÑен. ÐÑаво EXECUTE Ð´Ð»Ñ Ð½Ð¸Ñ
Ð¸Ð¼ÐµÐµÑ ÑолÑко ÑÐ¾Ð»Ñ pg_stat_scan_tables. РазÑмееÑÑÑ, ÑÑпеÑполÑзоваÑели могÑÑ Ð¾Ð±Ð¾Ð¹Ñи ÑÑо огÑаниÑение. ÐоÑле Ñого как ÑÑо ÑаÑÑиÑение ÑÑÑановлено, можно поменÑÑÑ Ð¿Ñава доÑÑÑпа к ÑÑим ÑÑнкÑиÑм командами GRANT и ÑазÑеÑиÑÑ Ð¸Ñ
вÑполнение дÑÑгим полÑзоваÑелÑм. Ðднако пÑедпоÑÑиÑелÑнее бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑиÑ
полÑзоваÑелей в ÑÐ¾Ð»Ñ pg_stat_scan_tables.
F.33.1. ФÑнкÑии #
-
pgstattuple(regclass) returns record ФÑнкÑиÑ
pgstattupleвозвÑаÑÐ°ÐµÑ ÑизиÑеÑкÑÑ Ð´Ð»Ð¸Ð½Ñ Ð¾ÑноÑениÑ, пÑоÑÐµÐ½Ñ Â«Ð¼ÑÑÑвÑÑ Â» коÑÑежей и дÑÑгÑÑ Ð¸Ð½ÑоÑмаÑиÑ. Ðна Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° Ð´Ð»Ñ Ð¿ÑинÑÑÐ¸Ñ ÑеÑÐµÐ½Ð¸Ñ Ð¾ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи оÑиÑÑки. РаÑгÑменÑе пеÑедаÑÑÑÑ Ð¸Ð¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) или OID Ñелевого оÑноÑениÑ. ÐапÑимеÑ:test=> SELECT * FROM pgstattuple('pg_catalog.pg_proc'); -[ RECORD 1 ]------+------- table_len | 458752 tuple_count | 1470 tuple_len | 438896 tuple_percent | 95.67 dead_tuple_count | 11 dead_tuple_len | 3157 dead_tuple_percent | 0.69 free_space | 8932 free_percent | 1.95СÑолбÑÑ ÑезÑлÑÑаÑа опиÑÐ°Ð½Ñ Ð² ТаблиÑе F.24.
ТаблиÑа F.24. СÑолбÑÑ ÑезÑлÑÑаÑа
pgstattupleСÑÐ¾Ð»Ð±ÐµÑ Ð¢Ð¸Ð¿ ÐпиÑание table_lenbigintФизиÑеÑÐºÐ°Ñ Ð´Ð»Ð¸Ð½Ð° оÑноÑÐµÐ½Ð¸Ñ Ð² байÑÐ°Ñ tuple_countbigintÐолиÑеÑÑво «живÑÑ Â» коÑÑежей tuple_lenbigintÐбÑÐ°Ñ Ð´Ð»Ð¸Ð½Ð° «живÑÑ Â» коÑÑежей в байÑÐ°Ñ tuple_percentfloat8ÐÑоÑÐµÐ½Ñ Â«Ð¶Ð¸Ð²ÑÑ Â» коÑÑежей dead_tuple_countbigintÐолиÑеÑÑво «мÑÑÑвÑÑ Â» коÑÑежей dead_tuple_lenbigintÐбÑÐ°Ñ Ð´Ð»Ð¸Ð½Ð° «мÑÑÑвÑÑ Â» коÑÑежей в байÑÐ°Ñ dead_tuple_percentfloat8ÐÑоÑÐµÐ½Ñ Â«Ð¼ÑÑÑвÑÑ Â» коÑÑежей free_spacebigintÐбÑий обÑÑм Ñвободного пÑоÑÑÑанÑÑва в байÑÐ°Ñ free_percentfloat8ÐÑоÑÐµÐ½Ñ Ñвободного пÑоÑÑÑанÑÑва ÐÑимеÑание
ÐнаÑение
table_lenвÑегда бÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑе ÑÑммÑtuple_len,dead_tuple_lenиfree_space. РазниÑа обÑÑÑнÑеÑÑÑ ÑикÑиÑованнÑми издеÑжками, внÑÑÑиÑÑÑаниÑной ÑаблиÑей ÑказаÑелей на коÑÑежи и пÑопÑÑками, добавлÑемÑми Ð´Ð»Ñ Ð²ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾ÑÑежей.ФÑнкÑиÑ
pgstattupleполÑÑÐ°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ ÑолÑко Ð´Ð»Ñ ÑÑениÑ. Таким обÑазом, ÐµÑ ÑезÑлÑÑаÑÑ Ð¾ÑÑажаÑÑ Ð½Ðµ мгновеннÑй Ñнимок; на Ð½Ð¸Ñ Ð±ÑдÑÑ Ð²Ð»Ð¸ÑÑÑ Ð¿Ð°ÑаллелÑнÑе изменениÑ.pgstattupleÑÑиÑÐ°ÐµÑ ÐºÐ¾ÑÑеж «мÑÑÑвÑм», еÑлиHeapTupleSatisfiesDirtyвозвÑаÑÐ°ÐµÑ false.-
pgstattuple(text) returns record ÐÑа ÑÑнкÑÐ¸Ñ ÑавнознаÑна ÑÑнкÑии
pgstattuple(regclass)за иÑклÑÑением Ñого, ÑÑо Ð´Ð»Ñ Ð½ÐµÑ Ñелевое оÑноÑение задаÑÑÑÑ Ð² ÑекÑÑовом виде. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¾ÑÑавлена Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи, в бÑдÑÑем она Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑейÑи в ÑазÑÑд ÑÑÑаÑевÑÐ¸Ñ .-
pgstatindex(regclass) returns record ФÑнкÑиÑ
pgstatindexвозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñ Ð¸Ð½ÑоÑмаÑией об индекÑе Ñипа B-деÑево. ÐапÑимеÑ:test=> SELECT * FROM pgstatindex('pg_cast_oid_index'); -[ RECORD 1 ]------+------ version | 2 tree_level | 0 index_size | 16384 root_block_no | 1 internal_pages | 0 leaf_pages | 1 empty_pages | 0 deleted_pages | 0 avg_leaf_density | 54.27 leaf_fragmentation | 0СÑолбÑÑ ÑезÑлÑÑаÑа:
СÑÐ¾Ð»Ð±ÐµÑ Ð¢Ð¸Ð¿ ÐпиÑание versionintegerÐÐ¾Ð¼ÐµÑ Ð²ÐµÑÑии B-деÑева tree_levelintegerУÑÐ¾Ð²ÐµÐ½Ñ ÐºÐ¾Ñневой ÑÑÑаниÑÑ Ð² деÑеве index_sizebigintÐбÑий обÑÑм индекÑа в байÑÐ°Ñ root_block_nobigintРаÑположение ÑÑÑаниÑÑ ÐºÐ¾ÑÐ½Ñ (0, еÑли ÐµÑ Ð½ÐµÑ) internal_pagesbigintÐолиÑеÑÑво «внÑÑÑÐµÐ½Ð½Ð¸Ñ Â» ÑÑÑÐ°Ð½Ð¸Ñ (веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ) leaf_pagesbigintÐолиÑеÑÑво ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ð° ÑÑовне лиÑÑÑев empty_pagesbigintÐолиÑеÑÑво пÑÑÑÑÑ ÑÑÑÐ°Ð½Ð¸Ñ deleted_pagesbigintÐолиÑеÑÑво ÑдалÑннÑÑ ÑÑÑÐ°Ð½Ð¸Ñ avg_leaf_densityfloat8СÑеднÑÑ Ð¿Ð»Ð¾ÑноÑÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ð° ÑÑовне лиÑÑÑев leaf_fragmentationfloat8ФÑагменÑаÑÐ¸Ñ Ð½Ð° ÑÑовне лиÑÑÑев ÐÑдаваемÑй ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð½Ð´ÐµÐºÑа (
index_size) обÑÑно вÑÑиÑлÑеÑÑÑ Ð¿Ð¾ ÑоÑмÑлеinternal_pages + leaf_pages + empty_pages + deleted_pagesплÑÑ Ð¾Ð´Ð½Ð° ÑÑÑаниÑа, Ñак как в нÑм ÑÑиÑÑваеÑÑÑ Ð¸ меÑаÑÑÑаниÑа индекÑа.Ðак и
pgstattuple, ÑÑа ÑÑнкÑÐ¸Ñ ÑобиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе ÑÑÑаниÑа за ÑÑÑаниÑей и не ÑледÑÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, ÑÑо ÐµÑ ÑезÑлÑÑÐ°Ñ Ð¿ÑедÑÑавлÑÐµÑ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ñй Ñнимок вÑего индекÑа.-
pgstatindex(text) returns record ÐÑа ÑÑнкÑÐ¸Ñ ÑавнознаÑна ÑÑнкÑии
pgstatindex(regclass)за иÑклÑÑением Ñого, ÑÑо Ð´Ð»Ñ Ð½ÐµÑ Ñелевое оÑноÑение задаÑÑÑÑ Ð² ÑекÑÑовом виде. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¾ÑÑавлена Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи, в бÑдÑÑем она Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑейÑи в ÑазÑÑд ÑÑÑаÑевÑÐ¸Ñ .-
pgstatginindex(regclass) returns record ФÑнкÑиÑ
pgstatginindexвозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñ Ð¸Ð½ÑоÑмаÑией об индекÑе Ñипа GIN. ÐапÑимеÑ:test=> SELECT * FROM pgstatginindex('test_gin_index'); -[ RECORD 1 ]--+-- version | 1 pending_pages | 0 pending_tuples | 0СÑолбÑÑ ÑезÑлÑÑаÑа:
СÑÐ¾Ð»Ð±ÐµÑ Ð¢Ð¸Ð¿ ÐпиÑание versionintegerÐÐ¾Ð¼ÐµÑ Ð²ÐµÑÑии GIN pending_pagesintegerÐолиÑеÑÑво ÑÑÑÐ°Ð½Ð¸Ñ Ð² ÑпиÑке ожидаÑÑÐ¸Ñ Ð¾Ð±ÑабоÑки pending_tuplesbigintÐолиÑеÑÑво коÑÑежей в ÑпиÑке ожидаÑÑÐ¸Ñ Ð¾Ð±ÑабоÑки -
pgstathashindex(regclass) returns record ФÑнкÑиÑ
pgstathashindexвозвÑаÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñ Ð¸Ð½ÑоÑмаÑией о Ñ ÐµÑ-индекÑе. ÐапÑимеÑ:test=> select * from pgstathashindex('con_hash_index'); -[ RECORD 1 ]--+----------------- version | 4 bucket_pages | 33081 overflow_pages | 0 bitmap_pages | 1 unused_pages | 32455 live_items | 10204006 dead_items | 0 free_percent | 61.8005949100872СÑолбÑÑ ÑезÑлÑÑаÑа:
СÑÐ¾Ð»Ð±ÐµÑ Ð¢Ð¸Ð¿ ÐпиÑание versionintegerÐÐ¾Ð¼ÐµÑ Ð²ÐµÑÑии HASH bucket_pagesbigintÐолиÑеÑÑво ÑÑÑÐ°Ð½Ð¸Ñ Ð³ÑÑпп overflow_pagesbigintÐолиÑеÑÑво ÑÑÑÐ°Ð½Ð¸Ñ Ð¿ÐµÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ bitmap_pagesbigintÐолиÑеÑÑво ÑÑÑÐ°Ð½Ð¸Ñ Ð±Ð¸Ñовой каÑÑÑ unused_pagesbigintÐолиÑеÑÑво неиÑполÑзованнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ live_itemsbigintÐолиÑеÑÑво «живÑÑ Â» коÑÑежей dead_tuplesbigintÐолиÑеÑÑво «мÑÑÑвÑÑ Â» коÑÑежей free_percentfloatÐÑоÑÐµÐ½Ñ Ñвободного пÑоÑÑÑанÑÑва -
pg_relpages(regclass) returns bigint ФÑнкÑиÑ
pg_relpagesвозвÑаÑÐ°ÐµÑ ÑиÑло ÑÑÑÐ°Ð½Ð¸Ñ Ð² оÑноÑении.-
pg_relpages(text) returns bigint ÐÑа ÑÑнкÑÐ¸Ñ ÑавнознаÑна ÑÑнкÑии
pg_relpages(regclass)за иÑклÑÑением Ñого, ÑÑо Ð´Ð»Ñ Ð½ÐµÑ Ñелевое оÑноÑение задаÑÑÑÑ Ð² ÑекÑÑовом виде. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¾ÑÑавлена Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи, в бÑдÑÑем она Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑейÑи в ÑазÑÑд ÑÑÑаÑевÑÐ¸Ñ .-
pgstattuple_approx(regclass) returns record ФÑнкÑиÑ
pgstattuple_approxÑвлÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ бÑÑÑÑой алÑÑеÑнаÑивойpgstattuple, возвÑаÑаÑÑей пÑиблизиÑелÑнÑе ÑезÑлÑÑаÑÑ. РкаÑеÑÑве аÑгÑменÑа ей пеÑедаÑÑÑÑ Ð¸Ð¼Ñ Ð¸Ð»Ð¸ OID Ñелевого оÑноÑениÑ. ÐапÑимеÑ:test=> SELECT * FROM pgstattuple_approx('pg_catalog.pg_proc'::regclass); -[ RECORD 1 ]--------+------- table_len | 573440 scanned_percent | 2 approx_tuple_count | 2740 approx_tuple_len | 561210 approx_tuple_percent | 97.87 dead_tuple_count | 0 dead_tuple_len | 0 dead_tuple_percent | 0 approx_free_space | 11996 approx_free_percent | 2.09ÐÑÑ Ð¾Ð´Ð½Ñе ÑÑолбÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ТаблиÑе F.25.
Тогда как
pgstattupleвÑегда пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ðµ ÑканиÑование ÑаблиÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑоÑное ÑиÑло живÑÑ Ð¸ мÑÑÑвÑÑ ÐºÐ¾ÑÑежей (и Ð¸Ñ ÑазмеÑ), а Ñакже ÑоÑнÑй обÑÑм Ñвободного пÑоÑÑÑанÑÑва, ÑÑнкÑиÑpgstattuple_approxпÑÑаеÑÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÑоÑнÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ ÑолÑко по мÑÑÑвÑм коÑÑежам, а колиÑеÑÑво и обÑÑм живÑÑ ÐºÐ¾ÑÑежей, как и обÑÑм Ñвободного пÑоÑÑÑанÑÑва опÑеделÑÐµÑ Ð¿ÑиблизиÑелÑно.Ðна Ð´ÐµÐ»Ð°ÐµÑ ÑÑо, пÑопÑÑÐºÐ°Ñ ÑÑÑаниÑÑ, в коÑоÑÑÑ , ÑоглаÑно каÑÑе видимоÑÑи, еÑÑÑ ÑолÑко видимÑе коÑÑежи (еÑли Ð´Ð»Ñ ÑÑÑаниÑÑ ÑÑÑановлен ÑооÑвеÑÑÑвÑÑÑий биÑ, пÑедполагаеÑÑÑ, ÑÑо она не ÑодеÑÐ¶Ð¸Ñ Ð¼ÑÑÑвÑÑ ÐºÐ¾ÑÑежей). ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ ÑÑа ÑÑнкÑÐ¸Ñ ÑзнаÑÑ Ð¾Ð±ÑÑм Ñвободного пÑоÑÑÑанÑÑва из каÑÑÑ Ñвободного пÑоÑÑÑанÑÑва и пÑедполагаеÑ, ÑÑо оÑÑалÑное пÑоÑÑÑанÑÑво на ÑÑÑаниÑе занÑÑо живÑми коÑÑежами.
Ðа ÑÑÑаниÑÐ°Ñ , коÑоÑÑе нелÑÐ·Ñ Ð¿ÑопÑÑÑиÑÑ, она ÑканиÑÑÐµÑ ÐºÐ°Ð¶Ð´Ñй коÑÑеж, оÑÑÐ°Ð¶Ð°ÐµÑ ÐµÐ³Ð¾ налиÑие и ÑÐ°Ð·Ð¼ÐµÑ Ð² ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑÑÑÑÐ¸ÐºÐ°Ñ Ð¸ ÑÑммиÑÑÐµÑ Ñвободное пÑоÑÑÑанÑÑво на ÑÑÑаниÑе. РконÑе она оÑÐµÐ½Ð¸Ð²Ð°ÐµÑ Ð¿ÑиблизиÑелÑно обÑее ÑиÑло живÑÑ ÐºÐ¾ÑÑежей, иÑÑ Ð¾Ð´Ñ Ð¸Ð· ÑиÑла пÑоÑканиÑованнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¸ коÑÑежей (Ñак же, как VACUUM ÑаÑÑÑиÑÑÐ²Ð°ÐµÑ Ð·Ð½Ð°Ñение pg_class.reltuples).
ТаблиÑа F.25. СÑолбÑÑ ÑезÑлÑÑаÑа
pgstattuple_approxСÑÐ¾Ð»Ð±ÐµÑ Ð¢Ð¸Ð¿ ÐпиÑание table_lenbigintФизиÑеÑÐºÐ°Ñ Ð´Ð»Ð¸Ð½Ð° оÑноÑÐµÐ½Ð¸Ñ Ð² байÑÐ°Ñ (ÑоÑнаÑ) scanned_percentfloat8ÐÑоÑканиÑованнÑй пÑоÑÐµÐ½Ñ ÑаблиÑÑ approx_tuple_countbigintÐолиÑеÑÑво «живÑÑ Â» коÑÑежей (пÑиблизиÑелÑное) approx_tuple_lenbigintÐбÑÐ°Ñ Ð´Ð»Ð¸Ð½Ð° «живÑÑ Â» коÑÑежей в байÑÐ°Ñ (пÑиблизиÑелÑнаÑ) approx_tuple_percentfloat8ÐÑоÑÐµÐ½Ñ Â«Ð¶Ð¸Ð²ÑÑ Â» коÑÑежей dead_tuple_countbigintÐолиÑеÑÑво «мÑÑÑвÑÑ Â» коÑÑежей (ÑоÑное) dead_tuple_lenbigintÐбÑÐ°Ñ Ð´Ð»Ð¸Ð½Ð° «мÑÑÑвÑÑ Â» коÑÑежей в байÑÐ°Ñ (ÑоÑнаÑ) dead_tuple_percentfloat8ÐÑоÑÐµÐ½Ñ Â«Ð¼ÑÑÑвÑÑ Â» коÑÑежей approx_free_spacebigintÐбÑий обÑÑм Ñвободного пÑоÑÑÑанÑÑва в байÑÐ°Ñ (пÑиблизиÑелÑнÑй) approx_free_percentfloat8ÐÑоÑÐµÐ½Ñ Ñвободного пÑоÑÑÑанÑÑва Рпоказанном вÑÑе вÑводе показаÑели Ñвободного пÑоÑÑÑанÑÑва могÑÑ Ð½Ðµ ÑооÑвеÑÑÑвоваÑÑ Ð²ÑводÑ
pgstattupleв ÑоÑноÑÑи, поÑÐ¾Ð¼Ñ ÑÑо каÑÑа Ñвободного пÑоÑÑÑанÑÑва показÑÐ²Ð°ÐµÑ Ð²ÐµÑное знаÑение, но не гаÑанÑиÑÑеÑÑÑ, ÑÑо оно бÑÐ´ÐµÑ ÑоÑнÑм до байÑа.
F.33.2. ÐвÑоÑÑ #
ТаÑÑо ÐÑии, СаÑоÑи ÐагаÑÑÑ Ð¸ ÐÐ±Ñ Ð¸Ð´Ð¶Ð¸Ñ Ðенон-Сен