RDS弹性升级后性能反而下降的排查

         刚刚结束的2015年双11,天猫以912亿的成交量再次打破去年的记录成为一个奇迹,大家可能不知道,这些天猫的订单最后的处理都是放在阿里云聚石塔的机房完成,从2012年开始,淘宝的ISV,商家就开始把他们的订单,CRM后台系统逐渐迁移到云上,最核心的数据库就是存放在RDS中。

        双11之前用户都会进行大批量的弹性升级,期间有较多用户反馈,在弹性升级后性能出现了大幅度的下降,其中一个用户有两个RDS,一个RDS进行了弹性升级,另外一个RDS没有弹性升级,结果弹性升级后的RDS反而出现了性能下降,这让我们反思不得其解。RDS的弹性升级包括了两部分,一部分是磁盘容量的升级,另一部分是内存容量的升级(内存升级会同时升级数据库的连接数,CPU,IOPS),那么是什么原因导致了性能下降?

       1.是不是弹性升级后,后端的DB性能提升,前端的流量增加,导致后端DB响应缓慢?

       通过后端的监控查看,数据库的QPS并没有显著的增加,但是RT却是增加了许多,所以此种情况排除。

       2.是不是SQL的执行计划发生改变,导致数据库的性能降低?

       通过监控发现即使是普通的insert 语句也会出现执行缓慢的情况,慢日志出现了较多非常简单的SQL,所以此种情况排除。

       3.看到有非常简单的SQL也执行缓慢,排查主机是否存在资源瓶颈?

       通过监控显示,实例所在的物理主机的压力非常的低,不是主机的资源争抢导致的性能瓶颈,所以此种情况排除。

       4.在排除了以上可能的情况后,在数据库连接出现较多连接堆积的时候,进行一次pstack查看数据库中连接到底在等待些什么:

#0  0x00000000008d3fd9 in buf_LRU_invalidate_tablespace ()
#1  0x0000000000904ef6 in fil_delete_tablespace ()
#2  0x00000000008627cf in row_drop_table_for_mysql ()
#3  0x000000000084d64e in ha_innobase::delete_table(char const*) ()
#4  0x0000000000554368 in rm_temporary_table(handlerton*, char*) ()
#5  0x0000000000556ea2 in close_temporary(TABLE*, bool, bool) ()
#6  0x000000000055a878 in drop_temporary_table(THD*, TABLE_LIST*, bool*)
#7  0x0000000000600939 in mysql_rm_table_no_locks(THD*, TABLE_LIST*)
#8  0x00000000006016dd in mysql_rm_table(THD*, TABLE_LIST*, char, char) ()
#9  0x0000000000599b35 in mysql_execute_command(THD*) ()
#10 0x0000000000788629 in sp_instr_stmt::exec_core(THD*, unsigned int*) ()
#11 0x000000000078d267 in sp_lex_keeper::reset_lex_and_exec_core(THD*, unsigned int*, bool, sp_instr*) ()
#12 0x000000000078d724 in sp_instr_stmt::execute(THD*, unsigned int*) ()
#13 0x000000000078b1b3 in sp_head::execute(THD*, bool) ()
#14 0x000000000078c587 in sp_head::execute_procedure(THD*, List<Item>*)
#15 0x0000000000597f84 in mysql_execute_command(THD*) ()
#16 0x000000000059bed4 in mysql_parse(THD*, char*,  Parser_state*) ()
#17 0x000000000059deac in dispatch_command(enum_server_command, )
#18 0x0000000000641b8d in do_handle_one_connection(THD*) ()
#19 0x0000000000641cdc in handle_one_connection ()
#20 0x0000003bd6807851 in start_thread () from /lib64/libpthread.so.0
#21 0x0000003bd64e767d in clone () from /lib64/libc.so.6

         看到了buf_LRU_invalidate_tablespace 这个函数后,其实就豁然开朗了,用户业务中频繁的drop table,在5.5版本DROP TABLE操作会对innodb的整个buffer pool的LRU链进行两次扫描(DROP期间的扫描操作会持有buf_pool::mutex,导致整个数据库hang主),如果内存很大,则会导致阻塞时间加长(5.6版本改进只扫描flush list,则会大大降低影响),相关的bug列表可以参考:

http://bugs.mysql.com/bug.php?id=64284

http://bugs.mysql.com/bug.php?id=51325

         该如何解决此问题?其实有三种办法,第一就是在将用户的实例内存降级,减小DROP期间的影响;第二就是将实例的版本升级到5.6版本;第三就是调整应用中的业务,优化Drop table的业务。最终采取了最简单的办法,就是把实例的内存降低回原来的规格后,应用恢复正常。

         这是今年双11比较普遍的一个问题,用户升级完规格后性能反而出现下降,所以如果你的应用中如果有大量的drop table,同时数据库的版本是MySQL 5.5,则建议升级到5.6版本(注意5.6版本开启了GTID,应用程序中不要有create  temporary table的操作)。

时间: 2024-10-30 06:37:13

RDS弹性升级后性能反而下降的排查的相关文章

RDS弹性升级后性能反而下降的案例

刚刚结束的2015年双11,天猫以912亿的成交量再次打破去年的记录成为一个奇迹,大家可能不知道,这些天猫的订单最后的处理都是放在阿里云聚石塔的机房完成,从2012年开始,淘宝的ISV,商家就开始把他们的订单,CRM后台系统逐渐迁移到云上,最核心的数据库就是存放在RDS中. 双11之前用户都会进行大批量的弹性升级,期间有较多用户反馈,在弹性升级后性能出现了大幅度的下降,其中由一个用户有两个RDS,一个RDS进行了弹性升级,另外一个RDS没有出现弹性升级,结果弹性升级后的RDS反而出现了性能下降,

弹性升级诀窍分享:让双11来的更猛烈些吧

全面赋能,双11电商解决方案上新,全新75折:https://www.aliyun.com/solution/ecommerce/act/huhang1111 9月23日由阿里云主办的第二期<电商大咖直播:备战双11最佳实践>线上分享圆满结束,来自网店管家的CEO刘义分享了弹性升级在电商大促中的应用. 本次视频直播的整理文章整理完毕,如下内容. 关于网店管家 网店管家是电商ERP系统.网店管家的产品体系如上图所示.早年的电商ERP是整个订单的全链路的处理,即从订单的下载到订单的审核.财务的审核

一次数据库上云迁移性能下降的排查

背景介绍: 某客户目前正在将本地的业务系统迁移上云,测试过程中发现后台运营系统,在rds上运行时间明显要比线下PC上自建数据库运行时间要慢1倍,导致客户系统割接延期的风险.用户线下一台PC服务器的性能居然还比顶配的RDS跑的快,这让用户对RDS的性能产生了质疑,需要立刻调查原因. 问题分析: 通常SQL的执行时间在同等数据量的情况下发生变化主要有以下一些场景,其主要原因是由于优化器生成的执行计划发生了改变,这样则会导致SQL的执行时间发生较大的变化,当然可能变慢,也有可能变快,变慢是我们不想看到

RDS for MySQL CPU 性能问题浅析

RDS for MySQL CPU 性能问题浅析 1. 原因 1.1 应用负载高 1.2 查询执行成本高 2. 解决方法2.1 相关工具 2.2 应用负载高 2.3 查询语句执行成本高 3. 避免出现的一般原则 RDS for MySQL 实例在日常使用中,会碰到 CPU 使用率达到 100% 的情况.比如: 1. 原因 根本原因:应用提交的查询访问的 逻辑读(逻辑 IO) 总量 (需要访问的 表 数据) 过高. 大量逻辑读会导致数据缓存 Buffer Pool 中用于维护数据一致性的 Latc

长安CS35升级后仍乳化车主要求厂家装回分离器

长安CS35乳化事件随着3月份长安发布解决方案告一段落,车主们原本期待厂家的解决方案能够完全解决问题,但随着解决方案的实施,让车主们再次遭遇到了难题.在3月底,中国质量万里行投诉部就车主投诉的情况反馈到长安售后部门,不过对于车主问题的解决情况长安厂家未给予回复.4月初开始,许多之前在我们这里反映乳化的车主再次发来投诉,说保温升级后再次出现乳化,许多车主要求厂家装回外置分离器.对此,车主们再次提出维权的理由.1.车辆机油乳化严重(厂家声称为乳化物),此乳化物并非厂家所声称的不参与机油循环,我们实际

ADT升级后Compile ExceptionUnable to instantiate activity ComponentInfo

今天将ADT升级后(adnroid SDK Tools从20升级到22, Android SDK Build-tools升级到17),突然所有程序不能启动了,报找不到R类,然后layout并没有错误,bin文件夹下也没有生成R.java类,后发现是Android SDK Tools等没有安装. 在Android SDK Manager中安装完Tools文件夹下tools后依然不能启动,异常如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

spring-Spring mvc架构在并发情形下性能急剧下降的问题

问题描述 Spring mvc架构在并发情形下性能急剧下降的问题 在公司有一个基于spring-mvc框架的web项目, 在100个用户同时访问的情况下响应时间超过10秒. 经过排查, 发现在Controller中调用所有注入的service方法, 均需要超过2秒的时间. 后来干脆把service里的代码先注释掉, 在Controller中调用空的service方法, 依然需要超过2秒. service都是多实例的, 设置了singleton="false" 目前没有头绪...特来向大

大众DSG故障案例15:斯柯达明锐升级后油耗显增

编者按:近日,由于大众车主普遍反映车辆存在抖动.异响.耸车和动力中断等故障现象,国家质检总局于近期开始对大众DSG变速器故障向社会征集信息.中国网财经中心同步启动针对大众DSG故障案例征集活动.旨在以新闻专业的操作,为维权车主发声.替其维护合法权益,为汽车消费市场秩序的规范化尽到媒体的责任. 中国网5月3日讯 (记者 谢凌宇) 近日,陕西西安的车主程先生向中国网财经中心投诉,他购买的上海大众斯柯达明锐1.4T逸俊,有耸车.抖动.异响和动力中断的现象,进行软件升级后,DSG故障仍未解决,而且油耗增

关于wordpress 3.1升级后首页打不开的原因

关于wordpress 3.1升级至首页重定向循环原因可能是: wp-include/template-loader.php 文件头部的如下代码导致的. 关于wordpress 3.1升级至首页重定向循环原因可能是: wp-include/template-loader.php 文件头部的如下代码导致的. if ( defined(%u2018WP_USE_THEMES%u2019) && WP_USE_THEMES ) do_action(%u2018template_redirect%