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日志无法自动清除,需要手动进行清除。
执行以下命令,查看replication_slot的消费情况。
SELECT * FROM pg_replication_slots;
获取
active
字段为f
的inactive slot
,确认slot信息,如果不需要保留,则执行步骤3。执行以下命令,删除replication_slot。
SELECT pg_drop_replication_slot('slot_name');
说明其中,slot_name以实际获取的为准。
文档内容是否对您有帮助?