婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > DB為何大量出現select @@session.tx_read_only 詳解

DB為何大量出現select @@session.tx_read_only 詳解

熱門標簽:德惠市地圖標注 合肥營銷外呼系統收費 商家地圖標注哪個好 深圳 承德電腦地圖標注 外呼系統從哪買 陜西400電話如何申請 地圖標注賺錢真假 遵義地圖標注app

發現問題

在一次撈取Top SQL中,發現DB大量執行 select @@session.tx_read_only ,幾乎每一條DML語句前,都會有這么一個sql。但是應用層并沒有做特殊處理,那么這個SQL語句有什么作用?是誰執行了它?

詳細介紹

此sql的作用主要是判斷事務是否為只讀事務。MySQL自身會對只讀事務做優化,這是 MySQL5.6.5 版本 以后才出現的。 http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_tx_read_only

定位到MySQL的驅動包

ConnectionImpl.java :


可以看到,在if條件中,對MySQL的 版本 做了判斷,同時也有  !getUseLocalSessionState()  這么一個條件,對應 JDBC參數useLocalSessionState ,當這個值為false時,會發出select @@session.tx_read_only; 這條sql。

默認情況下,我們的連接串信息沒有包含useLocalSessionState參數的設置,這個值默認為false。

這個值的作用是驅動程序是否使用autocommit,read_only和transaction isolation的內部值(jdbc端的本地值)。

如果設置為false,則需要這個判斷這三個參數的場景,都需要發語句到遠端請求,比如更新語句前,

需要發語句select @@session.tx_read_only確認會話是否只讀。

如果設置為true,則只需要取本地值即可。這可以解釋為什么有的實例 select @@session.tx_read_only語句很多。

一般情況下,驅動可以保證本地值與遠程服務器值保持一致。當應用調用setAutoCommit, setTransactionIsolation 和 setReadOnly這三個接口設置參數值時,會與遠程服務器同步。

具體而言,

當useLocalSessionState為true時,若值與本地值不一致,則發往遠程更新;

當useLocalSessionState為false時,無論設置值與本地值是否一致,每次都發往遠程更新。這可以解釋為什么有些實例set autocommit語句比較多。

但是,若用戶設置參數時不通過JDBC接口(比如setAutoCommit),而是執行語句'set autocommit=xxx'設置, 那么就會存在本地值與遠程不一致的情況,進而可能導致修改參數useLocalSessionState后,業務邏輯發生變化。

相關設置的SQL語句:

set autocommit=0 /*設置會話自動提交模式*/         對應的JDBC接口:  setAutoCommit(false)
set tx_isolation='read-committed' /*設置事務的隔離級別*/    對應的JDBC接口:setTransactionIsolation('read-committed') 
set tx_read_only=0; /*設置只讀事務*/             對應的JDBC接口:setReadOnly(false)

設置useLocalSessionState默認值為ture,可能導致業務邏輯含義發生變化。觸發的條件是,用戶通過SQL語句直接設置自動提交參數,隔離級別參數或只讀事務參數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • DB2 SELECT語句高級用法

標簽:新余 三門峽 揚州 巴中 贛州 商丘 貴州 南陽

巨人網絡通訊聲明:本文標題《DB為何大量出現select @@session.tx_read_only 詳解》,本文關鍵詞  為何,大量,出現,select,@@session.tx,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《DB為何大量出現select @@session.tx_read_only 詳解》相關的同類信息!
  • 本頁收集關于DB為何大量出現select @@session.tx_read_only 詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 普定县| 天峻县| 安远县| 双鸭山市| 通山县| 东明县| 临西县| 鹤壁市| 息烽县| 梅州市| 咸丰县| 渝北区| 惠东县| 独山县| 休宁县| 龙岩市| 突泉县| 丹阳市| 云梦县| 湖南省| 赤壁市| 浑源县| 珲春市| 高要市| 始兴县| 滦南县| 娄底市| 镇康县| 逊克县| 通州市| 潞西市| 许昌市| 龙井市| 鱼台县| 怀仁县| 厦门市| 新泰市| 明光市| 渝北区| 宁明县| 景德镇市|