参数——WAL和检查点
-
WAL缓冲区大小(必改)
通俗解释: 用于存放 预写日志(WAL)数据 的内存缓冲区
show wal_buffers;默认值 4MB
- 加大到16MB后,能提升
“大量并发连接”情况下的性能
- 加大到16MB后,能提升
-
WAL最大值
通俗解释: 磁盘中的WAL文件超过这个最大值,就会触发检查点
show max_wal_size;默认值 1GB
在9.5版本之前,这个叫checkpoint_segments,二者关系如下
max_wal_size = (3 * checkpoint_segments) * 16MB- 加大到4GB后,能提升
“大量数据导入”情况下的性能- 为什么要加大?
- 如果短时间大量数据写入,可能等不到5分钟就超过这个值,触发检查点
- 系统会警告
checkpoints are occurring too frequently- 所以要根据工作负荷来加大,避免频繁触发检查点,导致性能降低
- 为什么要加大?
- 加大到4GB后,能提升
-
WAL最小值
通俗解释: 如果触发检查点时,WAL文件大小达不到这个值,就会被回收复用,而不是删除
show min_wal_size;- 加大到1GB后,能更有效利用WAL文件
-
检查点触发后,执行的分散比例
通俗解释: 这个比例范围为0-1,总量是触发两次检查点之间的时间
checkpoint_completion_target默认值 0.5
- 加大到0.9后,可以在两次检查点之间的0.9比例完成写盘操作,写的会更慢些
- 缺点时出故障时影响恢复时间
- 加大到0.9后,可以在两次检查点之间的0.9比例完成写盘操作,写的会更慢些
-
WAL检查点之间的时间
通俗解释: 超过这个最大时间,就会触发检查点
show checkpoint_timeout;默认值 5min
- 若设置的小一点
- 可以更高频率提交,意味着减少了崩溃恢复时间
- 但频繁检查,会损害性能,需要权衡
- 只能在postgresql.conf文件中或在服务器命令行上设置
- 如果想要提高性能,建议增加到 30min
- 若设置的小一点