postgresql最大连接数修改.doc
文本预览下载声明
Postgresql中如何通过SQL语句查询在线连接数?
SELECT * FROM pg_stat_activity
pgsql postgresql 最大连接数修改
2008-09-25 20:30
本文根据Pgsql手册的内容整理而来。一直在用Pgsql,这些天有种想要将其优化到底的想法,对其做了如下改动:FreeBSD内核的修改首先,察看几个内核数值 :#sysctl -a | grep shmall#sysctl -a | grep shmmax#sysctl -a | grep semmni# sysctl -a | grep semmnsshmall 为可用共享内存大小,以 4KB 页为单位计算,即最终的结果*4才是你共享内存的大小数。系统默认为8192,32M。怎么也要128以上吧?如果你收到来自shmget的类似Invalid argument这样的错误信息,那么很有可能是你已经超过这个限制了。shmmax为最大共享内存大小,这个值至少应该大于 250kB + 8.2 kB * shared buffers + 14.2 kB *max connectionssemmni知该怎么翻译好,应该是“信号灯标示符的最小值”之类的意思。由于pgsql每16个连接占据一个“信号灯”且每16个连接之后还会有一个备用的连接,故理论上这个值应该且必须大于max_connections / 16 ,系统默认非常保守,只有10。semmns,原理同上,这个值应该设置为大于(max_connections / 16) *17+10,经过测试,这个值减去15,基本上就是max_connctions能设置的最大数值。我的设置为(注:服务器内存256M)kern.ipc.shmall=32768kern.ipc.shmmax=134217728kern.ipc.semmap=256kern.ipc.semmni=256kern.ipc.semmns=512kern.ipc.semmnu=256需要注意的是,semmni和semmns两个参数不可通过sysctl设置,只能选择编进内核或者修改/boot/loader.conf。对于其他参数可以直接修改/etc/sysctl.conf文件或者内核配置文件中添加options的方法,考虑到日后调整方便,建议采用前一方法。修改成功后重启机器(不嫌麻烦可以手动添加)。#reboot以上几个数值解决了很多BSD用户碰到的修改了Pg配置而无法启动pg的尴尬修改postgresql.conf这里修改起来就比较直观了。一般情况下设置maintenance_work_mem和checkpoint_segments会有不错的性能提升,但对于高负荷情况下主要就是shared buffers和max connections。这里默认的配置文件中也有比较详细的介绍。重启pgsql:#/usr/local/etc/rc.d/010.pgsql.sh restart如果你还有足够的勇气时间以及金钱使用64位的操作系统、更大的内存、更快的硬盘——废话!将数据文件和系统文件放置在两个卷上(可以使用ln作连接)。将数据文件所在分区的文件系统转化为Solaris。这种格式非常适合数据库存储与查询,效率可提高约5%。开启内核的MFS,将一部分内存模拟成磁盘存放数据文件。这在少量数据的情况下可以尝试,但可靠性下降,适合只读不写的数据库。适当调高WAL预写缓冲,但这意味着系统可靠性下降。修改make.conf ,添加-O3编译参数,重新编译PGSQL和kernel,当然这是在连使用-O2和所有优化参数之后仍无济于事之后。效率提升1%sysctl -w kern.ipc.shmall=128000sysctl -w kern.ipc.shmmax=524288000sysctl -w kern.ipc.semmap=256/boot/loader.confkern.ipc.semmni=256kern.ipc.semmns=690kern.ipc.semmnu=2048
显示全部