InnoDB事务锁之行锁加锁--fast lock

191 篇文章 87 订阅 ¥9.90 ¥99.00
123 篇文章 65 订阅 ¥19.90 ¥99.00
本文详细介绍了InnoDB存储引擎中事务处理的行级锁加锁机制,特别是fast lock的实现过程。通过block->lock_hash_val获取锁的哈希键,再判断是否为页面上的第一个锁结构。如果找到的锁为空,则创建新的锁;否则,检查锁冲突情况,满足特定条件时执行slow加锁,确保无锁冲突。若能快速加锁,则直接在锁的bitmap中设置位完成加锁操作。
摘要由CSDN通过智能技术生成
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzs87

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值