下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當前位置:軟件下載吧 > 技術開發 > 數據庫 > PostgreSQL數據庫事務出現未知狀態的處理方法

          PostgreSQL數據庫事務出現未知狀態的處理方法

          時間:2024-02-14 10:20作者:下載吧人氣:39

          背景

          數據庫的事務是原子操作,要么成功,要么失敗。但是實際上在客戶端的視角,可能有第三種狀態:unknown狀態。

          當客戶端提交事務結束(rollback , commit , prepare xact , rollback pxact , commit pxact)的請求后,數據庫收到請求,數據庫可能執行失敗,也可能執行成功,不管怎樣都要寫對于的WAL日志,還有CLOG,然后數據庫要將執行結果返回給客戶端ACK。

          這里存在幾種可能,導致客戶端不知道執行到底怎么樣了?

          收到客戶端請求后,數據庫沒有返回任何ACK給客戶端,客戶端對這次請求很茫然,它只能人為數據庫處于UNKNOWN的狀態。

          UNKNOWN 事務的處理

          unknown事務,就是客戶端沒有收到commit/rollback ACK的事務。不知道是成功還是失敗。

          多節點(quorum based sync replication)與單節點都可能出現UNKNOWN事務,效果、形態一致。

          如何處理unknown事務呢?

          unknown事務分為以下幾種情況.

          rollback , commit , prepare xact , rollback pxact , commit pxact 幾種情況的unknown處理方法:

          1、兩階段解決unknown狀態問題

          prepare 階段unknown, 切換leader后,客戶端通過pg_prepared_xacts視圖檢查prepare xact狀態,如果沒有prepare xact則說明失敗了,那么整個事務重新發起即可。如果prepare xact存在,說明prepare xact成功了。

          commit or rollback prepare xact階段unknown, 切換后檢查prepare xact狀態,存在則重試commit or rollback prepare xact。不存在則說明已經成功(我們認為2PC是一定成功的),無須處理。

          2、非兩階段事務,rollback unknown無須處理,rollback失敗或成功對于客戶端來說結果是一樣的。因為不管怎樣都會回滾掉,這是數據庫原子性保障的。

          3、非兩階段事務,commit unknown處理,極度嚴謹的場景,程序可以設計事務狀態可回溯,例如:

          事務開始時,記錄事務號或唯一流水號,事務號在數據庫中是一個唯一的流水,可以根據事務號查詢它的狀態,比如postgresql。

          但是并不是所有數據庫都有這種接口,比如非物理流式復制的數據庫,則可以在事務中增加全局唯一流水號來查看事務是否提交。這里利用了事務的原子特性,既要么全成功要么全失敗。可以舉個使用例子。

          使用業務流水實現事務狀態判斷的例子:

          begin; 
          生成唯一業務流水ID, 寫入到某個流水表,同時在程序或其他數據庫中記錄這個流水號,備查。 
          執行事務 
          提交事務; 
           
          — 出現unknown 
           
          通過唯一業務流水ID,查詢數據庫中是否存在這條記錄。 
          如果不存在,說明事務提交失敗。 
          如果存在,說明事務提交成功。(因為數據庫的事務是原子操作) 

          標簽[db:關鍵字]

          相關下載

          查看所有評論+

          網友評論

          網友
          您的評論需要經過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 国产福利微拍精品一区二区| 人妻无码一区二区三区四区| 一区二区国产在线观看| 无码人妻精品一区二区在线视频 | 一区二区三区福利视频| 亚洲AV成人一区二区三区在线看| 亚洲男人的天堂一区二区| 在线观看精品一区| 丝袜美腿一区二区三区| 精品无码一区二区三区电影| 久久国产午夜一区二区福利| 国产无线乱码一区二三区| 免费一区二区无码东京热| 国产美女口爆吞精一区二区| 一区二区三区杨幂在线观看| 国产一区二区三区樱花动漫| 免费在线观看一区| 精品中文字幕一区二区三区四区| 日本一区免费电影| 国产福利一区二区| 男人免费视频一区二区在线观看 | 日本免费一区二区久久人人澡| 日本精品一区二区三区在线视频| 国产一国产一区秋霞在线观看| 国产精品一区二区久久乐下载| 日韩福利视频一区| 风流老熟女一区二区三区| 国产精品亚洲高清一区二区| 手机看片福利一区二区三区| 中文字幕一区二区人妻性色| 精品91一区二区三区| 丝袜人妻一区二区三区网站| 中文字幕亚洲一区| 久久久国产精品一区二区18禁| 一区二区三区精品| 亚洲日韩AV一区二区三区四区 | 麻豆高清免费国产一区| 无码少妇A片一区二区三区| 日本美女一区二区三区| 波多野结衣AV无码久久一区| 国产主播福利一区二区|