The world's most popular open source database
XA
トランザクションのサポートは、InnoDB
保存エンジンに限られています。
MySQL XA の実装は、MySQL サーバが Resource manager
の役割をしたり、クライアント プログラムが
Transaction Manager の役割をする 「外部 XA,」
のものです。「内部 XA」
は実装されていません。これによって、MySQL
サーバ内の個々の保存エンジンが RM
の役割をしたり、サーバそのものが TM
の役割をしたりすることができます。内部 XA
は、ひとつ以上の保存エンジンが関与する XA
トランザクションを処理するために必要になります。テーブル
ハンドラのレベルで 2
相コミットをサポートする保存エンジンを必要とするため、内部
XA の実装は不完全なもので、現時点では
InnoDB だけです。
XA START では、JOIN
および RESUME
句はサポートされていません。
XA END では、SUSPEND [FOR
MIGRATE] 句はサポートされていません。
xid 値の
bqual
部分が、大規模トランザクション内の各 XA
トランザクションによって異なる必要があるという条件は、現在の
MySQL XA の実装の制限です。これは XA
の仕様によるものではありません。
XA トランザクションが PREPARED
状態に至ると、MySQL サーバが切断される (
例えば、Unix の kill -9 で )
、または不自然に停止する場合、サーバが再起動した後にトランザクションを続けることができるはずです。しかし、クライアントが再接続をし、トランザクションをコミットした場合、そのトランザクションは、たとえコミットされていても、バイナリ
ログには記録されないでしょう。これは、データとバイナリ
ログの同調が途切れたということです。XA
を複製と一緒に安全に使用することはできないと思われます。
サーバが保留になっている XA
トランザクションを、たとえ
PREPARED
状態に至っていても、ロールバックするということはありえます。これは、クライアントの接続が切断されて、サーバは起動を続ける、またはクライアントが接続されているのに、サーバが自然に停止する場合に起こります
。(
後者のケースでは、サーバが切断される各接続をマークし、それに関連する
PREPARED XA
トランザクションをロールバックする )
。PREPARED XA
トランザクションをコミットする、またはロールバックすることは可能であるはずですが、これはバイナリのロギング
メカニズムを変更なしには実行できません。

