一个不多见的SQL挂起问题

来源:这里教程网 时间:2026-03-03 12:53:18 作者:

    开发人员说前台用户反映操作变慢,要求看一看数据库,一查,没有活动会话在执行SQL,没有锁或阻塞现象,但是,有一台应用服务器的连接比初始化增加了一倍,另外,SQL monitor显示一个SQL处于executing状态,但执行时间(ela_time)却只有21秒,而SQL开始时间已经超过半小时了;     从SQL monitor报告看,sql的持续时间在增加,但执行时间却不变,SQL很简单,是一个导出语句,但没有加条件,所以最终将查询364万数据,速度并不慢;     这种现象还真是不常见,一般的要么是SQL慢一直在执行,要么就是有阻塞,这个看起来,DB没问题,但会话在增加,前台慢的情况确实存在;     结合现象,个人认为,源头是因为导出大量的数据,而实际上oracle是分页fetch的,即执行第一次取记录给到应用服务器之后,可能是数据太大,应用服务器端出了异常,结果代码跑不下去了(异常处理不到位),这样就把这个SQL晾在这里了,既不执行,也不终止,而前端用户发现没有发映,又继续发起请求,但这些请求在连接了数据库之后(增加了会话连接),但又因为有前面的任务没有完成,又处于应用层排队等待的状态(DB层状态空闲);     所以,真正的问题是应用的代码端,对导出的设计及异常处理考虑不周,让他们去检查代码,确实发现了BUG。

相关推荐