PolarDB PostgreSQL数据库主体空间主要被用户数据和WAL日志占用。

查询数据空间

查询数据空间包括以下内容:

  • 数据库

    通过PG客户端执行\l ,可以查看每个数据库的空间占用情况注意该操作需要遍历目录树,会有较高的CPU和IO开销。

  • 对于占用空间较大的数据库,可以通过客户端连接到该数据库,执行\d 查看该数据库每个表的空间占用情况。

查询WAL日志

执行以下SQL可查看当前WAL日志占用空间:
SELECT pg_size_pretty(SUM(size)) FROM pg_ls_waldir();
一般WAL占用空间较大有以下几种原因:
  • 参数 wal_keep_segments 设置过大。参数 wal_keep_segments 表示最少保留的WAL文件数量。

    解决思路:可通过 SHOW wal_keep_segments检查参数设置。此外可通过SHOW wal_segment_size获知单个WAL文件大小,帮助预估WAL最少会占用多少空间。

  • 在 archive_mode=on 的情况下,WAL文件没有及时归档。

    解决思路:可观察配置项 archive_command 是否配置正常。

  • pg_replication_slots 同步延迟过大或存在活跃状态为 false 的复制槽。

    解决思路:需进一步检查复制槽连接是否正常。

  • checkpoint进程处理不及时。

    解决思路:需及时清理。