我将 XenServer 与多个具有本地 postgres 数据库的虚拟机一起使用。即使当所有应用程序都未使用且数据库空闲时,每个虚拟机都会导致持续的存储网络流量,从而降低 iSCSI 存储设备的性能。
运行后iotop
我注意到 postgres stats collector process 进程不断地以大约 2 MByte/s 的速率写入磁盘。
然后我通过编辑禁用了统计信息的收集/etc/postgresql/8.4/main/postgresql.conf
:
#------------------------------------------------------------------------------
# RUNTIME STATISTICS
#------------------------------------------------------------------------------
# - Query/Index Statistics Collector -
track_activities = off
track_counts = off
...
如http://www.postgresql.org/docs/8.4/static/runtime-config-statistics.htm中所建议。
这消除了连续写入,但是关闭统计跟踪有什么缺点吗?
或者我应该将 pg_stat_tmp 目录放在 ramdisk 上以避免磁盘/网络流量?
该系统是最新的 Debian 6.0.7(压缩),带有 postgres 8.4 和大约 20 个数据库,大约 50 个表,总转储文件大小小于 100 MByte。
由于无法升级 PostgreSQL,我尝试将 pg_stat_tmp 目录放在 tmpfs 文件系统上,这带来了显着的性能改进。我现在在几十个系统上运行了几个月,没有任何明显的缺点。
为此,只需在 /etc/fstab 文件中挂载带有 tmpfs 的 pg_stat_tmp:
升级 PostgreSQL。至少确保您使用的是最新的 8.4 版本;如果这不能解决问题并且这样做是可行的,那么您应该升级到 9.2。自 8.4 以来,至少围绕统计信息收集器的一些问题已经得到解决,并且将在大约一年内达到生命周期结束。您可以通过搜索 pgsql-general 邮件列表存档找到更多信息。
从 8.4 升级到 9.2 应该不会有太多问题,但像往常一样,您必须阅读发行说明中每个 .0 版本(9.0、9.1 和 9.2)之间的升级部分。特别注意
standard_conforming_strings
和bytea_output
。同样的问题在这里。我也禁用
track_*
等。副作用
autovacuum
是使用这些收集的数据来启动。所以,我注意每晚安排一个
vacuumdb
.其他解决方案是设置
autovacuum_naptime
得足够高以使系统静止。