首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大事务的行锁争用问题

大事务的行锁争用问题
EN

Database Administration用户
提问于 2017-10-31 09:15:45
回答 1查看 1.2K关注 0票数 0

我遇到了这样的情况:我们使用SELECT FOR UPDATE从数据库获取对象的锁。这对于我们以有序的方式从多个表中插入和删除记录是必要的。该功能的工作方式如下所示。

登录->获取唯一锁对象上的锁,并将记录插入到多个表中,并释放锁-> Logout ->获取同一个唯一锁对象的锁,并从多个表中删除记录并释放锁。

我们启用了同步,以跟踪用户在登录之前登录的情况。它是在Java代码中处理的。但是,我们在数据库级别获得另一个锁,以确保在大量用户登录时数据库事务是同步的。

问题:整个系统在多集群服务器和单例服务器中工作得很好。然而,当并发用户数量达到4000+时,我们将面临数据库中的row lock contention (模式6)。而且很少有用户无法登录。

目的:修复锁定机制,使用户能够成功登录和注销。

到目前为止,已经尝试过了:将NOWAITSKIP LOCKED添加到SELECT FOR UPDATE查询中。这不能解决我的问题,因为第一个问题只是抛出一个错误,而第二个问题基本上跳过了锁,这会影响同步。

需要数据库专家的建议和意见来解决这个问题。蒂娅。

EN

回答 1

Database Administration用户

发布于 2017-11-02 08:52:43

这不能解决我的问题,因为第一个问题只是抛出一个错误

这是解决办法的一部分。您可以捕获错误/异常,然后向客户端显示适当的消息(“您已经登录”、“超过连接限制”等)。

这不是我们可以在数据库中解决的问题。

我也看到过类似的极端情况,事件enq: TX - allocate ITL entry阻塞了事务,这种情况可以在数据库中进行管理。

但我还没有看到enq: TX - row lock contention是一个数据库问题的案例。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/189737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档