问题标签 [rowlocking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1090 浏览

sql-server - 确保来自 sql server 数据库的唯一编号

我有一个使用事件编号(以及其他类型的编号)的应用程序。这些数字存储在名为“Number_Setup”的表中,其中包含计数器的当前值。

当应用程序生成一个新事件时,它会在 number_setup 表中获取所需的数字计数器行(计数器可以每天、每周等重置并存储为 int)。然后它递增计数器并使用新值更新行。

该应用程序是多用户的(任何时候大约有 100 个用户,以及运行并获取 100 条事件记录并为每个请求事件编号的 sql 作业)。事件表有一些重复的事件编号,它们不应重复。

存储过程用于检索下一个计数器。

我现在已经用事务包围了那个块,但我不完全确定它会 100% 解决问题,因为我认为仍然存在共享锁,所以无论如何都可以读取计数器。

也许我可以在更新语句中检查计数器是否已更新

我确信这是财务应用程序等中发票号码的常见问题。
我也无法将逻辑放入代码中并在该级别使用锁定。我也锁定在 HOLDLOCK 但我不确定它的应用程序。它应该放在两个 SELECT 语句上吗?

如何确保不创建重复项?

0 投票
3 回答
2598 浏览

sql - MySQL InnoDB 仅锁定受影响的行?

我有一个包含用户的 InnoDB 表,如下所示:

在每次插入时,我都会将 user_id 增加 1,例如,Bob 的下一个 user_id 将是 4

我使用这个查询来做到这一点:

现在我需要确保两个不同的用户不会同时添加“Bob”。我不想要任何两个 user_id 为 4 的 Bob。 Bob 的每个用户 id 都必须不同。

运行上述插入查询时,是否可以写入和更新锁定 Bob 的所有行?我无法锁定整个表,因为许多其他用户仍然需要完全访问他们的行。此外,所有行都应始终可读。我该怎么做?

0 投票
2 回答
1153 浏览

sql - 关于 SQL Server 锁定机制

我想问几个关于 SQL Server 锁定机制的问题

  1. 如果我没有在 SQL 语句中使用锁定提示,SQL Server 默认使用 PAGELOCK 提示。我对吗???如果是,那为什么?可能是由于管理太多锁的因素,这是我唯一认为的缺点,但如果还有其他问题,请告诉我。并告诉我是否可以更改此默认行为,如果它是合理的。

  2. 我正在编写一个服务器端应用程序,一个同步服务器(不使用同步框架),我已经在 C# 代码文件中编写了数据库查询并使用 ODBC 连接来执行它们。现在的问题是将默认锁定从 Page 更改为 Row 的最佳方法是牢记缺点(例如,在查询中添加锁定提示,这是我的计划)。

  3. 如果在没有事务范围的情况下执行 sql 查询(SELECT/DML)并且语句包含锁提示,那么将获取什么样的锁(例如共享、更新、独占)?并且在事务范围内,如果正在使用 ROWLOCK 提示,事务的隔离级别是否会影响锁定类型。

  4. 最后,如果有人能给我样本,我可以自己测试和体验上述所有场景(例如点网代码或 sql 脚本)

谢谢穆巴沙尔

0 投票
2 回答
590 浏览

sql-server - 应该对 SQL Server 的锁定体系结构进行哪些更改以使其对开发人员更加友好?

我最近遇到了一个相当令人沮丧的情况,当select * from table with (rowlock updlock) where key=value针对它执行这样的语句时,SQL 服务器拒绝只针对主键发出锁。现在不要误会我的意思,它确实锁定了行,但它更进一步并锁定了表。

我已经阅读了有关 SQL 锁升级的信息,并且我已经研究过在锁提示中使用特定索引,但是你看,当一个表中有数以百万计的记录和并发更新需要大量索引时,这是不切实际的发生在那些记录上。对于一个小表和一个特定的查询,可以获得所需的行为,但是当表的宽度很大(很多列)并且有很多进程使用数据时,这种方法就会失效,并可能成为真正的争论点。

我希望看到添加的是一个的锁定提示,因为PKLock(代表主键锁定)会针对行的主键发出锁定,并且任何时候使用索引、表扫描或其他方法来获取该行,它将检查此锁并兑现它,而不是锁定整个表。

因此不需要发出这样的表锁,这将大大增加针对数据库并行执行代码的能力。

请权衡这个想法并指出它可能存在的任何缺陷,可以改进的方法或应该添加的其他元素以解决我的困境。

编辑

@Remus

如果我执行这个查询

然后这个查询:

在提交事务之前,在两个示例中都返回 A 行。这是更新后面的读数,而不是阻塞。

一个成功的解决方案应该在不指定要使用的索引的情况下执行以下操作:

  1. 使用查询 1:读取并锁定 A,更新 A
  2. 使用查询 2:读取并锁定 B,更新 B,提交查询 2
  3. 使用查询 2:读取 B 并被阻止,直到 A 上的锁被释放
  4. 使用查询 1:提交查询 1
  5. 使用查询 2:读取并锁定 A,更新 A,提交查询 2
0 投票
1 回答
1417 浏览

oracle - oracle 行锁的排队时间长

当我在 oracle 9 DB 中运行下面的 Sql 命令时,我一直遇到“enq:TX - 行锁争用”。表 mytable 是一个小表,不到 300 行。

我同时运行 10 个线程,有些线程等待长达 10 秒才有机会更新。我知道我会面临这个死锁问题,但对我来说问题是它们应该能够更快,因为表很小,所以更新它会很快。

编辑:我无法更改此代码,它位于第三方应用程序中。我只能调整数据库。

我可以做些什么来提高行锁队列的速度?我怎样才能改善这个等待时间,让我的线程运行得更快?

0 投票
1 回答
1828 浏览

sql - 我可以使用 ROWLOCK、UPDLOCK 锁定来自连接 SQL 语句的记录吗?

我有一个存储过程来获取我想要的数据:

将这些记录放入光标后,我曾经ROWLOCK, UPDLOCK锁定所有相关的发票编号。

我可以INVH在存储过程中使用 join 命令从几个表中选择表时锁定表吗?

任何建议,请!

0 投票
3 回答
115960 浏览

sql-server - 是否可以在 SQL Server 中强制行级锁定?

我可以看到如何在 SQL Server 中关闭行级和页级锁定,但我找不到强制 SQL Server 使用行级锁定的方法。有没有办法强制 SQL Server 使用行级锁定而不使用页级锁定?

0 投票
2 回答
448 浏览

ruby - Ruby MongoDB 驱动程序中的“原子部分”?

有没有办法在 MongoDB 服务器(使用 Ruby 驱动程序)上执行一组非原子操作作为单个原子操作?我需要的基本上是锁定某些对象/集合。

0 投票
1 回答
12119 浏览

sql-server - 如果不存在 INSERT 事务,则通过 SELECT 的 SQL Server ROWLOCK

我已经从 SQL Server 2005 升级到 2008。我记得在 2005 年,ROWLOCK 根本不起作用,我不得不使用 PAGELOCK 或 XLOCK 来实现任何类型的实际锁定。我知道读者会问“你做错了什么?” 没有。我最终证明我可以编辑“ROWLOCKED”行,但如果我升级锁定级别则不能。我还没有机会看到这是否适用于 SQL 2008。我的第一个问题是有人在 2008 年遇到过这个问题吗?

我的第二个问题如下。我想测试一个值是否存在,如果存在,对相关列执行更新,而不是插入整行。这意味着如果找到该行,则需要将其锁定,因为维护过程可能会在中间过程中删除该行,从而导致错误。

为了说明原理,下面的代码会起作用吗?

0 投票
0 回答
866 浏览

nhibernate - 如何在 NHibernate 中使用 rowlock 和 readpast?

我有一个应用程序,它当前使用以下存储过程从表中读取数据:

如您所见,存储过程使用 ROWLOCK 和 READPAST 以便仅由一个连接安全地读取许多行(由 @BatchSize 控制)。读取后,行将被删除。

谁能指出我如何使用 NHibernate 完成同样的任务?