Xlog no Lock Flush
可获得性
本特性自openGauss 6.0.0版本开始引入。
特性简介
对SyncRepLock的控制粒度进行修改,并且对原有的WalSnder、Backends所共同控制的加锁有序队列机制进行修改,去除大粒度的加锁同步操作;
客户价值
在保持原有流传输功能和逻辑不变的基础上,进一步提升系统性能。
特性描述
首先,先对锁的粒度进行修改,原有SyncRepLock锁主要控制范围为:
- 加锁有序队列更改为使用锁竞争机制,去除原来的有序队列的加锁操作,因此不再需要SyncRepLock控制;
- WalSnder的reciver位置刷新仍然使用reciver,但是lsn更新采用CAS操作,不再进行加锁控制;
随后,参照WalWriter的思想,对该锁和队列进行去除,使用acquire or wait抢锁,来保证队列的唯一性:
- 按照原有的waitlatch和setlatch思路进行修改,使得抢锁成功的线程才能waitlatch,setlatch仍然由walsnder进行。
- 当持锁线程waitlatch结束,或者被setlatch唤醒后,会释放锁,此时所有线程均会从抢锁中唤醒,重新进行新的一轮循环,判断是否存在异常或满足lsn等待需求。
除此之外,对walSnder线程的lsn更新进行优化,原有多个walsnder同时只有一个会持锁推进lsn值,本次采用CAS操作,去锁保证多并发下将lsn进行有序推进。
特性增强
无。
特性约束
无。
依赖关系
无。
意见反馈