我有许多相当大的表(300-400表,〜30000000每行)。每天(每天一次)我要检查是否有新行插入到任何表。可能数量插入可以从0到30万行变化的行。行是不会被删除。
此刻,我检查是否使用近似数插入任何新行。然后将它与以前的(昨天)的结果进行比较。
SELECT reltuples FROM pg_class WHERE oid='tablename'::regclass;
我怀疑主要的事情:如何尽快如果,例如,3000个行将被插入(或5行插入)reltuples
将被更新?而且是近似计数这种情况下,一个好的解决方案?
我的配置参数为:
autovacuum_analyze_threshold: 50
autovacuum_analyze_scale_factor: 0.1
reltuples
将被更新每当VACUUM
(IR自动清理)运行,所以这种数通常具有20%的误差裕度。
你会得到来自表的统计信息视图表中的行数的更好的估计:
SELECT n_live_tup
FROM pg_stat_user_tables
WHERE schemaname = 'myschema' AND relname = 'mytable';
这个数是由统计收集器更新,因此它不能保证100%准确的(有涉及UDP套接字),并且它可能需要一些时间,数据修改的效果是可见的存在。
不过它往往比reltuples
更准确的估计。