本周同步一张历史数据(大约1亿)表入ES , 1000条为一个批次 , 最开始时按照表的创建时间(有索引)以天为单位进行的数据同步 , 在同步的过程中联系DBA老师查看数据库负载情况 , 最开始同步时CPU还算稳定 , 但是越到后面 , CPU就开始飙升的非常高 , 甚至达到了90%以上 , 这时候其实出现了MySQL的深分页问题 , 导致大量的慢SQL , 如下图:
文章插图
数据库CPU监控
优化前sql为:
-- 以创建时间进行范围查询select * from table where create_time>=#{startDate} and create_time <=#{startDate} order by id asc limit 900000,1000;
以上sql不仅导致CPU飙升 , 同时效率比较低 , 耗时较长 , 存在回表问题 , 于是将上面的sql进行优化 , 拆分为以下2个sql来处理 , sql如下:-- 获取范围查询的结束主键ID(endID)select id from table where id>=#{startID} order by id asc limit 1000,1;-- 以主键进行范围查询select * from table where id>=#{startID} and id<#{endID}
优化完之后数据库CPU负载正常 , 同步时间降为1.5小时(分8个线程)完成 。【MySQL深分页导致CPU飙升解决方法总结】
推荐阅读
- 深入理解谷歌最强V8引擎垃圾回收机制
- 行业产销标准开课,中国茶叶行业标准化培训班首次在深开班
- 深圳文件柜厂家有哪些
- 苏轼对佛道两教皆有深入研究 道家思想对苏轼的影响
- Centos7 Mysql5.7.28升级到5.7.31过程
- 老班章与班章中寨,班章中寨布朗山深处的哈尼茶事
- 8种交叉验证类型的深入解释和可视化介绍
- 在30分钟内创建你的深度学习服务器
- alter table 两分钟看懂 mysql修改表结构
- 运维小工具:Mysql库TPS,QPS实时监控脚本