監控PostgreSQL的磁碟使用
阿新 • • 發佈:2018-12-12
每個表都有一個主要的堆磁碟檔案,大多數資料都儲存在其中。如果一個表有著可能會很寬(尺寸大)的列, 則另外還有一個TOAST檔案與這個表相關聯, 它用於儲存因為太寬而不能儲存在主表裡面的值。如果有這個附屬檔案,那麼TOAST表上會有一個可用的索引。 當然,同時還可能有索引和基表關聯。每個表和索引都存放在單獨的磁碟檔案裡,如果檔案超過 1G 位元組,甚至可能多於一個檔案。 你可以以三種方式監視磁碟空間:使用SQL函式、使用oid2name模組或者人工觀察系統目錄。SQL函式是最容易使用的方法,同時也是通常推薦的方法。 在一個最近清理過或者分析過的資料庫上使用psql,你可以發出查詢來檢視任意表的磁碟用量:
postgres=# SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'ctetest';
pg_relation_filepath | relpages
----------------------+----------
base/12330/41502 | 8334
(1 row)
每個頁通常都是 8K 位元組(記住,relpages只會由VACUUM、ANALYZE和少數幾個 DDL 命令如CREATE INDEX所更新)。 顯示TOAST表使用的空間:
postgres=# SELECT relname, relpages FROM pg_class, (SELECT reltoastrelid FROM pg_class WHERE relname = 'ctetest') AS ss WHERE oid = ss.reltoastrelid OR oid = (SELECT indexrelid FROM pg_index WHERE indrelid = ss.reltoastrelid) ORDER BY relname; relname | relpages ----------------------+---------- pg_toast_41502 | 0 pg_toast_41502_index | 1 (2 rows)
顯示索引的尺寸:
postgres=# SELECT c2.relname, c2.relpages FROM pg_class c, pg_class c2, pg_index i WHERE c.relname = 'ctetest' AND c.oid = i.indrelid AND c2.oid = i.indexrelid ORDER BY c2.relname; relname | relpages ----------------+---------- ctetest_id_idx | 2198 (1 row)
找出最大的表和索引:
postgres=# SELECT relname, relpages
FROM pg_class
ORDER BY relpages DESC;
relname | relpages
-------------------------------------------+----------
test02 | 39216
ctetest | 8334
foo | 4425
By Kalath