赞
踩
需要了解每张表的具体大小,PostgreSQL提供了很多工具
每个表都有一个主要的堆磁盘文件,大多数数据都存储在其中。如果一个表有着可能会很宽(尺寸大)的列, 则另外还有一个TOAST文件与这个表相关联, 它用于存储因为太宽而不能存储在主表里面的值(http://www.postgres.cn/docs/9.6/storage-toast.html)。如果有这个附属文件,那么TOAST表上会有一个可用的索引。 当然,同时还可能有索引和基表关联。每个表和索引都存放在单独的磁盘文件里 — 如果文件超过 1G 字节,甚至可能多于一个文件。这些文件的命名原则的描:述http://www.postgres.cn/docs/9.6/storage-file-layout.html。
SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customers';
pg_relation_filepath
在服务器上的相对位置。PGDATA的一个常见位置是 /var/lib/pgsql/data
。由不同数据库实例所管理的多个集簇可以在同一台机器上共存每个页通常都是 8K 字节(记住,relpages只会由VACUUM、ANALYZE和少数几个 DDL 命令如CREATE INDEX所更新)。如果你想直接检查表的磁盘文件,那么文件路径名应该有用。
要显示TOAST表使用的空间,我们可以使用一个类似下面这样的查询:
SELECT relname, relpages
FROM pg_class,
(SELECT reltoastrelid
FROM pg_class
WHERE relname = 'customers') AS ss
WHERE oid = ss.reltoastrelid OR
oid = (SELECT indexrelid
FROM pg_index
WHERE indrelid = ss.reltoastrelid)
ORDER BY relname;
只有当宽度不能用最小单元表示时才会有
TOAST
可以统计表的大小 :
SELECT relname,relpages,reltuples
FROM pg_class ORDER BY relpages DESC;
更多关于pg_class的参数:http://www.postgres.cn/docs/9.6/catalog-pg-class.html
索引查看,使用下面sql
SELECT c2.relname, c2.relpages
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname = 'customers' AND
c.oid = i.indrelid AND
c2.oid = i.indexrelid
ORDER BY c2.relname;
按索引大小进行排序。
SELECT c2.relname, c2.relpages
FROM pg_class c, pg_class c2, pg_index i
WHERE c.oid = i.indrelid AND
c2.oid = i.indexrelid
ORDER BY c2.relpages DESC;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。