Xlog no Lock Flush

可获得性

本特性自openGauss 6.0.0版本开始引入。

特性简介

对SyncRepLock的控制粒度进行修改,并且对原有的WalSnder、Backends所共同控制的加锁有序队列机制进行修改,去除大粒度的加锁同步操作;

客户价值

在保持原有流传输功能和逻辑不变的基础上,进一步提升系统性能。

特性描述

首先,先对锁的粒度进行修改,原有SyncRepLock锁主要控制范围为:

  1. 加锁有序队列更改为使用锁竞争机制,去除原来的有序队列的加锁操作,因此不再需要SyncRepLock控制;
  2. WalSnder的reciver位置刷新仍然使用reciver,但是lsn更新采用CAS操作,不再进行加锁控制;

随后,参照WalWriter的思想,对该锁和队列进行去除,使用acquire or wait抢锁,来保证队列的唯一性:

  1. 按照原有的waitlatch和setlatch思路进行修改,使得抢锁成功的线程才能waitlatch,setlatch仍然由walsnder进行。
  2. 当持锁线程waitlatch结束,或者被setlatch唤醒后,会释放锁,此时所有线程均会从抢锁中唤醒,重新进行新的一轮循环,判断是否存在异常或满足lsn等待需求。

除此之外,对walSnder线程的lsn更新进行优化,原有多个walsnder同时只有一个会持锁推进lsn值,本次采用CAS操作,去锁保证多并发下将lsn进行有序推进。

特性增强

无。

特性约束

无。

依赖关系

无。

意见反馈
编组 3备份
    openGauss 2024-11-11 00:55:34
    取消