最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一次數(shù)據(jù)庫(kù)查詢(xún)超時(shí)優(yōu)化問(wèn)題的實(shí)戰(zhàn)記錄

 更新時(shí)間:2021年10月13日 10:19:44   作者:麗大佬的小跟班  
當(dāng)MySQL服務(wù)器出現(xiàn)異常(慢),首先要考慮是否因SQL語(yǔ)句引起數(shù)據(jù)庫(kù)慢,下面這篇文章主要給大家介紹了一次數(shù)據(jù)庫(kù)查詢(xún)超時(shí)優(yōu)化問(wèn)題的實(shí)戰(zhàn)記錄,需要的朋友可以參考下

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

在七月份時(shí),經(jīng)常發(fā)現(xiàn)有幾個(gè)定時(shí)任務(wù)報(bào)錯(cuò),查看了下異常原因,大概定位是數(shù)據(jù)庫(kù)執(zhí)行異常

### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Unsupported command
### The error may exist in class path resource [mapper/XXXXXXXXX-Mapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select t3.cino, t2.sn as orderSn,             t2.provider_id as providerId,             t4.logistics_no as logisticsSn,             t2.`name`,      
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Unsupported command
; Unsupported command; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Unsupported command
org.springframework.dao.DataAccessResourceFailureException: 
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Unsupported command
### The error may exist in class path resource [mapper/XXXXXXXXXOMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select t3.cino, t2.sn as orderSn,             t2.provider_id as providerId,             t4.logistics_no as logisticsSn,         
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Unsupported command

查找原因

1 和 DBA 排查 mycat(公司使用 mycat ) 和 mysql 的錯(cuò)誤日志。發(fā)現(xiàn)是應(yīng)用服務(wù)這邊會(huì)給 MyCat 發(fā)送一個(gè) KILL QUERY 命令,而 myCat 不支持該 KILL QUERY 命令。才給應(yīng)用服務(wù)返回了 Unsupported command 異常錯(cuò)誤

2021-07-02 10:46:33.567  WARN [$_NIOREACTOR-37-RW] (io.mycat.server.ServerQueryHandler.query(ServerQueryHandler.java:96)) - Unsupported command:KILL QUERY 2956587

2 上網(wǎng)搜索了下 KILLQUERY 發(fā)生的場(chǎng)景,在一篇文章 深入分析JDBC超時(shí)機(jī)制 找到問(wèn)題所在,sql 執(zhí)行超時(shí),jdbc 會(huì)向 mysql 服務(wù)發(fā)送一個(gè)kill 命令,從而讓 mysql 停止 sql 執(zhí)行。不過(guò)傳給了 mycat 服務(wù),mycat 沒(méi)有處理該命令,而是直接報(bào)錯(cuò)返回

3 查看了下應(yīng)用服務(wù)的配置,在 jdbc:url 統(tǒng)一配置的 mysql socket 執(zhí)行超時(shí)時(shí)間是 15s。而在 mybatis 單獨(dú)的 sql 執(zhí)行語(yǔ)句配置的設(shè)置更長(zhǎng),是 20s(注意這里的配置是 xml 加 注解的方式)

3.1 mybatis xml里的 sql 語(yǔ)句我單獨(dú)在客戶端執(zhí)行,測(cè)試的 sql 執(zhí)行時(shí)間大概在 6,7 秒左右,是不會(huì)超過(guò) 15s 這個(gè)限制的,但是從定時(shí)任務(wù)調(diào)度日志看,每次任務(wù)總體上就執(zhí)行了 8 秒左右,說(shuō)明 mycat 確實(shí)是在15秒內(nèi)收到超時(shí) KILL 命令,從而導(dǎo)致sql 執(zhí)行失敗

4 想著是不是在其他地方配置超時(shí)。細(xì)看了下 mybatis 的配置,還真有一個(gè)統(tǒng)一 sql 超時(shí)配置,default-statement-timeout = 5

-

從mybatis 源碼文檔上看,單獨(dú)設(shè)置的 mybatis @Options timeout屬性是會(huì)覆蓋掉在 yml 配置的 default-statement-timeout屬性的。難道是 @Options 沒(méi)生效 ?

5 因此決定本地調(diào)試一波。發(fā)現(xiàn) @Options 還真的沒(méi)生效,jdbc的 queryTimeout 取值的是 mybatis在yml的 全局配置

解決問(wèn)題

上面提到, sql 的 statment 混合使用了 mybatis 的注解和xml混合使用。猜測(cè)應(yīng)該是 mybatis 的 注解和xml 使用方式是不兼容的。因此試著在 xml 的 statment 修改了 timeout配置。設(shè)置 timeout = 60。發(fā)現(xiàn) 配置生效了,如下圖


后面也試著將 sql 放置到 mybatis 的 @Select 注解,去掉 xml 的 statement。@Options 的配置也是可以生效的。mybatis 的@Options 和 xml 是無(wú)法同時(shí)生效的,可能 mybatis 其他的注解一樣和 xml 配置不能同時(shí)生效,希望讀者以后能避開(kāi)這個(gè)坑

額外話:Transaction Timeout、Statement Timeout、Socket timeout 的區(qū)別

上面 mybatis 配置的 timeout 其實(shí)就是Statement Timeout。還有就是在jdbc:url 配置的socketTimeout;其實(shí)還有是spring定義的一個(gè)事務(wù)超時(shí): Transaction Timeout

它們?nèi)叩年P(guān)系是在怎樣的呢

Statement Timeout

  • statement timeout 是用來(lái)限制一條語(yǔ)句 statement 的執(zhí)行時(shí)長(zhǎng),可通過(guò)調(diào)用JDBC的java.sql.Statement.setQueryTimeout(int timeout) 進(jìn)行設(shè)置,不過(guò)一般是通過(guò)ORM框架來(lái)進(jìn)行設(shè)置
  • 在 myBatis中,statement timeout 的默認(rèn)值是通過(guò) defaultStatementTimeout 屬性進(jìn)行設(shè)置。同時(shí)還可以在 xml 中 select,insert,update標(biāo)簽設(shè)置timeout屬性,從而對(duì)不同 sql 語(yǔ)句配置超時(shí)時(shí)間

Transaction Timeout

  • Spring 提供的 transaction timeout 配置也非常簡(jiǎn)單,它會(huì)記錄每個(gè)事務(wù)的開(kāi)始時(shí)間和消耗時(shí)間,當(dāng)超出timeout值時(shí)將拋出異常。
  • 假設(shè)某個(gè)事務(wù)中包含 3 個(gè)statement,每個(gè)statement的執(zhí)行時(shí)間是 100ms,其他業(yè)務(wù)邏輯的執(zhí)行時(shí)間是 50ms,那么transaction timeout至少應(yīng)該設(shè)置為350ms(100 * 3 + 50)

Socket timeout

  • JDBC的 socket timeout 在數(shù)據(jù)庫(kù)被突然停掉或是發(fā)生網(wǎng)絡(luò)錯(cuò)誤時(shí)十分重要。由于TCP/IP的結(jié)構(gòu)原因,socket沒(méi)有辦法探測(cè)到網(wǎng)絡(luò)錯(cuò)誤,因此應(yīng)用也無(wú)法主動(dòng)發(fā)現(xiàn)數(shù)據(jù)庫(kù)連接斷開(kāi)。如果沒(méi)設(shè)置 socket timeout 的話,應(yīng)用在數(shù)據(jù)庫(kù)返回結(jié)果前會(huì)無(wú)期限地等下去,這種連接被稱(chēng)為 dead connection

優(yōu)先級(jí)順序

  • Socket timeout 級(jí)別優(yōu)于 Transaction Timeout,而Transaction Timeout 級(jí)別優(yōu)于 Statement Timeout。也就是說(shuō)如果 Statement Timeout 大于 Transaction Timeout 或者 Socket timeout,則無(wú)法生效
  • 不推薦使用socket timeout來(lái)限制statement的執(zhí)行時(shí)長(zhǎng),因此socket timeout的值必須要高于statement timeout,否則,socket timeout將會(huì)先生效,這樣statement timeout就變得毫無(wú)意義

總結(jié)

到此這篇關(guān)于數(shù)據(jù)庫(kù)查詢(xún)超時(shí)優(yōu)化問(wèn)題的文章就介紹到這了,更多相關(guān)數(shù)據(jù)庫(kù)查詢(xún)超時(shí)優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

參數(shù)文章

相關(guān)文章

  • SQL關(guān)系模型的知識(shí)梳理總結(jié)

    SQL關(guān)系模型的知識(shí)梳理總結(jié)

    這篇文章主要為大家介紹了SQL關(guān)系模型,文中對(duì)SQL關(guān)系模型的知識(shí)作了詳細(xì)的梳理總結(jié),有需要的朋友可以借鑒參考下希望能夠有所幫助
    2021-10-10
  • 大數(shù)據(jù)時(shí)代的數(shù)據(jù)庫(kù)選擇:SQL還是NoSQL?

    大數(shù)據(jù)時(shí)代的數(shù)據(jù)庫(kù)選擇:SQL還是NoSQL?

    執(zhí)行大數(shù)據(jù)項(xiàng)目的企業(yè)面對(duì)的關(guān)鍵決策之一是使用哪個(gè)數(shù)據(jù)庫(kù),SQL還是NoSQL?SQL有著驕人的業(yè)績(jī),龐大的安裝基礎(chǔ);而NoSQL正在獲得可觀的收益,且有很多支持者。我們來(lái)看看兩位專(zhuān)家對(duì)這個(gè)問(wèn)題的看法
    2014-03-03
  • hive中的幾種join到底有什么區(qū)別

    hive中的幾種join到底有什么區(qū)別

    hive處理表關(guān)聯(lián)時(shí)由于數(shù)據(jù)量以及數(shù)據(jù)傾斜等問(wèn)題會(huì)導(dǎo)致計(jì)算性能差甚至任務(wù)失敗,下面這篇文章主要給大家介紹了關(guān)于hive中幾種join到底有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 解決navicat遠(yuǎn)程連接mysql報(bào)錯(cuò)10038的問(wèn)題

    解決navicat遠(yuǎn)程連接mysql報(bào)錯(cuò)10038的問(wèn)題

    這篇文章主要介紹了解決navicat遠(yuǎn)程連接mysql報(bào)錯(cuò)10038的問(wèn)題,本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • CentOS 8.2部署CouchDB 3.3數(shù)據(jù)庫(kù)的方法

    CentOS 8.2部署CouchDB 3.3數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了CentOS 8.2部署CouchDB 3.3數(shù)據(jù)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Navicat快速導(dǎo)入和導(dǎo)出sql文件的方法

    Navicat快速導(dǎo)入和導(dǎo)出sql文件的方法

    Navicat是MySQL非常好用的可視化管理工具,功能非常強(qiáng)大,能滿足我們?nèi)粘?shù)據(jù)庫(kù)開(kāi)發(fā)的所有需求。今天教大家如何導(dǎo)入和導(dǎo)出SQL文件,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Navicat11全系列激活教程圖文詳解(Navicat注冊(cè)機(jī))

    Navicat11全系列激活教程圖文詳解(Navicat注冊(cè)機(jī))

    這篇文章主要介紹了Navicat11全系列激活教程圖文詳解(注冊(cè)機(jī)),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 90%程序員面試會(huì)遇到的索引優(yōu)化問(wèn)題

    90%程序員面試會(huì)遇到的索引優(yōu)化問(wèn)題

    不管是用C/C++/Java等代碼編寫(xiě)的程序,還是SQL編寫(xiě)的數(shù)據(jù)庫(kù)腳本,都存在一個(gè)持續(xù)優(yōu)化的過(guò)程。也就是說(shuō),代碼優(yōu)化對(duì)于程序員來(lái)說(shuō),是一個(gè)永恒的話題。下面這篇文章主要給大家總結(jié)介紹了90%程序員在面試的時(shí)候會(huì)遇到的索引優(yōu)化問(wèn)題,需要的朋友可以參考下。
    2017-11-11
  • SQL數(shù)據(jù)庫(kù)語(yǔ)句大全

    SQL數(shù)據(jù)庫(kù)語(yǔ)句大全

    本篇文章詳細(xì)整理了Access、MySQL以及SQL?Server三種數(shù)據(jù)庫(kù)語(yǔ)句。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)概述與優(yōu)缺點(diǎn)對(duì)比

    關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)概述與優(yōu)缺點(diǎn)對(duì)比

    這篇文章介紹了關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)概述與優(yōu)缺點(diǎn)對(duì)比,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03

最新評(píng)論

巴楚县| 喀什市| 宝山区| 东丰县| 高清| 祁阳县| 江阴市| 乌海市| 炉霍县| 田东县| 宜都市| 松江区| 三门峡市| 宁夏| 天祝| 新乐市| 宁远县| 黄梅县| 扎兰屯市| 新泰市| 赫章县| 宁明县| 滕州市| 仪征市| 盐城市| 南平市| 贵阳市| 那曲县| 屯门区| 达日县| 文山县| 灵台县| 吉安县| 徐水县| 博野县| 泰安市| 同心县| 石棉县| 抚宁县| 张北县| 汝阳县|