加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 事务(进程ID)在锁定时死锁与另一个进程通信缓冲资源并被

发布时间:2020-12-14 17:44:44 所属栏目:Java 来源:网络整理
导读:我有一个 java程序,用于更新MS SQL中的表. Web用户也可以通过在ColdFusion中创建的网站访问此表 最近我遇到这个错误的时候: sql_stmt.executeUpdate("update random_selection " + "set forecasted = 1 where " + " randnum = " + ora_rs.getString("RANDNU
我有一个 java程序,用于更新MS SQL中的表. Web用户也可以通过在ColdFusion中创建的网站访问此表

最近我遇到这个错误的时候:

sql_stmt.executeUpdate("update random_selection "
    + "set forecasted = 1 where "
    + " randnum = " + ora_rs.getString("RANDNUM")
    + " and quarter = " + quarter
    + " and ozip3 = " + ora_rs.getString("OZIP3"));

错误的CF查询是:

<cfquery name="submit_forecast" datasource="ttmsdropper" username="#request.db_username#" password="#request.db_password#">
    INSERT INTO forecast_entry
    VALUES (<cfqueryparam value="#currentRecord[8]#">)
</cfquery>

导致此错误的原因是什么?如何解决?

解决方法

当2个进程试图同时命中相同的数据时发生死锁 – 两者都对数据具有相同的声明.当正在进行大量更新/插入活动时(如您所述),这是最常见的.数据库系统“选择”其中一个交易成为“赢家”.

在某些情况下,可以通过索引来改进或减轻死锁,但仅在涉及选择时 – 一个好的索引策略可能会提高选择性能并使行锁定更有效.但是,如果死锁来自与更新竞争的插入,则索引将无济于事.事实上,积极的索引可能会降低情况,因为索引必须与数据插入或更新一起更新.

如何解决这在很大程度上取决于您的系统以及您要做的事情.您必须最小化插入/更新锁定或以某种方式提供更多或更快的资源.将插入物捆绑在一起并对它们进行批处理,更多处理或RAM(有时 – 并非总是如此),聚类,拆分表和数据,微调并行性 – 这些都是可行的选择.而且没有硬性规定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读