前腳剛往資料庫插入資料,後腳就查不出來?

程式設計師麥冬發表於2020-10-16

前腳剛往資料庫插入資料,後腳就查不出來?

線上出現了一個Bug,前腳剛插入的資料,後腳就查不出來。導致了請求的失敗, 資料庫還可不可信了?

先看看程式碼流程

這是一個很簡單的流程,就是插入了一條資料,然後緊接著select。

insert test (id) values (1);
select test where id=1; => 查出來為空

前腳剛插入,而且採用的是自動提交模式,那麼insert這條就自動提交了。那為何緊接著查不出來呢?這個是在同一個執行緒之內啊,不存在時序混亂的問題。這時候,我們就得看看我們的環境了

部署模式

我們先看一看我們的應用部署模式吧。
在這裡插入圖片描述

我們的應用是通過APP是通過DBProxy去查詢資料庫的。DBProxy可以有效的管理連線,以及一系列的分析/審計/許可權功能,相當好用。

在它們提供的功能裡面,有一項功能引起了我的注意,就是透明主從功能。這個功能的描述為:
在這裡插入圖片描述

推理

按照啟用了這個功能後,我們的sql執行模式應該是這樣insert到主庫而select到從庫。
在這裡插入圖片描述

這時候只要主從稍微有些延遲,那麼select去從庫就找不到資料從而引起問題了!

解決方案

首先,我們讓DBProxy先下掉這個功能,至於主從負載分離,我們採用了另一個方案。
在這裡插入圖片描述

雖然需要修改程式碼,但比起線上出問題好多了。

最後

感謝大家看到這裡,文章有不足,歡迎大家指出;如果你覺得寫得不錯,那就給我一個贊吧。

也歡迎大家關注我的公眾號:程式設計師麥冬,麥冬每天都會分享java相關技術文章或行業資訊,歡迎大家關注和轉發文章!

相關文章