小编Bei*_*bei的帖子

我怎么知道Postgres表的统计数据是否是最新的?

在pgAdmin中,只要表的统计信息已过期,它就会提示:

建议运行VACUUM

表schema.table上的估计rowcount与实际rowcount明显不同.您应该在此表上运行VACUUM ANALYZE.

我用pgAdmin 3和Postgres 8.4.4测试了它,autovacuum = off.每当我单击已更改的表时,会立即显示提示.

假设我正在用Java创建一个基于Web的系统,如何检测表是否已过时,以便我可以在pgAdmin中显示提示?

由于我的应用程序的性质,这里有一些我必须遵循的规则:

  1. 我想知道pg_stats和pg_statistic中某个表的统计信息是否是最新的.

  2. 我无法在postgresql.conf中设置autovacuum标志.(换句话说,autovacuum标志可以打开或关闭.我无法控制它.我需要判断统计数据是否是最新的autovacuum标志是打开还是关闭.)

  3. 我无法每次都进行真空/分析以使其保持最新状态.

  4. 当用户选择一个表时,我需要在pg_stats和pg_statistic中没有反映此表的任何更新(例如drop,insert和update)时显示表已过时的提示.

通过分析pg_catalog.pg_stat_all_tables中的时间戳,似乎不可行.当然,如果以前没有分析过某个表,我可以检查它是否在last_analyze中有一个时间戳,以确定该表是否是最新的.但是,使用此方法,当已经有时间戳时,我无法检测表是否是最新的.换句话说,无论我向表中添加多少行,pg_stat_all_tables中的last_analyze时间戳总是用于第一次分析(假设autovacuum标志已关闭).因此,我只能首次显示"正在运行VACUUM"提示.

通过将last_analyze时间戳与当前时间戳进行比较,这也是不可行的.几天内可能没有对表格进行任何更新.一小时内可能会有大量的更新.

鉴于这种情况,我怎样才能始终判断表的统计信息是否是最新的?

postgresql statistics vacuum analyzer

17
推荐指数
2
解决办法
3万
查看次数

标签 统计

analyzer ×1

postgresql ×1

statistics ×1

vacuum ×1