lock_rec_lock_fast:
lock = lock_rec_get_first_on_page(block);
block->lock_hash_val是该页的锁的hash key值
通过这个值从lock_sys->rec_hash中找到对应锁,这个key可能发送冲突
所以还需要根据lock->un_member.rec_lock.space和page_no判断是不是这个页的锁。
找到即返回,即该页的第一个锁结构。
if (lock == NULL) {//该页没有加过锁,则创建锁
lock = lock_rec_create( mode, block, heap_no, index, trx, FALSE);
}else{
//1)这个页上不止一个锁结构
//2)其他事务已经在这个页上加了锁,不管是不是这个记录
//3)锁类型不同
//4)lock结构当初创建的锁的bitmap不够用
//满足这个4个条件中的一个,fast加锁失败,进入slow加锁阶段,会检查锁冲突
if (lock_rec_get_next_on_page(lock)
|| lock->trx != trx
|| lock->type_mode != (mode | LOCK_REC)
|| lock_rec_get_n_bits(lock) <= heap_no) {
st
InnoDB事务锁之行锁加锁--fast lock
最新推荐文章于 2022-08-20 11:52:13 发布
本文详细介绍了InnoDB存储引擎中事务处理的行级锁加锁机制,特别是fast lock的实现过程。通过block->lock_hash_val获取锁的哈希键,再判断是否为页面上的第一个锁结构。如果找到的锁为空,则创建新的锁;否则,检查锁冲突情况,满足特定条件时执行slow加锁,确保无锁冲突。若能快速加锁,则直接在锁的bitmap中设置位完成加锁操作。
摘要由CSDN通过智能技术生成