上次谈到了在FreeBSD环境下对于PgSQL的优化,说到了FreeBSD怎么可以不说说Linux呢?
这一点似乎在任何Linux下的优化都适用——重编内核,如果还在使用类似于Redhat AS3.x等2.4系列内核的Linux,尽量升级到2.6并同时开启内核参数中的 “抢占式内核”,类似的东西也不少,这里也不一一累述,大约提升性能在5%。
尽量自己编译PgSQL而不是使用现成的包:很多发行版为了考虑到兼容性,并未对编译参数做优化,统统采用了默认的I386配置,这很不利于性能的提升,如果有条件,可采用Intel自家的编译器,根据其宣扬的可以有12~25%的提升,虽然我并不苟同此数据,但性能会有提升是肯定的。安装方法:
./configure CC=/opt/bin/gcc CFLAGS='-O3 -pipe -march=P4'make
make installadduser postgresmkdir /usr/local/pgsql/datachown postgres /usr/local/pgsql/datasu - postgres/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/usr/local/pgsql/bin/postmaster -D \ /usr/local/pgsql/data >logfile 2>&1 &/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
由于我没有Intel的编译器,这里用了系统默认的GCC , 开启了-O3(大写O)优化和-pipe,对应CPU为P4系列(包括C4和P4志强)。
尽量使用8.1的版本,除非你有一系列难以突破的限制:8.1相比8.0版本不但增加了诸如自动优化、自动备份等新功能,而且性能上有了显著的提升,特别是在外键引用方面,更可以称得上是突飞猛进,大体估算了一下,原先我网站首页的生成时间需要0.33秒左右,升级后减少到0.28,排除其他因素的话性能提升也是可观的。升级方式:首先需要备份现有数据库,8.0系列内部可以通用数据库文件,你无需经历此步骤(当然为了安全起见还是备份一下为佳),8.0到8.1跨过了一个大版本号,数据文件无法通用pg_dumpall > backup_database.sql升级系统结束后:psql -f backup_database.sql postgres
在 Linux 2.4 以及之后的版本里,缺省的虚拟内存的设置对于 PgSQL而言不是最优的(32M)。原因也可能在于内核实现内存提交的方法导致出现了“过提交”内存(具体情况由于没有遇到,不作评述),如果其它进程的内存请求导致系统用光虚拟内存,那么内核可能会立即终止 PGSQL 服务器进程并会出具Out of memory报错,唯一的解救方法只能手工kill掉数据库进程,重启数据库。 修改方法为:sysctl -w kernel.shmmax=134217728sysctl -w kernel.shmall=2097152sysctl -w vm.overcommit_memory=2
或者直接echo进proc中去(我个人喜欢比较传统的操作)echo 134217728 >/proc/sys/kernel/shmmaxecho 2097152 >/proc/sys/kernel/shmallecho 2 > /proc/sys/vm/overcommit_memory
考虑到并不是每个人都乐意于每次开机都作此操作,最好还是修改/etc/sysctl.config文件添加相应的设置。
同样适用于FreeBSD的“HFS文件系统优化”。
其他关于配置文件的修改这里也不再复述,请参考上面关于FreeBSD下优化的相关资料。
附加一点:对于很多大负载的网站,数据库的瓶颈往往在于Max_connections设置,但有时一味修改配置文件中的相关参数很难有较大的性能提升,这里提供一条我原先在优化mysql数据库时惯用的手法,同样非常有效——同时开启数个Pgsql,让程序接口随机选择其一,但需要注意的是,任何操作系统都不允许一个TCP/IP端口绑定多个应用。编译配置的时候(configure)可添加“--with-pgport=x”参数这里的X为占用的端口号,或者修改相应配置选项即可。当然千万要注意数据文件存放的位置,否则你的网站会成为名副其实的抽奖网站。
很多朋友似乎很乐意于争论哪个操作系统强,哪个系统弱的问题。在不少技术论坛上这样的口水帖子甚至占据了帖子数的一大半。有什么意义呢?同样一种应用在同样的系统环境下经过优化之后的性能大大于操作系统之间的性能差异,当然前提是在同样的硬件环境下。本人曾经遇到过安装zend optimize之后性能大大下降的事情,系统优劣的最关键因素还是在于优化是否得当而非操作系统本身。

没有评论:
发表评论