关于RDS Postgresql 性能问题的调优建议,可以先尝试以下以种方法:
1. 确认启用auto vacuum
RDS postgresql应该默认启用了auto vacuum,通过下面的语句确认改选项是否打开。
select * from pg_settings where name like ‘autovacuum%’
2. 创建Index
可以执行explain (query text)或explain (buffers true, analyze true, verbose true) (query text)命令,查看SQL的执行计划(注意,前者不会实际执行SQL,后者会实际执行而且能得到详细的执行信息),对其中的Table Scan涉及的表,建立索引。
3. Reindex Table/Index
对于现有index,如果性能不佳的话,可以测试下reindex,看是否性能有所提升。
REINDEX INDEX my_index;
4. 创建数据分区
数据库表分区把一个大的物理表分成若干个小的物理表,并使得这些小物理表在逻辑上可以被当成一张表来使用。
- 在特定场景下,查询性能极大提高,尤其是当大部分经常访问的数据记录在一个或少数几个分区表上时。表分区减小了索引的大小,并使得常访问的分区表的索引更容易保存于内存中。
- 当查询或者更新访问一个或少数几个分区表中的大部分数据时,可以通过顺序扫描该分区表而非使用大表索引来提高性能。
5. 优化RDS的实例类型
现有RDS的实例类型可以按照计算和内存容量做适当的调整,优化存储类型及预置IOPS,如有必要,可以适当配置read replica或Elasticache增强SQL查询性能。