现象
向量存储量级超百万时,删除向量后索引无法自动重建,引发数据库查询耗时增加。
可能原因
PG数据库默认的自动真空(autovacuum)策略较为保守,无法及时回收删除向量产生的死元组,导致索引未能自动重建。
排查步骤
- 确认存储向量的PG数据库表为modeldata
- 执行查询语句查看当前表的自动真空配置参数: ``
sql SELECT relname, reloptions FROM pg_class WHERE relname = 'modeldata';`` - 若需查看真空任务执行进度,执行以下命令: ``
sql SELECT * FROM pg_stat_progress_vacuum WHERE datname = current_database();``
解决与验证
- 执行以下命令调整表的自动真空策略,优化死元组回收效率: ``
sql ALTER TABLE modeldata SET ( autovacuum_vacuum_scale_factor = 0.01, autovacuum_analyze_scale_factor = 0.02, autovacuum_vacuum_threshold = 1000, autovacuum_analyze_threshold = 1000, autovacuum_vacuum_cost_delay = 10, autovacuum_vacuum_cost_limit = 2000 );`` - 再次执行排查步骤中的查询语句,确认配置参数已生效。
- 执行锁表式的磁盘空间释放与索引重建命令: ``
sql VACUUM ANALYZE modeldata;`` - 执行进度查看命令,确认真空任务执行完成。
- 验证查询耗时恢复正常,死元组占比降低。