分析查询效率异常降低的问题
问题现象
通常在几十毫秒内完成的查询,有时会突然需要几秒的时间完成;而通常需要几秒完成的查询,有时需要半小时才能完成。
处理办法
通过下列的操作步骤,分析查询效率异常降低的原因。
-
使用analyze命令分析数据库。
analyze命令更新所有表中数据大小以及属性等相关统计信息,建议在作业压力较小时执行。如果此命令执行后性能恢复或者有所提升,则表明autovacuum未能很好的完成它的工作,有待进一步分析。
-
检查查询语句是否返回了多余的数据信息。
例如,如果查询语句先查询一个表中所有的记录,而只用到结果中的前10条记录。对于包含50条记录的表,查询速度较快;但是,当表中包含的记录达到50000,查询效率将会有所下降。 如果业务应用中存在只需要部分数据信息,但是查询语句却是返回所有信息的情况,建议修改查询语句,增加LIMIT子句来限制返回的记录数。这样使数据库优化器有了一定的优化空间,一定程度上会提升查询效率。
-
检查查询语句单独运行时是否仍然较慢。
尝试在数据库没有其他查询或查询较少的时候运行查询语句,并观察运行效率。如果效率较高,则说明可能是由于之前运行数据库系统的主机负载过大导致查询低效。此外,还可能是由于执行计划比较低效,但是由于主机硬件较快使得查询效率较高。
-
检查重复相同查询语句的执行效率。
查询效率低的一个重要原因是查询所需信息没有缓存在内存中,这可能是由于内存资源紧张,缓存信息被其他查询处理覆盖。重复执行相同的查询语句,如果后续执行的查询语句效率提升,则可能是由于上述原因导致。