本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析
create table t1(id int);
insert into t1 values(1)
略过建立连接,从 mysql_parse() 开始分析
void mysql_parse(THD *thd, char *rawbuf, uint length,
【mysql】 【源码】 【node】 【索引】 【index】 【thread】 …
两个INSERT也能发生死锁?貌似不可思议,实际上是正常的。 本文整理过程中,先后向高鹏、王少华、苏斌等几位朋友请教确认,感谢。
开始之前,关于锁、死锁,我们要先统一下几点认知:
死锁是由于多个事务相互持有其他事务所需要的锁,结果导致事务都无法继续,进而触发死锁检测,其中某个事务会被回滚,释放相应的锁,其他事务得以正常继续;简言之,就是多个事务之间的锁等待产生了回路,死循环了;
死锁发生时,会立刻被检测到,并且回滚其中某个事务,而不会长时间阻塞、等待; 从MySQL 5.7.15开始,新增选项
innodb_deadlock_detect,没记错的话应该是阿里团队率先实现的。
【mysql】 …