mysql 8.0.19 行锁分析-1

 

lock_rec_lock_slow
|    | => *wait_for = lock_rec_other_has_conflicting
|    | => err = rec_lock.add_to_waitq(wait_for);
|        | => lock_create_wait_for_edge
|            | => ut_ad(lock_mutex_own());
|            | => waiter->lock.blocking_trx.store(blocker);

lock_rec_grant
|    | => lock_grant_or_update_wait_for_edge_if_waiting(lock, in_lock->trx);
|        | => lock_grant_or_update_wait_for_edge
|            | => const lock_t *blocking_lock = lock_has_to_wait_in_queue(lock, nullptr);
//行锁释放后,更新阻塞事务的流程,比如对某一行,t1加了x锁,之后有s\s\x锁进行等待,当t1提交事务,释放锁,后续s\s可以唤醒,x锁所属事务要更新block_trx
|            | => if (blocking_lock == !nullptr) lock_update_wait_for_edge(lock, blocking_lock);
|                | => ut_ad(lock_mutex_own());
|                | => if (waiting_lock->trx->lock.blocking_trx.load() != blocking_lock->trx) {
|                | => waiting_lock->trx->lock.blocking_trx.store(blocking_lock->trx);
|                | => lock_wait_request_check_for_cycles();
|                | => }
|            | => else {
|                | => lock_grant
|                    | => lock_reset_wait_and_release_thread_if_suspended
|                        | => ut_ad(lock_mutex_own());
|                        | => ut_ad(trx_mutex_own(lock->trx));
|                        | => lock->trx->lock.blocking_trx.store(nullptr);
|                        | => lock_wait_release_thread_if_suspended
|                            | => do slot
|                | => }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值