PostgresSQL-判断磁盘的使用量

25.1. 判断磁盘的使用量

每一个表都有一个主堆的磁盘文件,大多数数据都存储在这里。若是一个表有着可能会很长的字段, 则另外还有一个TOAST文件与这个表相关联, 用于存储由于数值太长而不能存储在主表里面的数据(参阅 Section 50.2)。 若是有这个扩展表,那么表上会有一个TOAST索引。 固然,同时还可能有索引和基表关联。 每一个表和索引都存放在单独的磁盘文件里 — 若是文件超过一吉,甚至可能多于一个文件。 这些文件的命名原则在 Section 50.1 里描述。php

你能够从三个地方监视磁盘空间:从 psql 里使用 VACUUM 的信息,从 psql 里使用 contrib/dbsize 里面的工具,以及在命令行上使用 contrib/oid2name 里面的工具。若是 psql 和任何最近刚刚清理(或者分析过)的数据库进行联接, 那么咱们能够用查询来查看任意表的磁盘使用:html

SELECT relfilenode, relpages FROM pg_class WHERE relname = 'customer';

 relfilenode | relpages 
-------------+----------
       16806 |       60
(1 row)

每一个页一般都是 8 K字节。(记住,relpages只是由 VACUUM, ANALYZE 和几个 DDL 命令,好比CREATE INDEX 所更新。) 若是你想直接检查表的磁盘文件,那么 relfilenode 应该有用node

要显示 TOAST 的表使用的空间,咱们能够使用一个相似下面这样的查询:sql

SELECT relname, relpages
    FROM pg_class,
         (SELECT reltoastrelid FROM pg_class
          WHERE relname = 'customer') ss
    WHERE oid = ss.reltoastrelid
       OR oid = (SELECT reltoastidxid FROM pg_class
                 WHERE oid = 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

contrib/dbsize 向咱们的数据库里装载一些函数,这些函数 容许咱们在 psql 里找出一个表或者一个数据库的大小,并且不用 VACUUM或者 ANALYZE。工具

你也能够使用 oid2name 显示磁盘用量。参阅 该目录中的 README.oid2name 获取例子。它包括一个为每一个 数据库显示磁盘用量的脚本spa

相关文章
相关标签/搜索