天天看點

PostgreSQL 10.1 手冊_部分 III. 伺服器管理_第 29 章 監控磁盤使用_29.1. 判斷磁盤用量

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中文社群,原文連結: