一次业务逻辑优化,竟然解决了MySQL CPU消耗800%的性能问题!
公众号后台回复“学习”,获取作者独家秘制精品资料
扫描下方海报二维码,试听课程:
(课程详细大纲,请参见文末)
文章来自头条号:波波说运维
概述
最近接到IDC监控告警说某台服务器cpu过高,下面记录下故障排查的过程,仅供参考,这里主要看思路,细节不重要。
1、观察服务器资源消耗
可以看到服务器表现为cpu问题,内存消耗正常。
1.1、查看具体cpu
ps -mp 2289 -o THREAD,tid,time
1.2、找到耗时最高的线程TID,并将其线程ID转换为16进制格式:
printf "%x\n" tid
1.3、打印线程的堆栈信息,thread dump
jstack pid |grep tid -A 30
进一步分析堆栈信息
2、检查数据库线程
这里发现大概有8个线程,而且都是同一条sql
3、查看sql执行计划
这个单条sql只需要2s就可以跑完,不过看执行计划是走了全表扫描,并没有走索引
4、慢查询分析
set global slow_query_log=on;
set global long_query_time=30;
set global log_output='TABLE';
show variables like '%slow%';
select * from mysql.slow_log order by 1;
以下是因为先开了没有走索引就记录下来,所以可以看到这条sql,但是开了慢查询后并没有超过30s的慢sql.
5、定时任务?
跟开发确认后是有个定时任务,每次都需要去查每个用户的考勤时间,最后再汇总统计,这个定时任务需要跑一天的时间。
这里问题主要是嵌套循环,外层循环遍历工号(8000),内层循环遍历天数(30天),然后内层循环每次查数据都需要去跟数据库做一次交互,在插入数据到缓存,最后汇总计算到汇总表。
6、优化方案
1、汇总表拆分
常用字段划为一张表,不常用字段划分为另一张表,然后常用字段这些只做汇总计算,不走循环,不常用字段(如婚假、病假等)这些走循环。
2、优化单条查询
这个建索引,控制在1s内
--大表建索引,驱动表不建索引
create index idx_hwb1 on t_att_dd_attendance_info(user_id,class_id,check_type,plan_check_time)
3、逻辑优化
这里跟开发提了把逻辑改了,不过开发还没实现,所以就不贴实现代码了。逻辑大致如下:
--目前逻辑{ /*外层循环遍历工号*/ { /*内层循环遍历天数*/ }}--优化后的逻辑{ /*外层循环遍历天数*/ { /*内层循环遍历工号*/ }}
END
如有收获,请划至底部,点击“在看”,谢谢!
《21天互联网Java进阶面试训练营(分布式篇)》详细目录,扫描图片末尾的二维码,试听课程
欢迎长按下图关注公众号石杉的架构笔记
BAT架构经验倾囊相授
一次业务逻辑优化,竟然解决了MySQL CPU消耗800%的性能问题!相关推荐
- 由浅入深探究mysql索引结构原理_性能分析与优化_由浅入深探究mysql索引结构原理、性能分析与优化...
由浅入深探究mysql索引结构原理.性能分析与优化 第一部分:基础知识第二部分:MYISAM和INNODB索引结构1, 简单介绍B-tree B+ tree树 2, MyisAM索引结构 3, Ann ...
- 完美解决surface pro6 CPU降频导致性能下降的问题
2021年4月5日 21:41:46 突然看到这帖子,更新一下,问题已经永久解决: 解决方案:打开win10更新------>安装所有的累计更新 下面的只是暂时解决方案↓↓↓↓↓↓↓↓↓↓↓↓↓ ...
- 数据库系统优化--业务逻辑设计优化
当我们优化一个系统时,有时发现一种情况就是自己修改SQL,索引以及分区是不能解决性能问题的.这时你要考虑业务逻辑优化和表设计的重构.这两点的确和设计结合的很紧密. 业务逻辑优化 结合实际, ...
- 织梦mysql占用资源_解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记
早上帮朋友一台服务器解决了Mysql cpu 占用 100%的问题.稍整理了一下: 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysq ...
- 抽象工厂+反射+依赖注入 实现对数据访问层和业务逻辑层的优化
分层思想的一个核心就是部件化,各个层之间是相互独立的,每一层可以随便抽取换成一个其他语言的版本,但只要与相应的接口吻合就行. 我用的三层架构大致是这样的,基本的三层就不说了,然后分别为业务逻辑层和数据 ...
- react获取id_解决React应用界面开发常见痛点(一)业务逻辑与UI分离
前言:本系列是针对于React在界面开发痛点的一些解决方案,只是React应用中偏向展示的一环 构建一个业务与UI分离的react应用 本篇是基于HOC方案并未使用Hooks 业务逻辑与UI 在编写一 ...
- C#学习笔记(四):.net 第一个业务逻辑(同名用户不可创建)(优化逻辑)
上篇文章是博主第一次使用.net+EF处理业务逻辑,也是第一次使用C#编写项目代码,作为一个copier,找到了一个可行的 方法在别人模块去copy了一个类似的数据获取方式来修改使用,结果算比较顺利, ...
- petshop详解之五:PetShop之业务逻辑层设计
五 PetShop之业务逻辑层设计业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分.它的关注点主要集中在业务规则的制定.业务流程的实现等与业务需求有关的系统设计 ...
- 秒杀业务架构优化之路--转
原文地址:http://www.infoq.com/cn/articles/flash-deal-architecture-optimization?utm_source=infoq&utm_ ...
最新文章
- 后端怎么防止重复提交?(常用的做法)
- 一步一步学习Ultimus - 三、系统设置
- mysql多个子查询_mysql(5)多表--子查询
- 计算机辐射对人体影响吗,电脑屏幕辐射对人体的危害怎么解决?
- [Beego] [bootstrap-paginator]实现分页功能
- bem什么意思_BEM命名法
- 1103: 平均学分绩点(函数专题)
- 【译文练习】ReactiveCocoa概要:了解和使用RACCommand
- vSphere 5.5 VM整合磁盘失败之—文件被锁定无法访问
- fm足球经理Football Manager 2022 for mac(真实模拟游戏)中文版
- NOIP2018普及T2暨洛谷P5016 龙虎斗
- nginx 域名跳转
- 软件项目管理 2.1.项目立项
- HiveSql 日期格式转换
- 【Python】cannot import name ‘ParserError‘ from ‘dateutil.parser‘
- TestNG测试报告美化buid.xml配置
- 编码、解码、总结大全
- 论文阅读_Same Coverage, Less Bloat: Accelerating Binary-only Fuzzing with Coverage-preserving Coverage-g
- 两天碾转两个学校办卡地推
- JZOJ 5984. 【北大2019冬令营模拟2019.1.1】仙人掌
热门文章
- 使用Office 365前,企业必须要知道的10件事
- 《算法心得:高效算法的奥秘(原书第2版)》
- 安装pytorch一直报错解决方法!!! ERROR: Exception: Traceback (most recent call last): File “D:\Anacoda\lib\s....
- 谷歌商店输入账号密码后 回到登录界面/闪退
- 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
- 暑期JAVA学习(41.1)TCP通信——多发多收消息
- 四、完成Teigha.net库对CAD看图的放大/缩小/移动实体等界面操作,图层管理器,以及CAD文件布局的切换功能
- 关于Qt中的翻译问题
- 24点卡牌游戏C++实现
- 【Niagara Vykon N4】物联网学习 02 照明控制