社区
Java EE
帖子详情
挑战:EJB事务超时后,如何中断SQL执行?
xiongdigujunfeng
2012-05-23 04:49:58
有个查询SQL,运行时间非常久10分钟,EJB事务超时设置为300s,调用SQL的方法在10钟后会返回结果,但EJB却提示事务已经超时,这种情况下EJB的事务超时还有什么用呢?
我想要达到的目的是:如果SQL运行时间超过timeout时间,就自动中止SQL执行,方法直接返回
提高SQL查询效率之类的办法就不要说了,治标不治本
...全文
214
7
打赏
收藏
挑战:EJB事务超时后,如何中断SQL执行?
有个查询SQL,运行时间非常久10分钟,EJB事务超时设置为300s,调用SQL的方法在10钟后会返回结果,但EJB却提示事务已经超时,这种情况下EJB的事务超时还有什么用呢? 我想要达到的目的是:如果SQL运行时间超过timeout时间,就自动中止SQL执行,方法直接返回 提高SQL查询效率之类的办法就不要说了,治标不治本
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
loveofmylife
2012-05-24
打赏
举报
回复
其实我还想说的是,提高查询效率才是治本的方式,造成查询时间长的原因有很多,你应该想着去解决这个问题而不是去放弃这个问题,你kill掉这个sql的同时也有可能会造成数据的回滚等,如果不幸的话,同样会占用数据库大量的资源而导致你应用的阻塞
loveofmylife
2012-05-24
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
我是想能够由应用程序自动检测如果查询超时就自动kill掉自己的session,否则容易造成数据库压力
[/Quote]
可以啊
举个例子,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的进程或者线程就可以了
xiongdigujunfeng
2012-05-24
打赏
举报
回复
我是想能够由应用程序自动检测如果查询超时就自动kill掉自己的session,否则容易造成数据库压力
loveofmylife
2012-05-24
打赏
举报
回复
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
如果非得要终止,那么只能在os里kill掉这个sql的session了
xiongdigujunfeng
2012-05-24
打赏
举报
回复
不明白1楼的意思,请说的详细些
xiongdigujunfeng
2012-05-24
打赏
举报
回复
我也认同提高查询效率是治本方式,但对于查询时间超EJB的timeout的情况,界面实际上是取不到数据的,这种情况下SQL的执行结果已经无人接收,所以我觉得合理的方式应该马上返回异常,然后异步停止执行,这样就比较好了,不过看来EJB没有这种处理方式。
beowulf2005
2012-05-23
打赏
举报
回复
另起一个线程
EJB
连接Oracle数据库
EJB
连接Oracle数据库
EJB
连接Oracle数据库
EJB
连接Oracle数据库
EJB
连接Oracle数据库
ejb
数据源配置文件
ejb
数据源配置文件 包括my
sql
,
sql
server, oracle还有持久化配置文件,
EJB
开发必备。
EJB
3使用说明中文版
EJB
3.pdf
EJB
3.pdf
EJB
3.pdf
EJB
3.pdf
EJB
3.pdf
EJB
3.pdf
揭秘JDBC
超时
机制完整版
揭秘JDBC
超时
机制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项
weblogic10下配置
Sql
Server 数据源
NULL 博文链接:https://52347.iteye.com/blog/401561
Java EE
67,549
社区成员
225,863
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章