RDS MySQL的資料庫代理提供事務拆分功能,該功能在保證業務中讀寫一致性的前提下,能夠將事務內第一個寫請求之前的讀請求轉寄到唯讀執行個體,降低主執行個體負載。本文介紹如何設定事務拆分。
前提條件
背景資訊
預設情況下,RDS MySQL的資料庫代理會將事務內的所有請求都發送到主執行個體以保障事務的正確性,但是某些架構會將所有請求封裝到非自動認可的事務中(通過執行set autocommit=0;關閉自動認可),導致主執行個體負載過大,如下圖所示。

為瞭解決上述問題,可以使用資料庫代理的事務拆分(預設開啟)功能。您不需要改動應用的代碼或配置就可以將事務中的讀壓力從主節點轉移到唯讀節點,從而提高主節點的穩定性。
開啟事務拆分後,在預設的Read Committed隔離等級下,當RDS MySQL關閉事務自動認可後,僅會在發生寫操作時才正式開啟事務,正式開啟事務前的讀請求會通過負載平衡模組分流至唯讀執行個體。
2024年07月31日及之後建立的執行個體明確交易(例如begin或者start transaction)預設支援拆分,2024年07月31日之前開通的執行個體僅支援拆分隱式開啟的事務。
路由邏輯樣本(關閉自動認可,隱式開啟的事務):
SQL類型 | 路由至 | 備忘 |
SELECT | 唯讀執行個體 | 事務內寫前讀。 |
SELECT | 唯讀執行個體 | 事務內寫前讀。 |
UPDATE / INSERT / DELETE | 主執行個體 | 事務首次寫操作(開啟事務)。 |
SELECT | 主執行個體 | 事務內寫後讀。 |
UPDATE / INSERT / DELETE | 主執行個體 | 寫操作。 |
SELECT | 主執行個體 | 事務內寫後讀。 |
COMMIT | 主執行個體 | 事務提交階段。 |
開啟或關閉事務拆分
開通資料庫代理後,事務拆分預設開啟,您可以根據需求隨時關閉或開啟事務拆分功能。
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列,單擊資料庫代理。
在串連資訊地區,在目標代理串連地址的操作列,單擊修改配置。
在彈出的對話方塊中,單擊事務拆分右側的開啟或關閉。
說明開通或關閉事務拆分後僅對新串連生效。
相關API
API | 描述 |
查詢RDS執行個體的資料庫代理詳情。 | |
查詢RDS執行個體資料庫代理的串連地址資訊。 | |
修改RDS執行個體資料庫代理的代理終端設定。 |