Postgres GIN 索引性能下降
Postgres GIN Index Performance Degregation
我在 table、t1
、JSONB
列 a_col
上有一个 Postgres GIN
索引。
CREATE INDEX i_1 ON t1 USING gin (t1.a_col)
这需要约 2 秒的查询 运行时间减少到约 50 毫秒。
这个 table 有点活跃,每天获取约 1k 行新数据,没有 updates/deletes。
我看到的问题是这个索引的性能在几百次写入后急剧下降 - 查询性能回落到 ~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
开始 运行 频繁移动并开始看到更一致的性能。
我在 table、t1
、JSONB
列 a_col
上有一个 Postgres GIN
索引。
CREATE INDEX i_1 ON t1 USING gin (t1.a_col)
这需要约 2 秒的查询 运行时间减少到约 50 毫秒。
这个 table 有点活跃,每天获取约 1k 行新数据,没有 updates/deletes。
我看到的问题是这个索引的性能在几百次写入后急剧下降 - 查询性能回落到 ~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
开始 运行 频繁移动并开始看到更一致的性能。