最近在协助用户进行系统重构,RDS测试选型自然成为了本项目的一个重点,但是用户在测试不同规格的时候发现大规格的实例性能居然不如小规格,4C32G规格性能比8C64G规格高出10%,其性能监控也是非常的正常,4C32G规格是8C64G规格资源消耗的一半,TPS也是相当,那问题到底出现在那里?
CPU消耗对比:
TPS监控:
从监控上没有看出端倪后,我们怀疑用户的业务测试模型可能不一致,所以采取分析SQL审计日志来分析问题,把top sql拿出来对比就可以一目了然问题的所在,所以重新开启压测,使用我们的专家分析系统来分析SQL日志,结果让人大吃所惊,一条truncate 语句映入眼:
可以看到truncate 语句在8C64G的规格中执行慢了30秒左右,这个时间恰好是整个测试相差的时间,为什么规格越大反而DDL truncate越慢?这个问题其实在5.5版本存在的一个问题,可以参考在2015年双11时候写过的一篇文章:RDS弹性升级后性能反而下降的案例,所以解决方案只要把实例升级到5.6就可以了。在这次问题排查中使用了很重要的SQL审计日志来发现两个实例规格的性能差异,该功能已经集成到RDS的专家系统中,帮助用户更好的分析使用数据库。