postgresql共享行锁实现原理研究
背景
锁是数据库很重要的机制,postgresql支持表锁,行锁,了解postgresql行锁机制有助于我们在应用中分析和解决行锁的问题。
锁模式
当前postgresql支持4种行锁模式: FOR KEY SHARE, FOR SHARE, FOR NO KEY UPDATE, FOR
UPDATE,我们常见的delete场景获取的均为FOR UPDATE锁,而update场景会获取FOR NO KEY
UPDATE或者FOR UPDATE,要看有没有唯一索引了。 下面表格记录了4种锁模式的兼容情况。

加锁流程
-
首先加事务Exclusive锁
行锁等到事务提交才会释放,其他事物如果等待这个行锁,必须等待这个事务锁释放。以Update为例,首先分配一个事务xid,这个时候会对事务xid加锁,AssignTransactionId->AssignTransactionId->LockAcquire,这个锁是个内存锁。 -
判断是否需要锁等待
如果一个tuple被修改或者删除后,会记录xmax和t_infomask,ExecUpdate->heap_update->HeapTupleSatisfiesUpd

本文详细探讨了PostgreSQL的行锁机制,包括四种锁模式的兼容情况,加锁流程,以及MultiXact机制,对比了与其他数据库如Oracle、MySQL的行锁实现的区别。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



