W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
pgstattuple
模塊提供多種函數(shù)來獲得元組層的統(tǒng)計(jì)信息。
由于這些函數(shù)返回詳細(xì)的頁面級信息,因此默認(rèn)訪問權(quán)限是受限制的。 默認(rèn)情況下,只有角色pg_stat_scan_tables
具有EXECUTE
特權(quán)。 超級用戶當(dāng)然可以繞過這個限制。擴(kuò)展程序安裝后,用戶可以發(fā)送GRANT
命令來更改函數(shù)的權(quán)限以允許其他用戶來執(zhí)行它們。但是,最好將這些用戶添加到pg_stat_scan_tables
角色。
pgstattuple(regclass) 返回 record
pgstattuple
返回一個關(guān)系的物理長度、“死亡”元組的百分比以及其他信息。這可以幫助用戶決定是否需要清理。參數(shù)是目標(biāo)關(guān)系的名稱(可以有選擇地用模式限定)或者 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.22中描述了輸出列。
表 F.22. pgstattuple
輸出列
列 | 類型 | 描述 |
---|---|---|
table_len
|
bigint
|
物理關(guān)系長度,以字節(jié)計(jì) |
tuple_count
|
bigint
|
存活元組的數(shù)量 |
tuple_len
|
bigint
|
存活元組的總長度,以字節(jié)計(jì) |
tuple_percent
|
float8
|
存活元組的百分比 |
dead_tuple_count
|
bigint
|
死亡元組的數(shù)量 |
dead_tuple_len
|
bigint
|
死亡元組的總長度,以字節(jié)計(jì) |
dead_tuple_percent
|
float8
|
死亡元組的百分比 |
free_space
|
bigint
|
空閑空間總量,以字節(jié)計(jì) |
free_percent
|
float8
|
空閑空間的百分比 |
table_len
將總是比tuple_len
、 dead_tuple_len
和free_space
的和要大。 不同之處在于固定的頁面開銷,每頁指向元組的指針表和填充以確保元組正確對齊。
pgstattuple
只要求在關(guān)系上的一個讀鎖。因此結(jié)果不能反映一個即時快照,并發(fā)更新將影響結(jié)果。
如果HeapTupleSatisfiesDirty
返回假,pgstattuple
就判定一個元組是“死亡的”。
pgstattuple(text) 返回 record
與pgstattuple(regclass)
相同,只不過通過 TEXT 指定目標(biāo)關(guān)系。這個函數(shù)只是為了向后兼容而保留,在未來的發(fā)布中將會被廢除。
pgstatindex(regclass) 返回 record
pgstatindex
返回一個記錄顯示有關(guān)一個 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
輸出列是:
列 | 類型 | 描述 |
---|---|---|
version
|
integer
|
B-樹 版本號 |
tree_level
|
integer
|
根頁的樹層次 |
index_size
|
bigint
|
以字節(jié)計(jì)的索引總尺寸 |
root_block_no
|
bigint
|
根頁的位置(如果沒有則為零) |
internal_pages
|
bigint
|
“內(nèi)部”(上層)頁面的數(shù)量 |
leaf_pages
|
bigint
|
葉子頁的數(shù)量 |
empty_pages
|
bigint
|
空頁的數(shù)量 |
deleted_pages
|
bigint
|
刪除頁的數(shù)量 |
avg_leaf_density
|
float8
|
葉子頁的平均密度 |
leaf_fragmentation
|
float8
|
葉子頁碎片 |
報(bào)告的index_size
通常對應(yīng)于internal_pages + leaf_pages + empty_pages + deleted_pages
加一,因?yàn)樗€包括索引的元頁。
對于pgstattuple
,結(jié)果是一頁一頁累計(jì)的并且不要期望結(jié)果會表示整個索引的一個即時快照。
pgstatindex(text) returns record
與pgstatindex(regclass)
相同,只不過通過 TEXT 指定目標(biāo)索引。這個函數(shù)只是為了向后兼容而保留,在未來的某個發(fā)布中將會被廢除。
pgstatginindex(regclass) 返回 record
pgstatginindex
返回一個記錄顯示有關(guān)一個 GIN 索引的信息。例如:
test=> SELECT * FROM pgstatginindex('test_gin_index');
-[ RECORD 1 ]--+--
version | 1
pending_pages | 0
pending_tuples | 0
輸出列是:
列 | 類型 | 描述 |
---|---|---|
version
|
integer
|
GIN 版本號 |
pending_pages
|
integer
|
待處理列表中的頁面數(shù) |
pending_tuples
|
bigint
|
待處理列表中的元組數(shù) |
pgstathashindex(regclass) returns record
pgstathashindex
返回一個顯示HASH索引信息的記錄。例如:
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
輸出字段是:
字段 | 類型 | 描述 |
---|---|---|
version
|
integer
|
HASH版本號 |
bucket_pages
|
bigint
|
存儲桶頁面的數(shù)量 |
overflow_pages
|
bigint
|
溢出頁面的數(shù)量 |
bitmap_pages
|
bigint
|
位圖頁數(shù) |
unused_pages
|
bigint
|
未使用頁面的數(shù)量 |
live_items
|
bigint
|
活元組的數(shù)量 |
dead_tuples
|
bigint
|
死元組的數(shù)量 |
free_percent
|
float
|
自由空間的百分比 |
pg_relpages(regclass) 返回 bigint
pg_relpages
返回關(guān)系中的頁面數(shù)。
pg_relpages(text) returns bigint
與pg_relpages(regclass)
相同,只不過用 TEXT 來 指定目標(biāo)關(guān)系。這個函數(shù)只是為了向后兼容而保留,在未來的某個發(fā)布中將會被廢除。
pgstattuple_approx(regclass) returns record
pgstattuple_approx
是pgstattuple
的一個更加快速的替代品,它返回近似的結(jié)果。參數(shù)是目標(biāo)關(guān)系的 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.23中描述。
鑒于pgstattuple
總是執(zhí)行全表掃描并且返回存活和死亡元組的準(zhǔn)確計(jì)數(shù)、尺寸和空閑空間,pgstattuple_approx
嘗試避免全表掃描并且返回死亡元組的準(zhǔn)確統(tǒng)計(jì)信息,以及存活元組和空閑空間的近似數(shù)量及尺寸。
這個函數(shù)通過根據(jù)可見性映射跳過只包含可見元組的頁面來實(shí)現(xiàn)這一目的(如果一個頁面對應(yīng)的 VM 位被設(shè)置,那么就說明它不含有死亡元組)。對于這樣的額頁面,它會從空閑空間映射中得到空閑空間值,并且假定該頁面上的剩余空間由存活元組占據(jù)。
對于不能被跳過的頁面,它會掃描每個元組,在合適的計(jì)數(shù)器中記錄它的存在以及尺寸,并且統(tǒng)計(jì)該頁面上的空閑空間。最后,它會基于已掃描的頁面和元組數(shù)量來估計(jì)存活元組的總數(shù)(采用與 VACUUM 估計(jì) pg_class.reltuples 時相同的方法)。
表 F.23. pgstattuple_approx
輸出列
列 | 類型 | 描述 |
---|---|---|
table_len
|
bigint
|
以字節(jié)計(jì)的物理關(guān)系長度(準(zhǔn)確) |
scanned_percent
|
float8
|
已掃描表的百分比 |
approx_tuple_count
|
bigint
|
存活元組的數(shù)量(估計(jì)) |
approx_tuple_len
|
bigint
|
以字節(jié)計(jì)的存活元組總長度(估計(jì)) |
approx_tuple_percent
|
float8
|
存活元組的百分比 |
dead_tuple_count
|
bigint
|
死亡元組的數(shù)量(準(zhǔn)確) |
dead_tuple_len
|
bigint
|
以字節(jié)計(jì)的死亡元組總長度(準(zhǔn)確) |
dead_tuple_percent
|
float8
|
死亡元組的百分比 |
approx_free_space
|
bigint
|
以字節(jié)計(jì)的總空閑空間(估計(jì)) |
approx_free_percent
|
float8
|
空閑空間的百分比 |
在上述的輸出中,空閑空間數(shù)字可能不完全匹配pgstattuple
的輸出,這是因?yàn)榭臻e空間映射會給出一個準(zhǔn)確的數(shù)字,但是這個數(shù)字不能保證是一個準(zhǔn)確的字節(jié)數(shù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: