问题标签 [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 投票
2 回答
19796 浏览

sql-server - 我需要行级锁定

这是对是否可以在 SQL Server 中强制行级锁定的扩展. 这是用例

我有一个包含帐号、余额等的帐户表。该表被许多应用程序使用。很有可能,当我修改一个帐户时,其他人正在修改另一个帐户。所以预期的行为是我将锁定我的帐户(ROW),而其他用途将锁定他的(另一个 ROW)。

但是 SQL Server 2008 R2 将此锁定升级到页面/表,并且第二个用户得到超时异常。我已经尝试了引用问题中提到的所有解决方案,但没有任何效果。

如何强制 SQL Server 仅锁定行级锁,或者如何修改此模型以使其与页/表锁定一起使用?

编辑 该更新通过其 PK 以单个记录为目标,并且已编入索引,因此只有 ONE ROW 被更新/锁定,并且该过程不超过一分钟

编辑 现在看起来有些奇怪的事情正在发生。我正在为 DAL 使用一个 ORM 库,它打开了多个连接,我已经向他们的支持提出了这个问题。但是,出于测试目的,我在查询工具上打开了两个会话并做了以下操作

Session # 2 中的查询超时!!!对其他值的查询COL_1工作正常。现在,如果同一记录在另一个会话中处于编辑模式,则看起来 SELECT 被阻止了一个会话。

尽管 Oracle 确实支持在其他会话修改行时选择行(使用默认参数/无关键字),但 SQL Server 不支持(使用默认参数/无关键字),因此问题似乎出在库上。

0 投票
2 回答
1046 浏览

c# - 悲观锁定记录?

我正在为 Silverlight 应用程序创建一个 WCF Web 服务,并且我需要有一条记录在修改时被读/写锁定。

我正在使用 MySQL 5.5.11 版。

更具体地说,我想防止请求在修改时从 Row 读取数据。

UPDATE 和 SELECT 的两个 SQL 命令实际上非常简单,例如:

更新(应该锁定写/读):

选择(从上面的查询锁定时应该无法读取):

这是我尝试过的,但它似乎根本不起作用或锁定任何东西:

0 投票
3 回答
3070 浏览

sql - 您可以在 Access 中进行行锁定吗?

您可以在 Access/JET 中进行行锁定吗?

例如,您可以在 JET SQL 中执行以下操作:

0 投票
0 回答
96 浏览

ms-access - 如果您尝试更新 JET 中的锁定记录,会发生什么情况?

如果我使用 JET/DAO 在使用锁定的 MDB 数据库上打开记录集dbPessimistic,如果另一个用户当时尝试更新该记录集中的行会发生什么情况?会出现错误,还是 JET/DAO 会一直尝试直到解锁行?

0 投票
1 回答
1212 浏览

.net - 由索引上的页面锁定导致的 sql server compact 死锁

我正在使用 NHibernate作为数据访问层和SQL Server compact开发 ac# 桌面应用程序。该应用程序使用多个线程来执行数据的选择和更新。

一般来说,它工作正常,但有时会出现死锁情况。

15:28:16,750 55 WARN:System.Data.SqlServerCe.SqlCeLockTimeoutException (0x80004005):超时..... [会话 id = 28,线程 id = 14576,进程 id = 12960,表名 = PatientOrder,冲突类型 = x锁定(x 块),资源 = PAG(idx):1035]

如果两个事务尝试更新相同的行,我可以理解死锁问题。但是在这种情况下,两个事务都在不同的行上工作。死锁似乎是由索引 ( )上的页面锁定引起的。Resource = PAG (idx): 1035

所以我的问题是:可以做些什么来防止这些死锁?

我已经研究了以下选项:

  • 禁用索引的页面锁定。这对于“完整”SQL 服务器是可能的,但精简版似乎不支持

  • 配置休眠以生成with(rowlock)sql 语句,这将(希望)防止问题

  • 尝试使用session.lock(...)以对所有事务执行相同顺序的资源访问。然而,这似乎没有帮助,因为死锁事务无论如何都在不同的行上工作

  • 序列化所有数据库事务,以便一次只有一个处于活动状态。这确实有效,但会对性能产生重大影响。

0 投票
2 回答
14424 浏览

sql-server - sql server 提示 NOLOCK 和 ROWLOCK

我目前正在我的网站上调查一个烦人的问题。我们会定期在网站上发放奖品,但要参加比赛,人们必须登录。所以网站有时会变得很忙。我发现当很多人尝试登录和注册时,我会收到很多关于UpdateUser、CheckPassword 和 GetUser函数死锁的错误,然后服务器变得太忙,其他请求开始超时。

当我查看存储过程时,我发现“UpdateUser”上使用了 ROWLOCK。那些 ROWLOCK 会导致死锁吗?还是只有选择会导致死锁?

我正在考虑针对我的情况使用 NOLOCK,但经过一番研究,显然不建议这样做......

0 投票
1 回答
1819 浏览

sql-server-2008 - 在哪里使用 ROWLOCK、READPAST 和 CTE、子查询和更新?

为了避免死锁和同步来自多个服务的请求,我使用 ROWLOCK、READPAST。我的问题是我应该将它放在包含 CTE、子查询和 CTE 上的更新语句的查询中的哪个位置?是有一个关键点还是应该三个地方都有(下)?或者也许有更好的方法来编写这样的查询,这样我就可以只选择将要更新的行。

0 投票
1 回答
110 浏览

mysql - InnoDB 中的行锁定需要快速解释

我有一个带有 2 个客户端的客户端-服务器应用程序:

当超过 1 个客户端正在读取数据库时,我需要提高数据库的读取效率,而所有客户端都不会获得相同的行。我对表使用 InnoDB 引擎,我做类似的查询SELECT...FOR UPDATE,但我不使用SHARED MODE

我需要解释该过程在以下情况下的行为方式:

  1. 我在表中有 30 行。每个客户端都有一个到数据库的连接对象
  2. 客户端 A 获得 15 行SELECT ...FOR UPDATE。这些行应该被锁定。
  3. 客户端 B 必须分别获取其他 15 行未被客户端 A 锁定的行SELECT ..FOR UPDATE

当我测试这个场景时,我让客户端 B 也获得了客户端 A 的 15 行。为什么会这样?我设置setAutoCommit(false)并且从不做COMMITROLLBACK查询,因此连接永远不会提交,并且(例如客户端 A 所做的)已设置的锁永远不会被释放。

有人可以指出我正确的方向吗?我做错了什么?

0 投票
2 回答
1196 浏览

php - 同一 PHP 脚本的多个实例使用行锁定处理不同的 MySQL 行

我想要做的是每隔几分钟使用 cron 执行相同的脚本。

该脚本需要处理从数据库读取的一些数据,所以显然我需要它每次都在不同的行上工作。

我的概念是使用行锁定来确保每个实例在不同的行上工作,但它似乎不是那样工作的。甚至可以以这种方式使用行锁吗?还有其他溶液吗?

例子:

基本上我需要的是 SCRIPT1 从表中读取 R1;SCRIPT2 读取 R2(下一个非锁定行匹配条件)

编辑:例如:1)表存储 URL 列表 2)脚本检查 URL 是否响应,并在数据库中更新它的状态(和时间戳)

0 投票
2 回答
87 浏览

transactions - 如何以原子方式更新带有时间戳的行?

我有一个分布式应用程序,它使用数据库来同步客户端。客户端将尝试更新记录,但只有在过去 1 小时内没有其他客户端更新时才会这样做。


这是缩小的代码和困境:

假设一个客户试图将一个字段更新为“红色”(检查过去一小时内没有其他人更新它):

同时,另一个客户端尝试将其更新为“绿色”(检查过去一小时内没有其他人更新它):

我可以假设只有一个客户端会成功更新该行吗?


这就是为什么我认为答案是“不”的原因:

由于 Oracle 必须在获取行级更新锁sysdate 之前解决(因为它必须首先使用它来查找行),所以似乎存在竞争条件:

  1. 客户端“红色”计算sysdate
  2. 客户“Green”计算sysdate
  3. 1小时通行证
  4. 客户端“红色”更新TimeOfLastUpdate为旧sysdate
  5. 客户端“绿色”更新TimeOfLastUpdatesysdate(因此更新两次)

我将其确定为比赛条件是否正确?如果没有,我错过了什么?

如果是这样,是否有有效、更可靠的解决方案来解决这个问题?