PG如何降低表统计信息延时更新产生性能问题的几率?

表结构:
ida int
idb int
name varchar(20)
info text

存在SQL:
select * from scott where ida=? and idb=?
select * from scott where ida=?
select * from scott where idb=?

存在索引:
ind_ida(ida)
ind_idb(idb)

数据分布:
表 1000000 rows
ida不同值个数1000
idb不同值个数900

sql执行计划:
select * from scott where ida=? and idb=?    --使用索引:ind_ida

场景一:
当再次插入90000条记录,ida不同值个数未发生变化,idb不同值个数为90900,但统计信息未触发更新阈值autovacuum_analyze_scale_factor,SQL仍使用原执行计划,导致数据库出现性能瓶颈

提问:基于此类场景有何优化措施能避免或尽量降低对数据库的影响?

参与5

1同行回答

jillmejillme课题专家组CIO某大型银行
这个的 我这边是从应用中控制的,写入数据量很多时候 手工进行一次统计信息收集显示全部

这个的 我这边是从应用中控制的,写入数据量很多时候 手工进行一次统计信息收集

收起
互联网服务 · 2023-03-31

ChatGPT 回答

针对这种场景,可以考虑以下优化措施:

1.手动触发VACUUM ANALYZE命令,更新统计信息,让优化器能够更准确地选择执行计划。

2.增加autovacuum_analyze_scale_factor的值,使得统计信息更新更频繁,以便更快地适应数据变化。

3.考虑使用分区表,将数据按照某个维度进行分区,比如按照时间、地区等,这样可以减少单个表的数据量,提高查询效率。

4.优化SQL语句,尽量避免全表扫描,使用索引等方式提高查询效率。

5.增加硬件资源,比如增加CPU、内存等,提高数据库的处理能力。

综上所述,对于这种场景,可以通过更新统计信息、使用分区表、优化SQL语句、增加硬件资源等方式来避免或降低对数据库的影响。

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2023-03-27
  • 关注会员:2 人
  • 问题浏览:1264
  • 最近回答:2023-03-31
  • X社区推广