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。
網站欄目:innodb_support_xa的作用
URL分享:
http://www.xueling.net.cn/article/johgec.html