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

大型事务的行锁争用问题
EN

Stack Overflow用户
提问于 2017-10-31 17:04:31
回答 1查看 179关注 0票数 0

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

Login ->获取唯一锁对象的锁并向多个表插入记录并释放锁->注销->获取同一唯一锁对象的锁并从多个表中删除记录并释放锁。

我们启用了同步,以便在用户注销之前跟踪已登录的用户。在Java代码中需要注意这一点。但是,我们在数据库级别获得了另一个锁,以确保当大量用户登录时数据库事务是同步的。

问题:整个系统在多集群服务器和单例服务器中都能完美地工作。但是,当并发用户数达到4000+时,我们将面对数据库中的row lock contention (模式6)。而且很少有用户不能登录。

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

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

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

更新:只需再添加一条信息。我们不会更新锁定的行,也不会对其执行任何操作。它只是用作同步我们执行的其他数据库任务的一种机制。

EN

回答 1

Stack Overflow用户

发布于 2017-10-31 17:14:35

不要依赖于悲观锁定(您当前的方法)-使用乐观锁定,可能使用一些ORM。

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

https://stackoverflow.com/questions/47031522

复制
相关文章

相似问题

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