由于事務操作的資料通常跨多個物理節點,在分布式資料庫中,類似方案即稱為分布式事務,
TDSQL MySQL版 支持普通分布式事務協議和 XA 分布式事務協議,TDSQL MySQL版(內核5.7或以上版本)默認支持分布式事務,且對客戶端透明,像使用單機事務一樣方便,
TDSQL MySQL版 分布式事務采用兩階段提交演算法(2PC)保證事務的原子性(Atomicity)和一致性(Consistency),隔離級別配置為 Read committed、Repeatable read 或 Serializable,
普通分布式事務
begin; # 開啟事務
... # 跨 set 的增刪改查等非 DDL 操作
commit; # 提交事務
XA 分布式事務
XA 分布式事務是指跨實體的事務:
xa begin ''; # 開啟 XA 事務,事務標識由系統內部生成,因此傳入空字串
... # 跨 set 的增刪改查等非 DDL 操作
select gtid(); # 獲取當前 XA 事務的標識,下面假定為'xid'
xa prepare 'xid'; # 準備事務
xa commit/rollback 'xid'; # 提交或回滾事務
新增事務介面
select gtid() :獲取當前分布式事務的全域唯一標識,如果為空,則該事務不是分布式事務,
普通分布式事務標識的格式為:‘網關id’-‘proxy隨機值’-‘序列號’-‘時間戳’-‘磁區號’,例如 c46535fe-b6-dd-595db6b8-25,
XA 分布式事務標識的格式為:‘ex’-‘網關id’-‘proxy隨機值’-‘序列號’-‘時間戳’-‘磁區號’,例如 ex-c46535fe-b6-dd-595db6b8-25,
select gtid_state(“當前分布式事務的全域唯一標識”):在事務提交例外之后(默認3秒后)用來獲取事務的狀態,可能的結果有:
COMMIT:標識該事務已經或者最侄訓被提交,
ABORT:標識該事務最侄訓被回滾,
空:由于事務的狀態會在一個小時之后清除,因此有以下兩種可能:
一個小時之后查詢,標識事務狀態已經清除,
一個小時以內查詢,標識事務最侄訓被回滾,
xa boost ‘當前分布式事務的全域唯一標識’:普通事務提交(commit)發送例外之后,事務在一段時間內(默認30秒)由后臺組件自動提交或者回滾掉,如果用戶不愿意等待這么長的時間,可以反復呼叫該介面,促使系統及時地提交或回滾掉事務,該介面會回傳事務的狀態,即提交或者回滾,
xa lockwait:顯示當前分布式事務的等待關系,用戶可以通過 dot 工具,將其轉化為圖片,
xa show:顯示當前 proxy 上處于活躍狀態的事務,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308601.html
標籤:其它
上一篇:資料庫知識掃盲,資料庫索引
