有没有办法只清除 Postgres 统计信息 xact_commit 和 xact_rollback?
Is there a way to clear Postgres stats xact_commit and xact_rollback only?
我正在使用一个由 icinga2 监控的 postgres 数据库,我们的一位监控器正在查看数据库的提交率:
select
round(100.*sd.xact_commit/(sd.xact_commit+sd.xact_rollback), 2) AS dcommitratio,
d.datname,
r.rolname AS rolname
FROM pg_stat_database sd
JOIN pg_database d ON (d.oid=sd.datid)
JOIN pg_roles r ON (r.oid=d.datdba)
WHERE sd.xact_commit+sd.xact_rollback<>0;
问题是最近一个应用程序有一个错误(现已修复!),大大增加了回滚次数,以至于现在的提交率只有78%,而且每天都在触发警报。
我可以运行 pg_stats_clear(),但是有没有办法只清除这两个计数器?我不想无意中清除任何其他必要的统计信息,例如 autovaccuum 或查询优化器使用的任何统计信息。或者,pg_stats_clear() 是否被认为对 运行 安全?
不幸的是,重置 PostgreSQL 统计信息是孤注一掷的。
但我想说你的监控系统无论如何都在监控错误的东西。您不应监控 xact_commit
和 xact_rollback
的绝对值,而应监控自上次检查以来值的 变化。
否则您将无法及时发现潜在问题:如果已经有好几个月的正常运行,则需要很长时间的不当行为才能明显改变比率。
我正在使用一个由 icinga2 监控的 postgres 数据库,我们的一位监控器正在查看数据库的提交率:
select
round(100.*sd.xact_commit/(sd.xact_commit+sd.xact_rollback), 2) AS dcommitratio,
d.datname,
r.rolname AS rolname
FROM pg_stat_database sd
JOIN pg_database d ON (d.oid=sd.datid)
JOIN pg_roles r ON (r.oid=d.datdba)
WHERE sd.xact_commit+sd.xact_rollback<>0;
问题是最近一个应用程序有一个错误(现已修复!),大大增加了回滚次数,以至于现在的提交率只有78%,而且每天都在触发警报。
我可以运行 pg_stats_clear(),但是有没有办法只清除这两个计数器?我不想无意中清除任何其他必要的统计信息,例如 autovaccuum 或查询优化器使用的任何统计信息。或者,pg_stats_clear() 是否被认为对 运行 安全?
不幸的是,重置 PostgreSQL 统计信息是孤注一掷的。
但我想说你的监控系统无论如何都在监控错误的东西。您不应监控 xact_commit
和 xact_rollback
的绝对值,而应监控自上次检查以来值的 变化。
否则您将无法及时发现潜在问题:如果已经有好几个月的正常运行,则需要很长时间的不当行为才能明显改变比率。