PostgreSQL 9.6了解wal文件

PostgreSQL 9.6了解wal文件,postgresql,postgresql-9.6,wal,Postgresql,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_di

我正在努力了解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_大小1281*16 MB=20496 MB=max_wal_大小

我希望在到达检查点并将数据同步到磁盘后,wal文件的数量会立即减少到最大值以下。但情况显然并非如此。我遗漏了什么?

作为重点补充:

pg_xlog目录中WAL段文件的数量取决于最小WAL_大小、最大WAL_大小以及在以前的检查点周期中生成的WAL数量。当不再需要旧的日志段文件时,它们将被删除或回收,即重命名为编号序列中的未来段。如果由于日志输出速率的短期峰值,超过了最大wal大小,则不需要的段文件将被删除,直到系统回到该限制之下。低于该限制,系统将回收足够的WAL文件,以满足在下一个检查点之前的估计需求,并删除其余文件

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

请记住,一旦某个特定文件被回收,在其被使用之前(即达到相关LSN并进行检查点),不会重新考虑删除/回收该文件。如果您的系统突然变得不那么活跃,这可能需要很长时间。

如重点所述:

pg_xlog目录中WAL段文件的数量取决于最小WAL_大小、最大WAL_大小以及在以前的检查点周期中生成的WAL数量。当不再需要旧的日志段文件时,它们将被删除或回收,即重命名为编号序列中的未来段。如果由于日志输出速率的短期峰值,超过了最大wal大小,则不需要的段文件将被删除,直到系统回到该限制之下。低于该限制,系统将回收足够的WAL文件,以满足在下一个检查点之前的估计需求,并删除其余文件

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


请记住,一旦某个特定文件被回收,在其被使用之前(即达到相关LSN并进行检查点),不会重新考虑删除/回收该文件。如果您的系统突然变得不那么活跃,这可能需要很长时间。

如果您的服务器非常繁忙,然后突然变得大部分空闲,您可能会遇到日志失败的情况,日志会在很长时间内保持在最大日志大小。在决定是否删除或回收这些文件时,它很快就用完了这些文件,因此决定回收到最大容量,以备将来使用,而不是删除它们。一旦回收,它们将永远不会被删除,直到它们被使用。你可以说这是一个bug,如果服务器现在大部分空闲,那么它们将需要很长时间才能被使用并被删除。

如果你的服务器非常忙,然后突然变得大部分空闲,您可能会遇到日志失败的情况,日志会在很长一段时间内保持最大值。在决定是否删除或回收这些文件时,它很快就用完了这些文件,因此决定回收到最大容量,以备将来使用,而不是删除它们。一旦回收,它们将永远不会被删除,直到它们被使用。你可以说这是一个bug,如果服务器现在大部分处于空闲状态,那么它们将需要很长时间才能被使用和删除。

谢谢你的解释。这对我的系统意味着什么?我应该增加最大值还是减少检查点超时?或者这完全正常,我不应该做任何事情?你的pg_xlog分区有多大?就我个人而言,如果你不希望定期出现更多的此类活动高峰,我就不谈了。Postgres不会根据它可能给您的警告的配置来阻止WAL活动,但您不应该看到服务中的任何中断。正如文档中提到的那样,增加最大容量可能会对您不利:它可能会增加崩溃恢复的时间。如果这些峰值经常发生呢?我在调查可能与磁盘I/o问题或瓶颈有关的查询性能的定期下降时看到了这种行为。我认为答案并不一定简单,因为还需要一些额外的数据点。您是否可以从日志中提供任何信息,例如。,说检查点发生得太频繁的消息?您是否有任何图表表明性能下降与检查点活动一致
城市?您甚至可能会遇到共享缓冲区设置过高的问题,从而导致大量缓存刷新到磁盘。试图诊断所有可能超出这个问题范围的问题,尽管我愿意在这里打开聊天室进一步讨论,谢谢你的解释。这对我的系统意味着什么?我应该增加最大值还是减少检查点超时?或者这完全正常,我不应该做任何事情?你的pg_xlog分区有多大?就我个人而言,如果你不希望定期出现更多的此类活动高峰,我就不谈了。Postgres不会根据它可能给您的警告的配置来阻止WAL活动,但您不应该看到服务中的任何中断。正如文档中提到的那样,增加最大容量可能会对您不利:它可能会增加崩溃恢复的时间。如果这些峰值经常发生呢?我在调查可能与磁盘I/o问题或瓶颈有关的查询性能的定期下降时看到了这种行为。我认为答案并不一定简单,因为还需要一些额外的数据点。您是否可以从日志中提供任何信息,例如。,说检查点发生得太频繁的消息?您是否有任何图表表明性能下降与检查点活动一致?您甚至可能会遇到共享缓冲区设置过高的问题,从而导致大量缓存刷新到磁盘。试图诊断所有可能超出这个问题范围的问题,尽管我愿意在这里打开聊天室,进一步讨论