mysql 一次更新大量数据,速度慢, cpu 占用高,有啥优化思路吗
mysql 服务器性能不是很好, 如果执行如下的 sql 语句
update table set status = 1 where order_id = "xxxxx"
order_id 上有索引,一次更新的数据量有 60w 条,需要耗时 60 秒左右,数据库 cpu 会到 80%以上。
排除升级机器,有啥好办法优化这种场景吗
mysql 服务器性能不是很好, 如果执行如下的 sql 语句
update table set status = 1 where order_id = "xxxxx"
order_id 上有索引,一次更新的数据量有 60w 条,需要耗时 60 秒左右,数据库 cpu 会到 80%以上。
排除升级机器,有啥好办法优化这种场景吗
先选择一批数据
select id from table where order_id = “xxxxx” and status = 2 limit 1000
再更新这一批数据
update table set status = 1 where id in (上面 select 到的数据)
放在循环里更新,同样导致数据库压力
order_id
status
===
每次更新一条即可
删历史数据也是这么玩
有时开事务有奇效哦
大量更新本就应该速度慢、cpu 占用高,但如果这台服务器是独占的,那就不是问题,也不用优化。
所以你打算怎么优化,得看这个更新如何影响了你。比如你这服务器还有别的高优先级写入请求,那就弄个优先级队列,让服务器在没有高优先级请求的时候慢慢更新。要是你这个大更新有强一致性要求,必须一次完成,那其实你就没有什么技术解决的办法,只能换个不忙的时间来做。
lz 想做优化就先把约束条件都写下来,自然就有优化方向了,现在啥都没有,换高性能机器是最靠谱的办法。
不过 sql 其实本身不太适合大批量更新,如果你们只是需要根据 order_id 修改确定的属性、而几乎不需要根据其他的属性进行修改操作,那么,可以考虑更换别的数据结构。
不过在我的知识中,出现这种情况是因为设计的不好……