google了大部分资料,结合自己的理解,总结下lock0lock.c文件里函数
死锁相关函数
lock_deadlock_recursive():死锁判断 死锁日志产生
lock_deadlock_trx_print():死锁中事务信息处理打印
lock_deadlock_lock_print():每个事务持有、等待的锁信息
lock_rec_print():记录被锁的信息
lock_sys_create(): db启动时创建锁系统
一致性读检查记录
lock_clust_rec_cons_read_sees(): 在一致性读情况下,查找某记录是否能被看到。能被查找到返回true;如果更早期版本被检索,返回false 。 主要参数
lock_sec_rec_cons_read_sees():在一致性读情况下,非聚簇索引记录是否能被查到
锁相关的几个重要函数:
lock_table (): 负责加表锁
lock_rec_lock():锁记录的重要函数
row0mysql.cc::row_lock_table_autoinc_for_mysql(): 负责管理表auto increment自增锁的重要函数。自增锁 是表基本锁。
(ps: auto_increment 自增锁 因为是表锁,锁粒度高,在高并发情况下,会大大影响insert性能)
死锁回滚的事务:姜承尧《mysql核心内幕 innodb引擎》中说redo产生量少的事务被选中回滚;有的说根据事务的权重,权重小的事务被选中回滚,这个需要再仔细看看源码
row0sel.c::row_search_for_mysql():重要函数,预防死锁处理逻辑,比较复杂。
后续继续补充