PostgreSQL 9.6了解Wal文件

我正在尝试了解wal文件的行为。数据库的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)??

我希望在达到检查点并将数据同步到磁盘后,wal文件的数量会减少到最大数量以下。但这显然不是事实。我想念什么?

wusjxm 回答:PostgreSQL 9.6了解Wal文件

per the documentation(添加了重点):

  

pg_xlog目录中WAL段文件的数量取决于min_wal_sizemax_wal_size以及先前检查点周期中生成的WAL数量。 当不再需要旧的日志段文件时,它们将被删除或回收(即重命名以按编号顺序成为将来的段)。如果由于日志输出速率的短期峰值而超出max_wal_size,则将删除不需要的段文件,直到系统恢复到此限制之下。低于该限制,系统将回收足够的WAL文件以满足估计的需求,直到下一个检查点为止,然后删除其余的

因此,根据您的观察,您可能正在观察“回收”效应-旧的WAL文件将被重命名而不是被删除。这样可以为磁盘节省一些I / O,尤其是在繁忙的系统上。

请记住,一旦某个特定文件被回收,在使用完该文件(即到达相关checkpoint)后,才会再次考虑将其删除/回收。如果您的系统突然变得不那么活跃,那可能会花费很长时间。

,

如果您的服务器非常繁忙,然后突然变得几乎处于空闲状态,则可能会导致日志失败的情况在max_wal_size上保留了很长时间。在决定是否删除或回收文件时,它很快就用完了文件,因此决定回收到max_wal_size以供预测的未来使用,而不是删除它们。一旦被回收,它们将永远都不会被删除,直到它们被使用为止(您可能会说那是一个错误),而且如果服务器现在大部分处于空闲状态,那么将需要很长时间才能使用它们,因此将它们删除。 >

本文链接:https://www.f2er.com/2885035.html

大家都在问