一種透過延遲事務提升資料庫效能的方法

天翼雲開發者社群發表於2023-09-28

本文分享自天翼雲開發者社群《 一種透過延遲事務提升資料庫效能的方法 , 作者: 唐****律

一、 背景

在資料庫代理層中,寫節點的資料庫連線是一種很重要和稀缺的資源,提升其利用率是一個提升資料庫整體效能的重要手段。資料庫連線佔用過高會大幅增加資料庫的資源負擔,降低資料庫的處理能力。透過延遲啟動的事務,可以減少不必要的連線佔用時長,提升資料庫連線利用率。

在使用者透過代理層使用資料庫的時候,如果提交了一條只讀查詢,那麼代理層可以從連線池中獲取一個連線、查詢、獲取資料、然後歸還連線。

如果在只讀查詢之前啟動了事務,那麼在使用者提交或者回滾事務之前,該連線不能歸還到連線池,大大增加了資料庫連線的佔用時間。

而在 ReadCommitted事務隔離級別中,只讀查詢語句的查詢結果是不可重複的,這時如果事務中沒有其它寫操作,那麼是否啟動事務,對於使用者實際使用是沒有影響的,這樣則產生了不必要的事務,增加了資料庫連線佔用的時間,降低了資料庫連線的利用率。

二、 方案

本發明提出一種透過延遲啟動事務的方法,減少不必要的連線佔用時長,提升資料庫連線利用率,進而提升資料庫的整體效能。具體實現步驟如下:

1、在使用者連線未進入事務狀態且在ReadCommitted事務隔離級別時,如果使用者啟動事務,則記錄其事務狀態為已開啟,但實際上不獲取資料庫連線開啟事務。

2、如果使用者提交的SQL為SELECT等只讀查詢,則直接轉發SQL到寫節點或者讀節點。如果使用者提交的SQL需要進行寫操作,則根據事務狀態,在轉發SQL到寫節點之前先啟動事務,並記錄實際事務狀態。

3、使用者提交或者回滾事務,如果實際事務狀態為未開啟,則跳過結束事務操作,否則按正常流程先結束事務再回收資料庫連線。

三、 優點

pgpool-II、pgbouncer等開源連線池元件,支援連線複用,但在事務處理上沒有對此進行最佳化,這導致其在benchmarkSQL測試中效能受到影響,因benchmarkSQL效能測試中針對所有語句都會開啟事務。其它資料庫ORM框架例如Mybatis也有預設啟動事務執行SQL的選項,所以此項最佳化是有必要的。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014251/viewspace-2986627/,如需轉載,請註明出處,否則將追究法律責任。

相關文章