一、好言
目前这个年龄真的很尴尬 不够成熟也不够幼稚 没有能力却有野心
二、背景
昨天上线,但是在准生产上,出现了问题,这个问题在测试环境出现过,但是我把数据库四千多万的数据清理了,然后就成功了,但是现在在预发布环境又出现了这个问题,不得不去找到确定的原因,每次执行sql都是被中断。所以这个问题也让我记住,测试环境的大量数据也是对性能很好的测试。有问题就要定位。因为当时查询到的是查询超时造成的,因此就是因为数据量多,所以我就删除了测试数据,但是生产能删除吗?NO!!!下面看问题和解决。
三:问题
ERROR [8080-test] 2017-05-17 17:59:55.580 [taskExecutor-
9]org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptio
nHandler - Unexpected error occurred
invoking async method 'public void
com.mouse.moon.service.TestRegisterService.test(com.mouse.moon.
model.po.Person)'.
org.springframework.jdbc.UncategorizedSQLException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLQueryInterruptedException:
Query execution was interrupted
### The error may exist in URL [jar:file:/mouse/tools//8080-
test/lib/mouse-SNAPSHOT-1705171633.jar!/mapper/person.xml]
### The error may involve com.mouse.moon.mapper.PersonDAO.selectPersonIfo-Inline
### The error occurred while setting parameters
### SQL: select id, column1, column2, column3, column4, column5,
create_time,update_time from
table_name t1 WHERE t1.column2=? and t2.column3=? and t3.column4=?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLQueryInterruptedException:
Query execution was
interrupted
; uncategorized SQLException for SQL []; SQL state [70100]; error
code [1317]; Query execution
wasinterrupted; nested exception is
com.mysql.jdbc.exceptions.jdbc4.MySQLQueryInterruptedException:
Query
execution was interrupted
搜了下错误码,给出如下结果
错误:1317 SQLSTATE: 70100 (ER_QUERY_INTERRUPTED)
消息:查询执行被中断。
在代码执行时候,捕捉进程结果
select * from information_schema.processlist where info is not null
limit 0,100;
在进行查询的时候我们可以看到这个select执行的时间太久,数据库连接的时候Mybatis会有个超时时间。所以每次都是执行中断。
并且在测试的时候用原来的数据就可以成功,新增的两条数据不行,这是因为我取出条件表的所有数据,如果用原来数据测试,第一次循环就匹配上了,就不用下面的条件继续查询。所以造成新的数据,第一次条件查询没查询到,那么就使用第二个组合条件查询,由于数据量大,而且组合条件没有建立索引,引起这个问题,花了半个小时找问题,最好还要dba帮忙看是不是由于数据库mysql设置的时间问题,当时我说能否看慢查询,对于这种查询中断的是没有记录在慢查询的日志中,只有完整的执行后才会记录在慢查询的日志中。