如何发现?
apm发现慢请求 找到具体的路径url
如何定位?
观察那些有可能慢的方法,打日志,本地运行,有条件的(admin可以连生产只读数据库),没条件(crm造数据)
定位到具体哪个步骤慢
如何解决?
异步 程序 缓存 Sql
一.优化递归算法
RecursionUtil 为了适应不同的类,不同的属性
/adminDept/queryDeptTree
每次都new实例
针对优化 (简化了一些,有针对性)
二. 简化明确业务逻辑
/crmCustomer/workbenchData
页面数字的显示
原版本---(走的是原来查询内容的接口)没有区别身份,全量查询,sql也是全字段查询
优化后 区分身份查询 去掉不必要的sql 只查id
三. 明确业务逻辑
SendMsgToBp2Job TaskSendMsgJob
这两个方法都调用admin的VX发消息的接口
发现5万的数据只有一万条数据的负责人是关注了的
SendMsgToBp2Job
原来
现在 只查关注的
//优化后
WxMpProperties.MpConfig mpConfig = wxMpProperties.swithWxConfig(useAppId);
//当站长标记劳动者为【面试未通过】时,向劳动者的负责bp推送公众号模板消息,提醒bp做后续处理(筛选没有关注公众号的人)
List<CrmCustomer> list =iCrmCustomerService.querySendMsgToBp2(mpConfig.getApplicationName());
四.综合优化
获取标签的接口
本地不慢 打日志看时间不慢
一.带宽
二.返回的json压缩 去掉无用字段
~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
五.报表优化
运营分析系统:招聘战力
统计背景:时间控件,输入当月,劳动者状态统计趋势,1-30号,每天数据
查询 wk_crm_customer 不同时间段,不同的统计维度;创建时间、上岗时间、入职时间、离职时间;推荐人(乙方公司下所有员工)
1.红色长方形耗时最长,接口拆分;
2.时间分段,推荐人 union all ,一次行查询整个时间段(整月),不同的时间段匹配在统计
3.不同时间字段统计,串行;优化为并行
六.增加缓存
适当的增加缓存(基于feign-client 设置redis缓存)
亿级系统的Redis缓存如何设计???
排查MYSQL CPU高
show variables like "%slow_query_log%" ;
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
SHOW VARIABLES LIKE '%max_connections%';
SHOW STATUS LIKE '%Connection%';
-- 当前连接数
show global status like 'Threads_connected';
可能存在短时间循环调用queryDB SQL语句量突然增加的情况。
可能存在多线程调用 queryDB SQL的情况。
可能存在慢SQL 被调用的情况。
总结优化方法18摸