W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
每個表都有一個主要的堆磁盤文件,大多數(shù)數(shù)據(jù)都存儲在其中。如果一個表有著可能會很寬(尺寸大)的列, 則另外還有一個TOAST文件與這個表相關(guān)聯(lián), 它用于存儲因為太寬而不能存儲在主表里面的值(參閱第 68.2 節(jié))。如果有這個附屬文件,那么TOAST表上會有一個可用的索引。 當(dāng)然,同時還可能有索引和基表關(guān)聯(lián)。每個表和索引都存放在單獨的磁盤文件里 — 如果文件超過 1G 字節(jié),甚至可能多于一個文件。這些文件的命名原則在第 68.1 節(jié)中描述。
你可以以三種方式監(jiān)視磁盤空間:使用表 9.90中列出的SQL函數(shù)、使用oid2name模塊或者人工觀察系統(tǒng)目錄。SQL函數(shù)是最容易使用的方法,同時也是我們通常推薦的方法。本節(jié)剩余的部分將展示如何通過觀察系統(tǒng)目錄來監(jiān)視磁盤空間。
在一個最近清理過或者分析過的數(shù)據(jù)庫上使用psql,你可以發(fā)出查詢來查看任意表的磁盤用量:
SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customer';
pg_relation_filepath | relpages
----------------------+----------
base/16384/16806 | 60
(1 row)
每個頁通常都是 8K 字節(jié)(記住,relpages
只會由VACUUM
、ANALYZE
和少數(shù)幾個 DDL 命令如CREATE INDEX
所更新)。如果你想直接檢查表的磁盤文件,那么文件路徑名應(yīng)該有用。
要顯示TOAST表使用的空間,我們可以使用一個類似下面這樣的查詢:
SELECT relname, relpages
FROM pg_class,
(SELECT reltoastrelid
FROM pg_class
WHERE relname = 'customer') AS ss
WHERE oid = ss.reltoastrelid OR
oid = (SELECT indexrelid
FROM pg_index
WHERE indrelid = ss.reltoastrelid)
ORDER BY relname;
relname | relpages
----------------------+----------
pg_toast_16806 | 0
pg_toast_16806_index | 1
你也可以很容易地顯示索引的尺寸:
SELECT c2.relname, c2.relpages
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname = 'customer' AND
c.oid = i.indrelid AND
c2.oid = i.indexrelid
ORDER BY c2.relname;
relname | relpages
-------------------+----------
customer_id_index | 26
我們很容易用下面的信息找出最大的表和索引:
SELECT relname, relpages
FROM pg_class
ORDER BY relpages DESC;
relname | relpages
----------------------+----------
bigtable | 3290
customer | 3144
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: