29.1. 判斷磁盤用量
每個表都有一個主要的堆磁盤檔案,大多數資料都存儲在其中。如果一個表有着可能會很寬(尺寸大)的列, 則另外還有一個TOAST檔案與這個表相關聯, 它用于存儲因為太寬而不能存儲在主表裡面的值(參閱
第 66.2 節)。如果有這個附屬檔案,那麼TOAST表上會有一個可用的索引。 當然,同時還可能有索引和基表關聯。每個表和索引都存放在單獨的磁盤檔案裡 — 如果檔案超過 1G 位元組,甚至可能多于一個檔案。這些檔案的命名原則在
第 66.1 節中描述。
你可以以三種方式監視磁盤空間:使用
表 9.84中列出的SQL函數、使用
oid2name子產品或者人工觀察系統目錄。SQL函數是最容易使用的方法,同時也是我們通常推薦的方法。本節剩餘的部分将展示如何通過觀察系統目錄來監視磁盤空間。
在一個最近清理過或者分析過的資料庫上使用psql,你可以發出查詢來檢視任意表的磁盤用量:
SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customer';
pg_relation_filepath | relpages
----------------------+----------
base/16384/16806 | 60
(1 row)
每個頁通常都是 8K 位元組(記住,
relpages
隻會由
VACUUM
、
ANALYZE
和少數幾個 DDL 指令如
CREATE INDEX
所更新)。如果你想直接檢查表的磁盤檔案,那麼檔案路徑名應該有用。
要顯示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_indexdex | 26
我們很容易用下面的資訊找出最大的表和索引:
SELECT relname, relpages
FROM pg_class
ORDER BY relpages DESC;
relname | relpages
----------------------+----------
bigtable | 3290
customer | 3144
本文轉自PostgreSQL中文社群,原文連結: