ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Postgresql性能优化 (四)

Postgresql性能优化 (四)

原创 Linux操作系统 作者:charles_zx 时间:2010-12-02 14:57:22 0 删除 编辑
更新类: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博客 ” ,链接:https://blog.itpub.net/378235/viewspace-680803/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-05-27

  • 博文量
    177
  • 访问量
    140087