本文转载自微信公众号「潜行前行」,作家cscw 。转载本文请干系潜行前行众号。
魅力 问题发现 在七月份时,平凡发现存几个定时任务报错,检验了下异常原因,粗略定位是数据库推论异常。### 欧宝体育app·官方入口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 29565872 上网搜索了下 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 = 55 因此决定土产货调试一波。发现 @Options 还竟然没收效,jdbc的 queryTimeout 取值的是 mybatis在yml的 全局成立
背面也试着将 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
www.imperialsportspro.com新葡京官网 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数据库超时开辟