innodb_support_xa的作用

chenfeng發表於2018-05-03
innodb_support_xa可以開關InnoDB的xa兩段式事務提交。

如何開啟?
innodb_support_xa=true,支援xa兩段式事務提交。

預設為true,值為on,多執行緒併發執行提交事務,按照事務的先後順序寫入binlog,如果關閉則binlog記錄事務的順序可能與實際不符,造成slave不一致

mysql> show global variables like 'innodb_support_xa';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| innodb_support_xa | ON    |
+-------------------+-------+
1 row in set (0.01 sec)


內部XA
現在mysql內部一個處理流程大概是這樣:
1. prepare ,然後將redo log持久化到磁碟
2. 如果前面prepare成功,那麼再繼續將事務日誌持久化到binlog
3. 如果前面成功,那麼在redo log裡面寫上一個commit記錄


那麼假如在進行著三步時有任何一步失敗,crash recovery是怎麼進行的呢?
此時會先從redo log將最近一個檢查點開始的事務讀出來,然後參考binlog裡面的事務進行恢復。
如果是在1 crash,那麼自然整個事務都回滾;
如果是在2 crash,那麼也會整個事務回滾;


如果是在3 crash(僅僅是commit記錄沒寫成功),那麼沒有關係因為2中已經記錄了此次事務的binlog,所以將這個進行commit。所以總結起來就是redo log裡凡是prepare成功,但commit失敗的事務都會先去binlog查詢判斷其是否存在(透過XID進行判斷,是不是經常在binlog裡面看到Xid=xxxx?這就是xa事務id),如果有則將這個事務commit,否則rollback。


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