龙空技术网

MySQL深分页导致CPU飙升解决方法总结

Java思享汇 2337

前言:

此时朋友们对“mysql数据库cpu飙升”都比较重视,看官们都想要学习一些“mysql数据库cpu飙升”的相关内容。那么小编也在网上网罗了一些有关“mysql数据库cpu飙升””的相关知识,希望兄弟们能喜欢,大家快快来学习一下吧!

本周同步一张历史数据(大约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个线程)完成。

不断分享开发过程用到的技术和面试经常被问到的问题,如果您也对IT技术比较感兴趣可以「关注」我

标签: #mysql数据库cpu飙升