mysql 时间 本周 本月_MySQL深分页导致CPU飙升解决方法总结

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

5f538b72ce63b8a560fa7d8e996916b1.png

数据库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

优化完之后数据库CPU负载正常,同步时间降为1.5小时(分8个线程)完成。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值