为什么我的RDS 突然变慢了?相信不少客户在使用RDS 中经常遇到的头疼问题。下面我将通过真实案例来分析一下用户在使用RDS 中慢的原因:
案例一:用户从PGSQL迁移到RDS后,发现RDS变慢了。
问题描述:用户的数据库(pgsql)迁移到RDS(mysql)后,发现相同的一条sql 语句,数据量百万级左右,在原来postgreSQL 中执行大概是0.015s,而在RDS 下直接运行是6分20秒左右,执行非常的慢,已经严重的影响了用户使用RDS 使用的信心。
可能原因:为什么在用户的数据库上执行只需要0.015s,而到RDS 后变为了6分20s?根据经验,很有可能是SQL 的执行计划改变了,而导致执行时间剧增。
问题排查:通过explain 查看sql 的执行计划,一步一步进行优化。
通过分析,我们可以从执行计划上分析b 表做了一个全表扫描(执行计划的最后一行),查看b 表中tid 并无索引,所以我们这里可以进行优化,来减少查询过程中关联的行数,来达到优化:
---------------------------------------------------------------------------------------------------------------------
我们可以看到执行计划中的rows 已经从452变为了2(执行计划的最后一行),
由于mysql 表关联只有nest loop join 这种算法,所以我们可以估算一下这里的优化:
原始执行一:1055789*1*1*1*1*452 扫描的行数
新执行计划二:1055789*1*1*1*1*2 扫描的行数
执行时间: