postgres相关参数学习2(checkpoint)

checkpoints相关参数:
  checkpoint_segments:
  WAL log的最大数量,系统默认值是3。该值越大,在执行介质恢复时处理的数据量也越大,时间相对越长。
  checkpoint_timeout:
  系统自动执行checkpoint之间的最大时间间隔,同样间隔越大介质恢复的时间越长。系统默认值是5分钟。不建议频繁执行检查点。否则XLOG会产生很多的FULL PAGE WRITE(when full_page_writes=on)

  checkpoint_completion_target:
  该参数表示checkpoint的完成目标,系统默认值是0.5,也就是说每个checkpoint需要在checkpoints间隔时间的50%内完成。比如checkpoint_timeout为30min,那么checkpoint要在50*0.5=25分钟内完成检查点


  checkpoint_warning:
  系统默认值是30秒,如果checkpoints的实际发生间隔小于该参数,将会在server log中写入写入一条相关信息。可以通过设置为0禁用信息写入。

  checkpoint执行控制:
  1,数据量达到checkpoint_segments*16M时,系统自动触发;
  2,时间间隔达到checkpoint_timeout参数值时;
  3,用户发出checkpoint命令时。

建议设置

由于业务上还需要读写磁盘,同时PG目前的版本还需要垃圾回收,FREEZE等会产生IO的操作。因此不能让计算得到的峰值与磁盘实际IO能力相当,应该有所保留。

1、磁盘IOPS指标,写吞吐。(假设给25%用作 刷脏离散写、WAL顺序写)

2、如果按经验参数,评估出来磁盘能力不足(检查点实际需要的IO能力,与磁盘厂商给出的IO能力的25%不匹配),怎么办?

首先调大checkpoint_timeout参数,如果到最大值(1 DAY),依旧无法满足,则需要降低shared_buffers,以及相应的max_wal_size。

3、建议设置 log_checkpoints=on , 可以评估checkpoint的统计信息,用于帮助修正以上参数。

操作系统刷脏页设置

大内存机器,LINUX可能会遇到IO HANG的问题,原因也是刷脏页的配置不正确。

LINUX也有刷脏页的内核配置,默认是一个百分比,10%的脏页,后台进程开始刷脏页。如果产生脏页过快,到达20%时,用户进程也会帮助刷脏页。

因此如果内存越大,这个阈值就越大,而如果磁盘能力没有跟上,可能一次性会刷几十GB的脏页,导致磁盘的IO能力打爆,影响正常业务。

相关参数

1、os 内核参数

vm.dirty_background_bytes = 409600000  
vm.dirty_background_ratio = 0  
vm.dirty_bytes = 0  
vm.dirty_expire_centisecs = 3000  
vm.dirty_ratio = 95  
vm.dirty_writeback_centisecs = 100

2、数据库参数

shared_buffers = 8GB                    # min 128kB  
                                        # (change requires restart)  
  
# - Checkpoints -  
  
#checkpoint_timeout = 5min              # range 30s-1d  
#max_wal_size = 1GB  
#min_wal_size = 80MB  
#checkpoint_completion_target = 0.5     # checkpoint target duration, 0.0 - 1.0  
#checkpoint_flush_after = 256kB         # measured in pages, 0 disables  
#checkpoint_warning = 30s               # 0 disables  

 

你可能感兴趣的:(postgresql)