openGauss 子事務併發回滾流程最佳化

奔跑的数据库發表於2024-04-15

子事務併發回滾流程最佳化

可獲得性

本特性自openGauss 5.1.0版本開始引入。

特性簡介

本特性利用ProcArrayGroup資料結構管理所有搶佔ProcArrayLock鎖失敗的backends,由第一個進入group的backend作為group leader負責請求ProcArrayLock鎖,並在獲取到鎖後清理group中所有backend的事務資訊。避免子事務併發回滾時,各backend互相爭搶ProcArrayLock,導致事務被阻塞的問題。

客戶價值

最佳化大量包含子事務的業務併發提交、回滾時,對ProcArrayLock鎖的爭搶問題,提高該場景下的事務併發能力。

特性描述

在子事務回滾場景,每個子事務回滾時都會清理PGPROC中的子事務列表等事務資訊,並更新lastCompleteXid,在此期間需要申請ProcArrayLock用於保護ProcArray。如果一個事務內包括多個子事務,在回滾事務時,會序列回滾每個子事務,每次回滾都需要請求ProcArrayLock,此外事務提交或回滾同樣需要請求ProcArrayLock鎖。因此在大量子事務併發提交、回滾時,backends對ProcArrayLock的爭搶會較為明顯,進而可能導致事務的提交和回滾被阻塞。
針對該問題,本特性利用ProcArrayGroup資料結構管理所有搶佔ProcArrayLock鎖失敗的backends,由第一個進入group的backend作為group leader負責請求ProcArrayLock鎖,並在獲取到鎖後清理group中所有backend的事務資訊,避免各backend之間互相爭搶ProcArrayLock,提高子事務回滾效率。

特性增強

最佳化子事務併發回滾時,對ProcArrayLock鎖的爭搶問題。

特性約束

無。

依賴關係

本特性依賴於已有的事務結束和子事務回滾流程。

相關文章