一、问题背景

一个核心业务数据库部署在AWS的EC2实例上,在业务活动期间发生了性能抖动导致业务超时。

下面记录一下问题排查的流程。

二、问题分析

1. 监控指标分析

发生问题后,第一时间肯定要看监控!首先分析服务器基础监控。

服务器的Load1使用率不足40%,看上去未达到瓶颈。

​发现问题发生期间,数据盘的IOPS有不规律的波动,但是整体上IOPS峰值未超过1500,看上去不像达到了瓶颈。

​再观察一下MySQL服务指标,可以看到问题发生时数据库运行线程是有突增的,同时也观察到数据库insert和update同样有突增。

这一点与调用方确认当时确实是有大量的写入和更新,但是从服务指标上看并没有达到服务运行的瓶颈。

​2. 漫长的排查流程

重新梳理一下各方的情况。

基础监控

我们又重新Review了服务器监控指标,确认当时服务器的CPU使用率、内存使用率、磁盘使用率和磁盘IOPS均没有达到上限,基础资源部分看起来正常。

MySQL服务

MySQL层面没有慢查询日志,说明MySQL本身的处理逻辑正常,业务也并没有新增不合理的SQL。只是发现当时MySQL的threads_running有上涨,说明当时排队的请求很多,具体为啥就不知道了。

业务调用方

业务当时没有上线或其它变更。从调用量上来看,是有突增的,这也与MySQL的监控指标吻合。

但是业务本身的资源使用率正常,处理其它逻辑的耗时也正常,只是对MySQL请求慢了,因此不像是业务本身的问题导致。

看了一圈只是看出当时MySQL慢了,但是为啥慢了还是不清楚,问题究竟出在哪里?

3. 被忽略的指标

想来想去,影响MySQL最重要的还是两类资源:CPU和磁盘IO。

CPU使用率从监控上看基本没有大的波动,但是磁盘IO确实是有明显波动的,只是没有达到IOPS的阈值。所以磁盘IO还是重点怀疑对象

从监控大盘上看IOPS峰值不超过1500,看似未达到瓶颈,但监控采点间隔是1分钟,会不会有瞬时突增达到了上限但是监控没有采集到(实际该磁盘IOPS配置上限为6000)?

关于这点我们咨询了AWS后台工程师,AWS的EBS存在一个我们之前忽略的监控指标:VolumeIdleTime。官方对这个指标的描述如下:

VolumeIdleTime – The amount of time when no read or write operations were waiting to be completed during the period.意思是EBS实例在监控周期内没有读写操作的时间。

那么我们查看一下发生问题的EBS实例这个指标的情况:

结果令人吃惊,该实例每分钟的空闲时间超过50s,按这个计算,实际峰值的IOPS可能是监控指标的6倍!1500 * 6 = 9000,很显然已经超出了EBS配置的IOPS限额6000!

我们可以在CloudWatch上配置一个自定义指标:(每分钟读IO次数+每分钟写IO次数)/(1分钟-VolumeIdleTime),来更直观的观察EBS实例实际IOPS的波动情况。

通过下图可以看到,确实有很多突增的点IOPS峰值超过了6000,这是导致MySQL访问超时的直接原因。

​至此,问题根因得到了确认。

三、总结

我们最后总结一下问题原因:

  1. 业务写入突增导致MySQL服务对应的底层EBS实例IOPS飙升,短时间超出限额6000导致性能受限,引起业务超时;

  2. EBS实际的IOPS可以通过VolumeIdleTime指标做更精确的计算。

四、后续优化方向

1. 如何快速查看EBS实例真实的IOPS

这个指标由3个CloudWatch原始指标聚合而成,配置较为繁琐。

我们可以提前保存一个CloudWatch源指标模板:

{"metrics": [[ { "expression": "(m1+m2)/(PERIOD(m1)-m3)", "label": "Actual IOPS", "id": "e1" } ],[ "AWS/EBS", "VolumeReadOps", "VolumeId", "your_volume_id", { "id": "m1", "visible": false } ],[ ".", "VolumeWriteOps", ".", ".", { "id": "m2", "visible": false } ],[ ".", "VolumeIdleTime", ".", ".", { "id": "m3", "visible": false } ]],"view": "timeSeries","stacked": false,"region": "ap-southeast-1","stat": "Average","period": 60
}

需要查看时只需要替换一下VolumeId和region即可查看对应EBS实例的自定义Actual IOPS 指标。

2. 增加秒级监控

排查问题时,我们永远都希望监控的粒度越细越好,但是更频繁的指标采集动作可能会导致服务器本身的压力上升。因此在增加秒级监控指标时需要谨慎的评估这一点。

我们可以只选择最关注的核心指标,将少量的指标增加秒级监控,这样在尽量不增加服务器压力的同时达到细粒度指标采集的目的。

3. 推动业务优化

由于EBS的性能普遍比机房物理机上的SSD性能要差,业务需要更严格的判断突增请求的合理性,是否能通过消息队列进行削峰填谷,使请求更加平稳。

同时为缓解业务异常,可以使用GP3类型EBS实例,把IOPS配额临时调大,等业务优化后再将IOPS配额恢复。


是什么引起数据库响应超时?相关推荐

  1. 生产事故总结篇(2) 接口响应超时优化方案

    1 查询类接口 一 mysql数据库查询超时问题 1 查询字段是否存在索引,索引是否失效 索引是个老生常谈的问题了, 需要特别注意下面几个点 唯一的值必须要建立唯一索引 比如订单号,售后单号,上门取件 ...

  2. Thread pool引起的程序连接数据库响应慢

    数据库版本:percona-mysql 5.6.16 ​在很长一段时间,都会出现程序连接数据库,出现响应慢的情况,正常在几到几十毫秒之间,但是偶尔会出现上百毫秒的情况: 开始由于开发重新设置并调整过程 ...

  3. 登陆SQL Server 2000数据库提示超时已过期的解决方法

    登陆SQL Server 2000数据库提示超时已过期的解决方法 参考文章: (1)登陆SQL Server 2000数据库提示超时已过期的解决方法 (2)https://www.cnblogs.co ...

  4. 战斗服务器响应超时是否尝试重连,刺激战场:教你,从开伞到落地瞬间技巧

    原标题:刺激战场:教你,从开伞到落地瞬间技巧 刺激战场,在手游吃鸡中,可以说是非常的出众,打开游戏竟然发现居然有300人在线,难怪贫僧天天都能收到好友的邀请,看来都中了刺激吃鸡的毒. 贫僧在朋友圈中, ...

  5. python项目小案例:一个网页响应超时提醒小闹钟

    2019独角兽企业重金招聘Python工程师标准>>> 前言 由于网络速度或对方服务器问题, 爬取一个网页的时候,都需要时间.如果该网页长时间未响应,那么系统就会判断该网页超时,有时 ...

  6. EBS R12中FND凭证打印警告:OPP响应超时

    接近年关,最近年结忙的飞起,此为背景,今天运维那边反应日记账凭证打印报错,看了下后台请求发现请求有警告. 查看日志发现报了"并发:OPP响应超时"的警告,这个地方响应超时可能是配置 ...

  7. 第三方支付接口响应超时处理方法

    问题:调用第三方支付接口超时怎么办? 解决方法:调用接口时设置超时时间,当接口超过60秒未返回结果,自动将改订单设置为处理中,然后由定时任务调用查询接口,同时如果用户下拉刷新页面也会发起单笔交易查询. ...

  8. 和平精英服务器响应超时什么意思,和平精英服务器无响应,和平精英服务器超时...

    1.刺激战场国际服服务器无响应怎么回事,连续一周都这样了 应该是服务器在维护,或者在重启阶段 但是已经过去了一周,并没有任何的反应 2.这是怎么了 手机刺激战场 战斗服务器没有响应? 手机版本太底,把 ...

  9. (十一)jmeter接口自动化难点系列---设置响应超时时间

    在做jmeter接口测试的时候,有时服务器问题,导致我们的接口一直在请求,而无法得到返回. 所以我们需要用到jmeter的一个功能响应超时自动停止请求. 在jmeter中, 有一项设置名称为timeo ...

最新文章

  1. JSP针织生产管理系统
  2. selenium RC 环境配置
  3. 034_ JDK的Enumeration接口
  4. Thinkphp下嵌套UEditor富文本WEB编辑器
  5. Quartz框架基于Calendar的排除规则
  6. Django思维导图
  7. Ubuntu彻底删除MySQL重装MySQL
  8. 单链表的代码python_python版本单链表实现代码
  9. 【opencv 学习】【常用的图像卷积核】
  10. 2018初中计算机考试知识点,[2018年最新整理]全国计算机一级考试MS_Office知识点.docx...
  11. matlab中怎样绘制离散点,matlab中怎么绘制大量的离散点
  12. 设备通过海康EHOME协议接入EasyCVR视频无法播放的排查与分析
  13. 第十一届蓝桥杯省赛B组真题训练
  14. php k线公式源码,黄金K线主图源码
  15. 三层交换机 no switchport 命令
  16. 2022年考研计算机组成原理_4 指令系统
  17. cv2.connectedComponentsWithStats 计算不规则连通区域
  18. DESFire 学习之AUTH
  19. Android 微信原生登录,支付,以及一些奇奇怪怪的问题。(wxApi.isWXAppInstalled 一直返回false)
  20. 百度地图android HD版,百度地图HD版

热门文章

  1. 为什么一群人之中,蚊子就“盯”着你?为你揭秘“蚊子”的真相!
  2. python提取斜坡结构
  3. 【软件测试】一个真正的测试面试过程,我比面试官还狡猾......
  4. 2019_KDD_Social Recommendation with Optimal Limited Attention
  5. python怎么输出图像测试_【Python】使用Pytest集成Allure生成漂亮的图形测试报告
  6. 题目错题记录表mysql设计_基于Web2.0的跨平台电子错题本功能的设计与实现
  7. lodop 简单实现订单批量打印
  8. 网站设计的理念与方法
  9. 利用笔记本热点AP功能实现在没有越狱的iPad/iPhone抓包
  10. 源中的 backports proposed security updates 什么意思?