绍兴七夕进出口有限公司

从箱包皮具而让 mysql 罢手 sql 施行
你的位置:绍兴七夕进出口有限公司 > 新闻资讯 > 从箱包皮具而让 mysql 罢手 sql 施行
从箱包皮具而让 mysql 罢手 sql 施行
发布日期:2024-05-02 09:39    点击次数:200

从箱包皮具而让 mysql 罢手 sql 施行

[[428834]]

本文转载自微信公众号「潜行前行」箱包皮具,作家cscw 。转载本文请研究潜行前行众号。

问题发现 在七月份时,常常发现存几个定时任务报错,检察了下异常原因,大商定位是数据库施行异常。
### 箱包皮具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 的额外日记。发现是哄骗劳动这边会给 MyCat 发送一个 KILL QUERY 高歌,而 myCat 不扶持该 KILL QUERY 高歌。才给哄骗劳动复返了 Unsupported command 异常额外
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 上网搜索了下 KILL QUERY 发生的场景,在一篇著作 ?久了分析JDBC超时机制 找到问题所在,sql 施行超时,jdbc 会向 mysql 劳动发送一个kill 高歌,从而让 mysql 罢手 sql 施行。不别传给了 mycat 劳动,mycat 莫得处理该高歌,而是平直报错复返 3 检察了下哄骗劳动的建设, 浑源县立麻类有限公司在 jdbc:url 调处建设的 mysql socket 施行超时常辰是 15s。而在 mybatis 单独的 sql 施行语句建设的竖立更长, 大同区当染料有限公司是 20s(防备这里的建设是 xml 加 注解的花式) 3.1 mybatis xml里的 sql 语句我单独在客户端施行,左云县海颜料有限公司测试的 sql 施行时辰大约在 6, 陕西森扬科工贸有限公司7 秒傍边, 福州和元进出口贸易有限公司是不会杰出 15s 这个适度的,关联词从定时任务调过活记看,每次任务总体上就施行了 8 秒傍边,讲解 mycat 确乎是在15秒内收到超时 KILL 高歌,从而导致sql 施行失败

4 思着是不是在其他所在建设超时。细看了下 mybatis 的建设,还真有一个调处 sql 超时建设,箱包皮具default-statement-timeout = 5

从mybatis 源码文档上看,单独竖立的 mybatis @Options timeout属性是会隐藏掉在 yml 建设的 default-statement-timeout属性的。难说念是 @Options 没奏效 ?

5 因此决定土产货调试一波。发现 @Options 还确凿没奏效,jdbc的 queryTimeout 取值的是 mybatis在yml的 全局建设

贬贬低题 上头提到, sql 的 statment 夹杂使用了 mybatis 的注解和xml夹杂使用。推断应该是 mybatis 的 注解和xml 使用花式是不兼容的。因此试着在 xml 的 statment 修改了 timeout建设。竖立 timeout = 60。发现 建设奏效了,如下图图片:

背面也试着将 sql 摒弃到 mybatis 的 @Select 注解,去掉 xml 的 statement。@Options 的建设亦然不错奏效的。mybatis 的@Options 和 xml 是无法同期奏效的,可能 mybatis 其他的注解通常和 xml 建设不成同期奏效,但愿读者以后能隐匿这个坑。

Transaction Timeout、Statement Timeout、Socket timeout 的分裂 上头 mybatis 建设的 timeout 其实即是Statement Timeout。还有即是在jdbc:url 建设的socketTimeout;其实还有是spring界说的一个事务超时:Transaction Timeout。

它们三者的关系是在若何的呢

Statement Timeout

statement timeout 是用来适度一条语句 statement 的施行时长,可通过调用JDBC的java.sql.Statement.setQueryTimeout(int timeout) 进行竖立,不外一般是通过ORM框架来进行竖立 在 myBatis中,statement timeout 的默许值是通过 defaultStatementTimeout 属性进行竖立。同期还不错在 xml 中 select,insert,update标签竖立timeout属性,从而对不同 sql 语句建设超时常辰

Transaction Timeout

Spring 提供的 transaction timeout 建设也十分简便,它会记载每个事务的启动时辰和破钞时辰,当超出timeout值时将抛出异常。 假定某个事务中包含 3 个statement,每个statement的施行时辰是 100ms,其他业务逻辑的施行时辰是 50ms,那么transaction timeout至少应该竖立为350ms(100 * 3 + 50)

Socket timeout

JDBC的 socket timeout 在数据库被瞬息停掉或是发生收集额外时十分困难。由于TCP/IP的结构原因,socket莫得见地探伤到收集额外,因此哄骗也无法主动发现数据库联贯断开。若是没竖立 socket timeout 的话,哄骗在数据库复返后果前会无期限地等下去,这种联贯被称为 dead connection

优先级端正

Socket timeout 级别优于 Transaction Timeout,而Transaction Timeout 级别优于 Statement Timeout。也即是说若是 Statement Timeout 大于 Transaction Timeout 或者 Socket timeout,则无法奏效 不推选使用socket timeout来适度statement的施行时长,因此socket timeout的值必须要高于statement timeout,不然,socket timeout将会先奏效,这么statement timeout就变得毫无真谛

参考著作

久了分析JDBC超时机制 

首页-微先玉麻类有限公司

若何建设MySQL数据库超时竖立

 



  • 上一篇:没有了
  • 下一篇:没有了