生产环境一个join,产生笛卡儿积,回滚日志剧增
2021-08-19 本文已影响0人
frankie_cheung
场景
晚上同事告诉我 一个普通的SQL跑了很久,是不是锁住了,我登陆上去kill mysql线程
发现无法kill,事务状态为 rolling back状态,然后平时十几兆的undolog 突然变成了十多G
原因
sql在join的时候 on的条件写错了,导致笛卡儿积。
sql如下
insert into c select * from a inner join b on a.id=a.id
本来应该是a.id=b.id,但是他复制错了,直接导致笛卡儿积
a表有140万,b表有700多,笛卡儿积直接140万*700,大约7亿条数据
一个insert 语句 一个事务,7亿数据 肯定会有问题。
解决
等待回滚,应该回滚了一晚上。。。