原创 记录一次线上Mysql慢查询问题排查过程
2020-03-27 16:04:37来源:博客园 阅读 ()
原创 记录一次线上Mysql慢查询问题排查过程
背景
前段时间收到运维反馈,线上Mysql数据库凌晨时候出现慢查询的报警,并把原始sql发了过来:
--去除了业务含义的sql
update test_user set a=1 where id=1;
表数据量200W左右,不是很大,而且是根据主键更新。
问题排查
- 排查Mysql数据库
我看到sql后第一反应就是是不是数据库出问题了,每个小时都有业务,偏偏白天业务高峰时间段正常,凌晨业务量很少时候出问题,让运维先检查了数据库的状态,反馈是数据库正常。
- 排查业务代码(第一次)
这块业务代码比较复杂,而且是别人写的,第一次看都没看完,直接在代码里打印了各个模块执行的时间,然后上线。
- 排查业务代码(第二次)
第二天又出现慢查询了,我赶紧下载了线上日志,发现整个方法执行时间很长,然后发现执行时间长的代码有几行调用其他服务的代码,使用的是HttpClient,猜到了原因,应该是调用其他超时导致的。
说下系统整体流程,微信(A)回调我们的收银台服务(B),收银台更新订单信息并调用业务服务(C)。
出问题原因是:
第一次A调用B,B锁住记录行并调用C,这个时候C没有响应,导致A又发送了第二次请求。
第二次A调用B,B更新记录时候发生死锁,出现慢查询。
解决方案
-
收银台系统B接收回调的方法添加分布式锁,保证同一时刻同一订单只能更新一次。
-
收银台调用业务服务使用的是HttpClient4.4,默认超时时间60秒,这么长时间如果对方没有响应就完了,改成了5秒,超时立马返回,不影响其他业务。
HttpClient4.4版本设置超时时间代码如下:
HttpPost httpPost = new HttpPost(url);
RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).setConnectionRequestTimeout(5000).build();
httpPost.setConfig(requestConfig);
上面设置了3个超时时间,含义如下:
setConnectTimeout:设置连接超时时间,单位毫秒。
setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
setSocketTimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
最后,按照这两个方案改造上线后,系统运行正常,问题解决。
推荐阅读
1.用户密码到底要怎么加密存储?
2.彻底理解cookie、session、token
3.阿里面试官:分别说说微信和淘宝扫码登录背后的实现原理?
4.一分钟带你了解下MyBatis的动态SQL!
5.原创 | 我是如何解决POI解析Excel出现的OOM问题的?
如果觉得文章不错,希望可以随手转发或者”在看“哦,非常感谢哈!
关注下方公众号后回复「1024」,有惊喜哦!
原文链接:https://www.cnblogs.com/haha12/p/12580673.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:反射Demo
- 原创 Spring Boot 2.3 新特性分层JAR 2020-06-08
- 致程序员的头发:你若安好,便是夙愿原创 2020-05-28
- JAVA 每次从List中取出100条记录 2020-05-27
- 初识JAVA(学习记录) 2020-05-19
- Tomcat视角看一次http请求 2020-05-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash