文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.3.8 XA 交易

針對 InnoDB 儲存引擎,可支援 XA 交易。 MySQL 的 XA 實作是基於 X/Open CAE 文件 分散式交易處理:XA 規格。此文件由 The Open Group 發布,並可在 http://www.opengroup.org/public/pubs/catalog/c193.htm 取得。目前 XA 實作的限制請參閱第 15.3.8.3 節,「XA 交易的限制」

在用戶端方面,沒有特殊的要求。MySQL 伺服器的 XA 介面包含以 XA 關鍵字開頭的 SQL 陳述式。MySQL 用戶端程式必須能夠傳送 SQL 陳述式並理解 XA 陳述式介面的語義。它們不需要連結到最新的用戶端程式庫。較舊的用戶端程式庫也可以運作。

在 MySQL 連接器中,MySQL Connector/J 5.0.0 及更高版本透過類別介面直接支援 XA,該介面會為您處理 XA SQL 陳述式介面。

XA 支援分散式交易,也就是允許多個獨立的交易資源參與全域交易的能力。交易資源通常是 RDBMS,但也可能是其他類型的資源。

全域交易涉及多個本身具有交易性的動作,但這些動作必須整體成功完成,或者整體回滾。本質上,這將 ACID 屬性向上提升一個層級,以便多個 ACID 交易可以協同執行,作為也具有 ACID 屬性的全域操作的組成部分。(與非分散式交易一樣,如果您的應用程式對讀取現象敏感,則可能首選 SERIALIZABLEREPEATABLE READ 對於分散式交易可能不夠。)

分散式交易的一些範例

  • 應用程式可以作為整合工具,將訊息傳遞服務與 RDBMS 結合。應用程式確保處理訊息傳送、擷取和處理的交易,以及包含交易資料庫的所有交易,都在全域交易中進行。您可以將此視為交易性電子郵件。

  • 應用程式執行涉及不同資料庫伺服器的動作,例如 MySQL 伺服器和 Oracle 伺服器(或多個 MySQL 伺服器),其中涉及多個伺服器的動作必須作為全域交易的一部分發生,而不是作為每個伺服器本機的個別交易。

  • 銀行在 RDBMS 中保存帳戶資訊,並透過自動提款機 (ATM) 發送和接收資金。有必要確保 ATM 動作正確反映在帳戶中,但這不能僅透過 RDBMS 完成。全域交易管理器整合 ATM 和資料庫資源,以確保金融交易的整體一致性。

使用全域交易的應用程式包含一個或多個資源管理器和交易管理器

  • 資源管理器 (RM) 提供對交易資源的存取權。資料庫伺服器是一種資源管理器。必須能夠提交或回滾 RM 管理的交易。

  • 交易管理器 (TM) 協調屬於全域交易一部分的交易。它與處理每個交易的 RM 通訊。全域交易中的個別交易是全域交易的分支。全域交易及其分支由稍後描述的命名方案識別。

MySQL 的 XA 實作使 MySQL 伺服器能夠作為資源管理器,處理全域交易中的 XA 交易。連接到 MySQL 伺服器的用戶端程式充當交易管理器。

為了執行全域交易,有必要了解涉及哪些組件,並將每個組件帶到可以提交或回滾的點。根據每個元件報告的成功能力,它們必須全部提交或全部回滾,作為原子群組。也就是說,所有組件必須全部提交,或所有組件必須全部回滾。為了管理全域交易,有必要考慮到任何元件或連線網路都可能發生故障。

執行全域交易的過程使用兩階段提交 (2PC)。這發生在執行全域交易分支所執行的動作之後。

  1. 在第一階段,所有分支都已準備就緒。也就是說,它們由 TM 告知準備好提交。通常,這表示管理分支的每個 RM 將分支的動作記錄在穩定儲存中。分支會指示它們是否能夠執行此操作,這些結果會用於第二階段。

  2. 在第二階段,TM 會告知 RM 是否要提交或回滾。如果所有分支在準備時都指示它們能夠提交,則會告知所有分支提交。如果任何分支在準備時指示它無法提交,則會告知所有分支回滾。

在某些情況下,全域交易可能會使用單階段提交 (1PC)。例如,當交易管理器發現全域交易僅由一個交易資源組成(即單一分支)時,可以同時告知該資源準備並提交。