java.sql.SQLException: 查询处理器用尽了内部资源,无法生成查询计划 错误分析解决

     问题: 公司划款人员反映对某一个商户划款生效总是失败,而其他商户正常。我查看数据库日志后发现报如下错误:

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多条数据,但执行速度还相关的快,想不到吧。

    如果此篇文章对你有帮助,请留下个脚印哦!^_^

根据提供的引用内容,当出现"java.sql.SQLException: IO 错误: The Network Adapter could not establish the connection"异常时,可能是由于网络适配器无法建立连接导致的。这个异常通常与数据库连接相关。 以下是一些可能的解决方法: 1. 检查数据库连接URL:确保数据库连接URL正确,并且包含正确的主机名、端口号和数据库名称。在提供的引用中,数据库连接URL是"jdbc:oracle:thin:@//192.168.10.105:1522/uportal"。 2. 检查网络连接:确保你的计算机可以访问数据库服务器。尝试使用ping命令检查是否可以与数据库服务器建立网络连接。 3. 检查数据库服务器状态:确保数据库服务器正在运行,并且可以接受来自你的计算机的连接请求。你可以尝试使用telnet命令连接到数据库服务器的端口,以验证是否可以建立连接。 4. 检查数据库驱动程序:确保你正在使用正确的数据库驱动程序,并且驱动程序的版本与你的数据库服务器兼容。你可以尝试更新或重新安装数据库驱动程序。 5. 检查数据库凭据:确保你使用的数据库凭据(用户名和密码)是正确的,并且具有足够的权限来连接到数据库服务器。 6. 检查防火墙设置:如果你的计算机上有防火墙,确保允许与数据库服务器的通信。你可以尝试禁用防火墙或配置防火墙以允许数据库连接。 请注意,以上解决方法是一般性的建议,具体的解决方法可能因你的环境和情况而异。如果问题仍然存在,请参考数据库和网络相关的文档或联系相关的技术支持人员以获取更多帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值