Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

参数——WAL和检查点

  • WAL缓冲区大小(必改)

    通俗解释: 用于存放 预写日志(WAL)数据 的内存缓冲区

    show wal_buffers;
    

    默认值 4MB

    • 加大到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
        • 所以要根据工作负荷来加大,避免频繁触发检查点,导致性能降低
  • WAL最小值

    通俗解释: 如果触发检查点时,WAL文件大小达不到这个值,就会被回收复用,而不是删除

    show min_wal_size;
    
    • 加大到1GB后,能更有效利用WAL文件
  • 检查点触发后,执行的分散比例

    通俗解释: 这个比例范围为0-1,总量是触发两次检查点之间的时间

    checkpoint_completion_target
    

    默认值 0.5

    • 加大到0.9后,可以在两次检查点之间的0.9比例完成写盘操作,写的会更慢些
      • 缺点时出故障时影响恢复时间
  • WAL检查点之间的时间

    通俗解释: 超过这个最大时间,就会触发检查点

    show checkpoint_timeout;
    

    默认值 5min

    • 若设置的小一点
      • 可以更高频率提交,意味着减少了崩溃恢复时间
      • 但频繁检查,会损害性能,需要权衡
    • 只能在postgresql.conf文件中或在服务器命令行上设置
    • 如果想要提高性能,建议增加到 30min