挑战:EJB事务超时后,如何中断SQL执行? 有个查询SQL,运行时间非常久10分钟,EJB事务超时设置为300s,调用SQL的方法在10钟后会返回结果,但EJB却提示事务已经超时,这种情况下EJB的事务超时还有什么用呢?我想要达到的目的是:如果SQL运行时间超过timeout时间,就自动中止SQL执行,方法直接返回提高SQL查询效率之类的办法就不要说了,治标不治本 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)如果非得要终止,那么只能在os里kill掉这个sql的session了 我是想能够由应用程序自动检测如果查询超时就自动kill掉自己的session,否则容易造成数据库压力 可以啊举个例子,oracle 11g来说v$session中有两列,sql_id和prev_sql_id分别代表当前的sqlid以及上一个执行的sqlid对你当前的schema授权v_$session,v_$process,v_$sql然后通过v$sql找出sql_text like 你的当前sql的sqlid,通过sqlid去v$session中找到paddr,然后通过这个paddr去v$process中找到os的pid(字段为spid),然后在os中kill这个spid的进程或者线程就可以了 其实我还想说的是,提高查询效率才是治本的方式,造成查询时间长的原因有很多,你应该想着去解决这个问题而不是去放弃这个问题,你kill掉这个sql的同时也有可能会造成数据的回滚等,如果不幸的话,同样会占用数据库大量的资源而导致你应用的阻塞 我也认同提高查询效率是治本方式,但对于查询时间超EJB的timeout的情况,界面实际上是取不到数据的,这种情况下SQL的执行结果已经无人接收,所以我觉得合理的方式应该马上返回异常,然后异步停止执行,这样就比较好了,不过看来EJB没有这种处理方式。 快速查询数据 HttpServletRequest 的初始化 JDBC begin failed 关于hibernate 分~ 多重分派的问题!搞了很久被女朋友鄙视了!高手,帮我挽回尊严吧! 求助~~运行hibernate出现的问题 LOG4J中,关于同级别日志记录的不同输出 请问如何在DOS下访问文件夹jboss-3.2.3 ? 还是没能明白的问题 .java文件中怎样获取webcontent/web-inf/conf目录下的xml配置文件???? 求大虾解决
举个例子,oracle 11g来说
v$session中有两列,sql_id和prev_sql_id分别代表当前的sqlid以及上一个执行的sqlid
对你当前的schema授权v_$session,v_$process,v_$sql
然后通过v$sql找出sql_text like 你的当前sql的sqlid,通过sqlid去v$session中找到paddr,然后通过这个paddr去v$process中找到os的pid(字段为spid),然后在os中kill这个spid的进程或者线程就可以了