磁盘空间诊断

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进程处理不及时。

    解决思路:需及时清理。

  • 频繁更新/插入操作导致WAL日志增加。

    解决思路:WAL日志无法自动清除,需要手动进行清除。

    1. 执行以下命令,查看replication_slot的消费情况。

      SELECT * FROM pg_replication_slots;
    2. 获取active字段为finactive slot,确认slot信息,如果不需要保留,则执行步骤3。

    3. 执行以下命令,删除replication_slot。

      SELECT pg_drop_replication_slot('slot_name');
      说明

      其中,slot_name以实际获取的为准。