文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
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 屬性的全域操作的組成部分。(與非分散式交易一樣,如果您的應用程式對讀取現象敏感,則可能首選 SERIALIZABLE。對於分散式交易,REPEATABLE 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)。例如,當交易管理員發現全域交易僅包含一個交易資源(也就是單個分支)時,可以同時告知該資源準備和提交。