我有许多很大的表(300-400个表,每个表约3000万行)。每天(每天一次)我必须检查是否有任何新行插入到这些表中的任何一个中。可能插入的行数可能从0到3000万行不等。行不会被删除。
目前,我使用近似计数检查是否插入了任何新行。然后将其与之前(昨天)的结果进行比较。
SELECT reltuples FROM pg_class WHERE oid='tablename'::regclass;
我主要怀疑的是:例如,如果将插入3000行(或插入5行),reltuples
将会在多久后更新?对于这种情况,近似计数是一个好的解决方案吗?
我的配置参数是:
autovacuum_analyze_threshold: 50
autovacuum_analyze_scale_factor: 0.1
答案 0 :(得分:1)
\\
将在reltuples
(自动真空)运行时进行更新,因此该数字通常具有20%的错误余量。
您将从表格统计信息视图中更好地估算表格中的行数:
VACUUM
此数字由统计信息收集器更新,因此不能保证它是100%准确的(涉及UDP套接字),并且可能需要一些时间才能看到数据修改的效果。
还是比SELECT n_live_tup
FROM pg_stat_user_tables
WHERE schemaname = 'myschema' AND relname = 'mytable';
更准确。