当前位置:   article > 正文

PostgreSQL中表大小、索引大小_postgresql 表的大小

postgresql 表的大小

一、PostgreSQL中表大小、索引大小

需要了解每张表的具体大小,PostgreSQL提供了很多工具


1.1 来查看任意表的磁盘用量

每个表都有一个主要的堆磁盘文件,大多数数据都存储在其中。如果一个表有着可能会很宽(尺寸大)的列, 则另外还有一个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';
  • 1

在这里插入图片描述

  • pg_relation_filepath 在服务器上的相对位置。PGDATA的一个常见位置是 /var/lib/pgsql/data。由不同数据库实例所管理的多个集簇可以在同一台机器上共存
  • relpages 的为页的数量,每页大小为8k。(reltuples是行数)

在这里插入图片描述


每个页通常都是 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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

只有当宽度不能用最小单元表示时才会有TOAST

可以统计表的大小
在这里插入图片描述

SELECT  relname,relpages,reltuples 
FROM pg_class ORDER BY relpages DESC;
  • 1
  • 2

更多关于pg_class的参数:http://www.postgres.cn/docs/9.6/catalog-pg-class.html


1.2 索引

索引查看,使用下面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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述


按索引大小进行排序。

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;
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/266609
推荐阅读
相关标签
  

闽ICP备14008679号