我正在尝试了解wal文件的行为。数据库的沃尔玛相关设置如下:
"min_wal_size" "2GB"
"max_wal_size" "20GB"
"wal_segment_size" "16MB"
"wal_keep_segments" "0"
"checkpoint_completion_target" "0.8"
"checkpoint_timeout" "15min"
wal文件的数量始终为1281或更高:
SELECT COUNT(*) FROM pg_ls_dir('pg_xlog') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
-- count 1281
据我了解,这意味着wal文件当前永远不会低于max_wal_size(1281 * 16 MB = 20496 MB = max_wal_size)??
我希望在达到检查点并将数据同步到磁盘后,沃尔玛文件的数量会减少到最大数量以下。但这显然不是事实。我想念什么?
pg_xlog
目录中WAL段文件的数量取决于min_wal_size
,max_wal_size
和先前检查点周期中生成的WAL数量。
当不再需要旧的日志段文件时,它们将被删除或回收(即,按编号顺序重命名为将来的段)。如果由于日志输出速率的短期峰值而超出max_wal_size
,则将删除不需要的段文件,直到系统恢复到此限制之下。低于该限制,系统将回收足够的WAL文件以满足估计的需求,直到下一个检查点为止,然后删除其余的文件
因此,根据您的观察,您可能正在观察“回收”效应-旧的WAL文件将被重命名而不是被删除。这样可以为磁盘节省一些I / O,尤其是在繁忙的系统上。
请记住,一旦某个特定文件被回收,在使用完该文件(即到达相关的LSN并checkpoint
)之前,不会再次考虑将该文件再次删除/回收。如果您的系统突然变得不那么活跃,那可能会花费很长时间。