<返回更多

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

2020-09-27    
加入收藏

本周同步一张历史数据(大约1亿)表入ES,1000条为一个批次,最开始时按照表的创建时间(有索引)以天为单位进行的数据同步,在同步的过程中联系DBA老师查看数据库负载情况,最开始同步时CPU还算稳定,但是越到后面,CPU就开始飙升的非常高,甚至达到了90%以上,这时候其实出现了MySQL的深分页问题,导致大量的慢SQL,如下图:

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

数据库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个线程)完成。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>