監視磁碟使用情況

wongchaofan發表於2024-05-29

每個表都有一個主堆磁碟檔案,其中儲存了大多數資料。如果表中有任何列的值可能很寬,則還可能有一個與該表關聯的TOAST檔案,該檔案用於儲存太寬而無法輕鬆放入主表中的值(參見第 65.2 節)。如果存在, TOAST表上將有一個有效索引。還可能有與基表關聯的索引。每個表和索引都儲存在單獨的磁碟檔案中 — 如果檔案超過 1 GB,則可能不止一個檔案。

在最近清理或分析過的資料庫上使用psql ,您可以發出查詢來檢視任何表的磁碟使用情況:

SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customer';

 pg_relation_filepath | relpages
----------------------+----------
 base/16384/16806     |       60
(1 row)

每個頁面通常為 8 千位元組。(請記住,relpages僅由VACUUMANALYZE和一些 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

磁碟已滿故障

資料庫管理員最重要的磁碟監控任務是確保磁碟不會變滿。已填滿的資料磁碟不會導致資料損壞,但可能會阻止有用的活動發生。如果儲存 WAL 檔案的磁碟已滿,則可能會發生資料庫伺服器崩潰並隨後關閉。

如果無法透過刪除其他內容來釋放磁碟上的額外空間,則可以利用表空間將一些資料庫檔案移動到其他檔案系統。

提示:某些檔案系統在快滿時效能會變差,因此不要等到磁碟完全滿了才採取行動。

如果您的系統支援每個使用者的磁碟配額,那麼資料庫自然會受到伺服器執行所用使用者的配額限制。超出配額將產生與完全耗盡磁碟空間相同的不良影響。

相關文章