Postgresql性能优化 (四)

更新类: wal_sync_method参数

  向磁盘强制更新 WAL 数据的方法。在linux环境里可以使用fsync,fdatasync,open_sync三种方式。那种方式最快呢?可以用postgresql代码里面的test_fsync这个工具来测试。8.3版本以后才有这个工具好像。。。。

$ cd (源代码)postgresq-8.4.5/src/tools/fsync
$make
$./test_fsync

然后设置为其中最快的一种方式就行了。

例子:
open o_sync, write 8.xxx
write, fdatasync 4.xxxx
write, fsync  4.xxxx

默认的fsync方式最快。 这个结果随着硬件和OS的不同会有很大的变化,系统有什么变更的时候,最好执行以下看看。

更新类:
checkpoints相关参数

checkpoint就是把共有内存里面更新过的数据写道磁盘(磁盘缓存)里面的处理。有两个参数控制写入的时机和频率,两个参数同时有效,满足任何一个条件都会执行写入处理。(应该是。。^_^;)

checkpoint_segments:定量,写入大小。 一个是16MB,默认是3,所以就是48MB。到了这个量就会调用写入处理。
checkpoint_timeout:定时,写入间隔。默认是5min(五分种)。过了5分钟就调入写入处理。

这两个参数很容易理解,而判断设置的合适不合适,就要看实际的运用了。
如果日志文件里面频繁出现下列的提示,就要考虑调整上述两个参数了。

HINT: Consider increasing the configuration parameter "checkpoint_segments".
LOG: checkpoints are occurring too frequently (25 seconds apart)

这个提示说明,共享内存里面的数据更新的很频繁,就算写入磁盘之后,马上又会被更新。这时就可以加大一下写入间隔和写入大小,再看看效果。但是如果在vacuum或者在定时处理的时候出现上述提示的话,基本可以不理会。

另外还有一个参数,checkpoint_completion_target,是控制写入处理的分步程度的。
默认是0.5,也就是说,一次需要写入的内容,实际上不是一次全部完成,而是在写入间隔中分步完成的。

例如:
checkpoint_timeout是5分钟,而 checkpoint_completion_target是0.5的话,
那么实际上是用了2分30秒来分步写入变更过的数据。每次写入不需要大量的缓存,可以加快写入效率。
当然是越分步越好了,所以推荐设置成0.9。 当然不能超过1啦,会跟下一次的写入发生冲突。


更新类:wal_buffers 参数

WAL数据用到的内存大小。将使用OS的内存,而不是postgresql的空闲内存。更新大量数据的时候,写入处理会使用这个空间,加快写入速度。 更改之后需要重新启动数据库,所以事先设置得大一点比较方便。比如5MB。

注:这个参数不太明白。。。。 m(__)m

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/378235/viewspace-680803/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/378235/viewspace-680803/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值