关于MySQL筑表对DML的影响

关于MySQL建表对DML的影响

今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insertupdate等。不过也没有保留现场。因此有疑问为什么建表会影响DML

?

分析

???????? 首先这个现象不是在所有场景都会碰到(否则MySQL的用户们早就跳起来了)。

一来建表这个操作本身很快,只涉及到写表定义文件和初始化表空间。中间涉及到redoundo的操作也很少(这里只讨论InnoDB表)。因此除非碰到磁盘IO响应不了,否则多数情况下建表操作很快结束,不会“稳定复现”

二来即使由于io原因,建表过程执行时间较长,建表操作也不会阻塞一些DML操作。

?

???????? 因此只能从代码出发看冲突的case

?

???????? 假设session 1正在执行一个create table操作,且由于io原因阻塞在写表空间文件这个步骤上。讨论session2作如下操作的场景。

?

无主键表insert

???????? 此时insert操作由于需要申请系统自增主键,需要对dict_sys->mutex加锁。而这个锁需要等session1<

关于MySQL筑表对DML的影响

相关文章:

你感兴趣的文章:

标签云: