欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

DB為何大量出現(xiàn)select @@session.tx_read_only 詳解

 更新時間:2018年04月26日 10:23:26   作者:Hosee  
這篇文章主要給大家介紹了關(guān)于DB為何大量出現(xiàn)select @@session.tx_read_only 的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

發(fā)現(xiàn)問題

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

詳細介紹

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

定位到MySQL的驅(qū)動包

ConnectionImpl.java :


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

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

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

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

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

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

一般情況下,驅(qū)動可以保證本地值與遠程服務(wù)器值保持一致。當應(yīng)用調(diào)用setAutoCommit, setTransactionIsolation 和 setReadOnly這三個接口設(shè)置參數(shù)值時,會與遠程服務(wù)器同步。

具體而言,

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

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

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

相關(guān)設(shè)置的SQL語句:

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

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

總結(jié)

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

您可能感興趣的文章:

相關(guān)文章

  • Linux服務(wù)器中MySQL遠程連接的開啟方法

    Linux服務(wù)器中MySQL遠程連接的開啟方法

    今天在Linux服務(wù)器上安裝了msyql數(shù)據(jù)庫,在本地訪問的時候可以訪問,但是我想通過遠程的方式訪問的時候就不能訪問了,查詢資料后發(fā)現(xiàn),Linux下MySQL默認安裝完成后只有本地訪問的權(quán)限,沒有遠程訪問的權(quán)限,需要你給指定用戶設(shè)置訪問權(quán)限才能遠程訪問該數(shù)據(jù)庫
    2017-06-06
  • 一個簡單的MySQL備份Shell腳本

    一個簡單的MySQL備份Shell腳本

    這篇文章主要介紹了一個簡單的MySQL備份Shell腳本,本文直接給出代碼實例,需要的朋友可以參考下
    2015-07-07
  • MySQL?Workbench快速引入sql文件的圖文教程

    MySQL?Workbench快速引入sql文件的圖文教程

    在MySQL使用時,通常需要將數(shù)據(jù)庫sql文件保存,或者是導(dǎo)入他人的sql文件,可以使用workbench處理,這篇文章主要給大家介紹了關(guān)于MySQL?Workbench快速引入sql文件的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 一文解答為什么MySQL的count()方法這么慢

    一文解答為什么MySQL的count()方法這么慢

    這篇文章主要介紹了一文解答為什么MySQL的count()方法這么慢,mysql用count方法查全表數(shù)據(jù),在不同的存儲引擎里實現(xiàn)不同,myisam有專門字段記錄全表的行數(shù),直接讀這個字段就好了
    2022-07-07
  • MySQL sql_mode修改不生效的原因及解決

    MySQL sql_mode修改不生效的原因及解決

    這篇文章主要介紹了MySQL sql_mode修改不生效的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-05-05
  • MYSQL出現(xiàn)" Client does not support authentication "的解決方法

    MYSQL出現(xiàn)" Client does not support authentication "的

    MYSQL出現(xiàn)" Client does not support authentication "的解決方法...
    2007-06-06
  • sqlite3遷移mysql可能遇到的問題集合

    sqlite3遷移mysql可能遇到的問題集合

    這篇文章主要給大家介紹了關(guān)于sqlite3遷移mysql可能遇到的問題集合,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • MySql insert插入操作的3個小技巧分享

    MySql insert插入操作的3個小技巧分享

    這篇文章主要介紹了MySql insert插入操作的3個小技巧分享,本文講解了插入的數(shù)據(jù)來源自其他表、插入時排除(忽略)重復(fù)記錄、插入時遇到重復(fù)記錄做更新操作三個小技巧,需要的朋友可以參考下
    2015-03-03
  • mysql對binlog的處理說明

    mysql對binlog的處理說明

    Mysql和其它開源數(shù)據(jù)庫相比,具有更好的擴展性。其主要原因是它提供了存儲引擎的開放接口。喜歡自己折騰數(shù)據(jù)庫的程序員可以從這個接口起步,打造有個性的數(shù)據(jù)庫。
    2011-07-07
  • mysql分頁時offset過大的Sql優(yōu)化經(jīng)驗分享

    mysql分頁時offset過大的Sql優(yōu)化經(jīng)驗分享

    mysql分頁是我們在開發(fā)經(jīng)常遇到的一個功能,最近在實現(xiàn)該功能的時候遇到一個問題,所以這篇文章主要給大家介紹了關(guān)于mysql分頁時offset過大的Sql優(yōu)化經(jīng)驗,文中介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起看看吧。
    2017-08-08

最新評論