RDS和自建数据库性能差异问题
更新时间:
问题描述
RDS数据库性能和自建数据库性能存在差异
问题原因
-
内核小版本不同
-
执行计划不同
-
统计信息存在差异、碎片率高
-
参数设置不同
-
实例负载存在差异
解决方案
1)因内核小版本不同导致的差异
内核小版本不同,优化器就会有所差异,比如8.0.20及之后的版本相较8.0.20之前对于join类sql执行效率显著增加,因为8.0.20及之后hash join 支持了更多的场景。
内核小版本查看命令:select @@version;
如RDS内核小版本较低,建议升级到更高的版本。
2)执行计划不同
可以分别在RDS以及自建数据库执行explain sql,查看执行计划是否相同。
MySQL优化器会尽可能的找到一个最优的执行方案,并用最小的代价去执行SQL,但是也会因统计信息或者其它运行机制的原因存在选择较为低效索引的情况。
可以先执行analyze重新统计下表信息,然后再执行下,如依旧选择了低效的索引,那么需要force index 来强行指定索引。
3)碎片率高
碎片率会影响sql的执行效率,如表删除了大量的数据或者频繁执行DML操作,可以使用optimize回收下碎片。
4)参数设置不同
buffer大小设置不同、AHI是否开启都会影响sql的执行效率,可以对比下两个实例的参数差异,根据实例规格酌情修改下。
5)实例负载不同
对自建以及云数据库进行sql执行效率测试时,需要保证实例无资源瓶颈。
建议在业务低峰期测试以防因锁以及资源瓶颈带来的影响。
适用范围
- RDS For MySQL
文档内容是否对您有帮助?