查看表和DB的存储大小

Hologres兼容PostgreSQL,当前支持查看表或者DB的存储大小。本文将会为您介绍如何使用SQL语句查看表和DB的存储大小。

使用限制

  • 仅支持查看内部表的存储规格大小,不支持直接查看分区父表(查看分区父表返回结果是0),需要指定分区子表进行查看。如果查询到表的规格大小是0,则返回空值。

  • 仅Hologres V1.3.24及以上版本支持使用pg_relation_size函数查看已经开启Hologres Binlog表的Binlog存储量。

  • pg_relation_size函数统计的是表的存储量,监控指标采集的是实例在整个Pangu目录的文件存储量,Pangu文件包括表的存储量、元数据文件以及因写入、更新、删除产生的临时文件等,因此监控指标的存储量会稍微多于使用pg_relation_size函数查询的结果。

查看表的存储大小

  • 函数语法

    SELECT pg_relation_size('table_name');--返回单位是Byte
  • 参数说明

    参数

    说明

    table_name

    表示待查询的当前数据库下的表名称。

  • 返回值:返回值的单位是 Byte,类型为字符串。返回的数据为该表此刻的内存所占空间和物理磁盘空间。

    如果您需要提高可读性,可以使用pg_size_pretty函数进行查询,具体语法如下:

    --查看单表存储
    SELECT pg_size_pretty(pg_relation_size('table_name'));
    
    --查看所有表大小
    SELECT table_schema || '.' || table_name AS table_full_name, 
    pg_size_pretty(pg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name))) AS table_size,
    pg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name)) AS  order_size
    FROM information_schema.tables
    WHERE table_schema NOT IN ('pg_catalog','information_schema','hologres')
    ORDER BY order_size DESC;

查看Schema存储大小

  • 使用说明

    您可以通过执行SQL语句查看对应schema下面的所有表的大小。

  • 函数语法

    SELECT table_schema, pg_size_pretty(SUM(pg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name))::decimal)) AS schema_size
    FROM information_schema.tables 
    WHERE table_schema = '<schema_name>'
    GROUP BY table_schema;
  • 参数说明

    参数

    说明

    schema_name

    表示当前表所对应的schema名称。

  • 返回值:返回值的单位是 Byte。

查看DB的存储大小

  • 使用说明

    仅支持查看当前连接DB和该DB下内部表的存储规格大小。

  • 函数语法

    SELECT pg_database_size(current_database()); --返回单位是Byte
  • 参数说明

    参数

    说明

    current_database

    指代当前DB。您无需替换参数,直接执行函数命令语句即可查询当前DB的存储规格大小。

  • 返回值:返回值的单位是Byte。返回的数据为指定DB下面所有Hologres表的大小和DB下面产生的WAL(Write-Ahead Log)日志大小。

    如果您需要提高可读性,可以使用pg_size_pretty函数进行查询,具体语法如下:

    SELECT pg_size_pretty(pg_database_size(current_database())); --返回单位是KB或者MB等单位

查看表存储明细

Hologres从V2.1版本开始,支持通过hologres.hg_relation_size函数查看表的明细存储,包括数据、Binlog等存储明细。

  • 使用限制

    仅V2.1及以上版本Hologres实例支持使用hologres.hg_relation_size函数。

  • 函数语法

    SELECT hologres.hg_relation_size('<schema.table>','[data|binlog|mv|all]') ;
  • 参数说明

    参数

    说明

    schema.table

    表的Schema名称和表名称。

    [data|binlog|mv|all]

    可选参数,其中:

    • data:表数据的存储大小。

    • binlog:表Binlog的存储大小。

    • mv:如果为该表创建了物化视图,代表物化视图占用的存储大小。

    • all:表的总存储量。

  • 使用示例

    • 示例1:查看单表的数据存储。

      SELECT hologres.hg_relation_size('<schema.table>','data') ;
    • 示例2:查看单表的Binlog存储大小。

      SELECT hologres.hg_relation_size('<schema.table>','binlog') ;
    • 示例3:查看数据库下所有表的存储大小。

      SELECT table_schema || '.' || table_name AS table_full_name, 
      pg_size_pretty(hologres.hg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name),'data')) AS data_size,
      hologres.hg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name),'data') AS  order_size
      FROM information_schema.tables
      WHERE table_schema NOT IN ('pg_catalog','information_schema','hologres','hologres_statistic')
      ORDER BY order_size DESC;