
24 May
2023
24 May
'23
5:55 p.m.
各位好, 最近在看opengauss代码,有个关于两阶段锁的疑问,DDL应该是遵守两阶段锁的,我的理解应该用的是spinlock,lwlock,regularlock中的regularlock, 我调试了一个例子:create table t1 (a int) 按照我的理解:代码中应该先调用LockAcquire,并且LockAcquire之间没有LockRelease调用。 但是实际上,LockAcquire之间有LockRelease,LockRelease后又有LockAcquire调用。 这样是不是不符合两阶段锁协议?还是我的理解有问题。 另外还有一个问题,PG在DDL时,也多次调用LWLockAcquire和LWLockRelease,也并没有遵守两阶段协议, 代码中访问共享的数据结构时(如获取事务id),LWLockAcquire后,读写完就LWLockRelease了,也并不遵守两阶段协议, 而我的理解,应该是DDL事务中,读写所有对象的加锁(例如对锁表的增删操作本身也需要锁吧),都应该遵守2PL,才能保证DDL的一致性。 还是我的理解有问题,只要对核心对象的访问遵守2PL,其它对象只要保证单个对象访问的原子性就可以了?这个地方我有点迷惑 新大陆软件 秦浩 mobile: 17625988619 e-mail:qinhao@newland.com.cn
658
Age (days ago)
658
Last active (days ago)
0 comments
1 participants
participants (1)
-
qinhao@newland.com.cn