注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

How to estimate total number of WAL segments ?  

2011-03-18 14:15:08|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

         和Oracle 一样, PostgreSQL也有着比较完善的日志写入流程,也是在将缓存的数据
刷入到磁盘之前,先写日志, 这就是PostgreSQL WAL ( Write-Ahead Log )方式,中文为
预写日志方式, 那么PG的日志数据是如何确定各数的呢?这个问题困扰了我很久,今天总
算有了比较清明的理解,写出来,给有需要的人分享。

1--先看几个相关的参数
checkpoint_segments (integer)
Maximum number of log file segments between automatic WAL checkpoints (each segment is normally 16 megabytes). The default is three segments. Increasing this parameter can increase the amount of time needed for crash recovery. This parameter can only be set in the postgresql.conf file or on the server command line.

checkpoint_timeout (integer)
Maximum time between automatic WAL checkpoints, in seconds. The default is five minutes (5min). Increasing this parameter can increase the amount of time needed for crash recovery. This parameter can only be set in the postgresql.conf file or on the server command line.

checkpoint_completion_target (floating point)
Specifies the target of checkpoint completion, as a fraction of total time between checkpoints. The default is 0.5. This parameter can only be set in the postgresql.conf file or on the server command line.


2--最大的日志数据估计方法
     通常地说,WAL segment 最大个数不超过  ( 2 + checkpoint_completion_target )  *  checkpoint_segments + 1

    在流复制环境下, WAL 最大数不超过           wal_keep_segments + checkpoint_segments + 1

验证
3--主机 pg_xlog 日志数
[postgres@172_16_3_216 pg_root]$ ll $PGDATA/pg_xlog | wc -l
132

4--当前 checkpoint_segments 值
postgres=# show checkpoint_segments;
 checkpoint_segments
---------------------
 64
(1 row)

  备注: 当前数据库的 checkpoint_segments 的值为 64, 而目前操作系统上 wal segments 为 131
  ( 除去 pg_xlog 中的 archive_status), 上面的公式符合。
  
5--WAL SEGMENT 占用硬盘空间估计
      由于 wal segments 日志个数会在一个范围变化,因此占用空间会随着   wal segments 个数变化,
那么在设置  checkpoint_segments 参数时,需要考虑到PG SERVER 最多会产生多少个 wal segments
并且,并且最多会占用多少硬盘空间,下面是一个统计,前提条件: 每个 wal segments 为 16 M,
即系统的默认值。

How to estimate total number of  WAL segments ? - francs - My DBA LIFE

 

6--如何设置 WAL segments 大小?
       默认的 WAL segments  为 16 M, 这个参数在PG server 编译时指定,当执行./configure 时,指定
--with-wal-segsize=target_value 参数,即可设置。

 

 

总结:1  checkpoint_segments 值默认为 3, 这个值较小,建议设置成32以上,如果业务很繁忙,这个参数
               还应该调大,当然在恢复时也意味着恢复时间较长,这个需要综合考虑。
       
           2  checkpoint_completion_target 默读值为 0.5,这个通常保持默认值即可。

  评论这张
 
阅读(27173)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016