我在桌子上有一个Postgres GIN
指数,t1
,在JSONB
列a_col
上。
CREATE INDEX i_1 ON t1 USING gin (t1.a_col)
这需要约2秒的查询运行时间到~50ms。
这个表有些活跃,每天需要大约1k个新行数据,没有更新/删除。
我看到的问题是这个索引的性能在几百次写入后急剧下降 - 查询性能回落到~2s。
运行reindex
操作后问题得以解决。
REINDEX INDEX i_1
但这就留下了一个问题是什么推动指数运行如此糟糕?
在跑步的时候
select * from pg_stat_all_tables where relname = 't1'
我看到n_mod_since_analyze
有超过2k排,last_autoanalyze
已经好几天了。
通过将autovacuum_analyze_scale_factor
的值从0.05
下降到0.002
,autoanalyze
开始经常移动并开始看到更稳定的表现。