文件系统
一些操作系统支出多磁盘文件系统。一些情况下,这将很难看到哪一个文件系统最好。Postgressql通常在传统的Unix文件系统中表现最好,比如很多操作系统支持的BSD UFS/FFS 文件系统。UFS默认的8K块大小和Postgressql的分页大小一样。你可以在其上运行日志文件系统或基于日志的文件系统,但是这会增加fsync的先写日志开销。稍早的基于SvR3的文件系统变得太破碎化而无法达到很高的性能。
Linux的文件系统实在太多了,因此很难做出选择。并且没有一个是十全十美的:ext2不是完全崩溃安全,ext3,XFS和JFSare是基于日志的,而Reiser对小文件很完美而且也登载日志。journalling文件系统比ext2慢了一大截,不过它支持崩溃恢复,ext2最好别用。如果必须要用ext2的话,给它设置下同步。有些人建议ext3系统应该设置data=writebck。
NFS和别的远程文件系统不推荐用在Postgressql上。NFS的文件系统的语义和本地文件系统的语义不同,而这些差别将导致数据可靠度和奔溃恢复的出现问题。
多中央处理器
POSTRGEsql使用多进程模式,意味着每一个数据库都有自己的处理单元。因此,所有的多中央处理器操作系统都可以通过可用的cpu来spread多数据库。然后,如果只有一个数据库连接,那么它只能使用一个cpu。POSTGREsql不允许使用多线程来让一个进程使用多个cpu。
检查点(checkpoint事件)
当先写日志文件填满后,一个checkpoint事件会强制所有缓冲块进入硬盘好让日志文件再使用,Checkpoints也会定时自动执行,通常时间间隔是5分钟。如果有大量数据库写入,那么先写文件日志将被迅速填满,导致极度缓慢,因为所有的缓冲块都涌向了硬盘。
检查点(checkpoint事件)
checkpoint应该每几分钟产生一次。如果一分钟产生好几次的话,性能将会变差。为了判断checkpoint是否过于频繁,检查由checkpoint_warning产生的日志信息。如果你的checkpoint每30s内不止一次就会产生这个信息。
减少checkpoint频率包括增加在data/pg_xlog的先写日志文件。每一个文件为16M,因此对硬盘的影响是可见的。默认安装使用了最小数量的日志文件。为了减少checkpoint的频率,你需要增加这个参数:
-
checkpoint_segment=3
默认的值是3,增加这个值直到checkpoint每几分钟才产生一次。另一个日志文件:
-
LOG:XLogWrite:new log file created-consider increasing WAL_FILES