Postgres 统计收集器进程生成过多 I/O

Postgres 统计收集器进程生成过多 I/O

我正在使用 XenServer 和几台具有本地 postgres 数据库的虚拟机。即使所有应用程序都未使用且数据库处于空闲状态,每个虚拟机都会导致持续的存储网络流量,从而降低 iscsi 存储设备的性能。

运行后iotop我注意到 postgres 统计收集器进程正在以大约 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(squeeze),带有 postgres 8.4 和大约 20 个数据库,其中包含大约 50 个表,总转储文件大小小于 100 MByte。

答案1

由于无法升级 PostgreSQL,我尝试将 pg_stat_tmp 目录放在 tmpfs 文件系统上,这带来了显著的性能提升。现在,我在几十个系统上运行了几个月,没有发现任何明显的缺陷。

为此,只需在 /etc/fstab 文件中将 pg_stat_tmp 与 tmpfs 挂载即可:

# <file system> <mount point>                                <type>  <options>  <dump>  <pass>
tmpfs           /var/lib/postgresql/8.4/main/pg_stat_tmp     tmpfs   defaults,noatime,mode=1777,uid=postgres,gid=postgres,nosuid,nodev 0 0

答案2

升级 PostgreSQL。至少要确保你使用的是最新的 8.4 版本;如果这不能解决问题,而且这样做是可行的,那么你可能应该升级到 9.2。自 8.4 以来,至少已经解决了一些有关统计收集器的问题,并且将在大约一年内达到使用寿命。您可以通过以下方式获取更多信息搜索 pgsql-general 邮件列表档案

从 8.4 升级到 9.2 应该不会有太多问题,不过像往常一样必须阅读中间每个 .0 版本(9.0、9.1 和 9.2)的发行说明的升级部分。特别注意standard_conforming_stringsbytea_output

答案3

同样有此问题。我也禁用了track_*等等。

副作用是autovacuum使用这些收集到的数据来启动。

因此,我会精心安排每晚的时间vacuumdb

其他解决方案是设置autovacuum_naptime得足够高以使系统休息。

相关内容