December 24, 2012

[MySQL学习] Innodb锁系统(3)关键结构体及函数

1.锁对象的定义: 关键结构体: UNIV_INTERN lock_sys_t* lock_sys = NULL; lock_sys是一个全局变量,用于控制整个Innodb锁系统的全部锁结构,其对应的结构体为lock_sys_t,该结构体只包含两个成员: struct lock_sys_struct{     hash_table_t* rec_hash;     ulint rec_num; }; 从函数lock_rec_create可以很容易看出这两个变量的作用: quoted code:     HASH_INSERT(lock_t, hash, lock_sys->rec_hash,             lock_rec_fold(space, page_no), lock);     lock_sys->rec_num++; 每次新建一个锁对象,都要插入到lock_sys->rec_hash中,这里会根据space id 和page no来计算对应的哈希桶,然后再将锁对象插入到其中,并递增lock_sys->rec_num。 注意只有记录锁会存在lock_sys->rec_hash中,表锁是不会存这里,只会插入到事务trx->trx_locks链表和对应表对象的table->locks中,并且都是加到链表的尾部(lock_table_create)。 每个锁对象的类型为lock_t,在lock0priv.h中定义,描述如下: trx* trx 持有该锁对象的事务 UT_LIST_NODE_T(lock_t) trx_locks 在事务锁链表trx->trx_locks中对应的节点 ulint type_mode 锁类型,在前文已有介绍 hash_node_t […]