问题: 公司划款人员反映对某一个商户划款生效总是失败,而其他商户正常。我查看数据库日志后发现报如下错误:
java.sql.SQLException: 查询处理器用尽了内部资源,无法生成查询计划。这种情况很少出现,只有在查询极其复杂或引用了大量表或分区时才会出现。请简化查询。如果您认为该消息的出现纯属错误,请与客户支持服务部门联系,了解详细信息
分析解决:看到这个错误你会怎么做了?我试着重启数据库,重启jboss 服务器,都无法解决此问题。没办法只得去仔细读代码,这个问题肯定跟sql语句有关。根据日志分析,出问题的是一个事务中的其中一条sql 语句,这个语句很简单:
UPDATE table_name SET agenthkid=agenthkid WHERE id IN(orderids1.toString());
看起来应该不会有问题,但问题就出在这,你猜到是什么原因了吗?
当我把这条语句打印出来后,吓了一跳,因为 in 的条件里有 30000 多个id, 原来如此,这么长的语句,查询处理器怎么处理了?
我马上重新修改这条语句为:
UPDATE a SET a.agenthkid=agenthkid FROM table_name1 a,table_name2 b,table_name3 c WHERE ......... ;
也就是把以前的两条语句整合成一条,现在是关联三张表,同样是修改30000多条数据,但执行速度还相关的快,想不到吧。
如果此篇文章对你有帮助,请留下个脚印哦!^_^