计算机系统应用教程网站

网站首页 > 技术文章 正文

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

btikc 2024-10-16 08:22:19 技术文章 17 ℃ 0 评论

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

优化前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技术比较感兴趣可以「关注」我

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表