问题标签 [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.
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 不支持(使用默认参数/无关键字),因此问题似乎出在库上。
c# - 悲观锁定记录?
我正在为 Silverlight 应用程序创建一个 WCF Web 服务,并且我需要有一条记录在修改时被读/写锁定。
我正在使用 MySQL 5.5.11 版。
更具体地说,我想防止请求在修改时从 Row 读取数据。
UPDATE 和 SELECT 的两个 SQL 命令实际上非常简单,例如:
更新(应该锁定写/读):
选择(从上面的查询锁定时应该无法读取):
这是我尝试过的,但它似乎根本不起作用或锁定任何东西:
sql - 您可以在 Access 中进行行锁定吗?
您可以在 Access/JET 中进行行锁定吗?
例如,您可以在 JET SQL 中执行以下操作:
ms-access - 如果您尝试更新 JET 中的锁定记录,会发生什么情况?
如果我使用 JET/DAO 在使用锁定的 MDB 数据库上打开记录集dbPessimistic
,如果另一个用户当时尝试更新该记录集中的行会发生什么情况?会出现错误,还是 JET/DAO 会一直尝试直到解锁行?
.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(...)
以对所有事务执行相同顺序的资源访问。然而,这似乎没有帮助,因为死锁事务无论如何都在不同的行上工作序列化所有数据库事务,以便一次只有一个处于活动状态。这确实有效,但会对性能产生重大影响。
sql-server - sql server 提示 NOLOCK 和 ROWLOCK
我目前正在我的网站上调查一个烦人的问题。我们会定期在网站上发放奖品,但要参加比赛,人们必须登录。所以网站有时会变得很忙。我发现当很多人尝试登录和注册时,我会收到很多关于UpdateUser、CheckPassword 和 GetUser函数死锁的错误,然后服务器变得太忙,其他请求开始超时。
当我查看存储过程时,我发现“UpdateUser”上使用了 ROWLOCK。那些 ROWLOCK 会导致死锁吗?还是只有选择会导致死锁?
我正在考虑针对我的情况使用 NOLOCK,但经过一番研究,显然不建议这样做......
sql-server-2008 - 在哪里使用 ROWLOCK、READPAST 和 CTE、子查询和更新?
为了避免死锁和同步来自多个服务的请求,我使用 ROWLOCK、READPAST。我的问题是我应该将它放在包含 CTE、子查询和 CTE 上的更新语句的查询中的哪个位置?是有一个关键点还是应该三个地方都有(下)?或者也许有更好的方法来编写这样的查询,这样我就可以只选择将要更新的行。
mysql - InnoDB 中的行锁定需要快速解释
我有一个带有 2 个客户端的客户端-服务器应用程序:
当超过 1 个客户端正在读取数据库时,我需要提高数据库的读取效率,而所有客户端都不会获得相同的行。我对表使用 InnoDB 引擎,我做类似的查询SELECT...FOR UPDATE
,但我不使用SHARED MODE
我需要解释该过程在以下情况下的行为方式:
- 我在表中有 30 行。每个客户端都有一个到数据库的连接对象
- 客户端 A 获得 15 行
SELECT ...FOR UPDATE
。这些行应该被锁定。 - 客户端 B 必须分别获取其他 15 行未被客户端 A 锁定的行
SELECT ..FOR UPDATE
。
当我测试这个场景时,我让客户端 B 也获得了客户端 A 的 15 行。为什么会这样?我设置setAutoCommit(false)
并且从不做COMMIT
或ROLLBACK
查询,因此连接永远不会提交,并且(例如客户端 A 所做的)已设置的锁永远不会被释放。
有人可以指出我正确的方向吗?我做错了什么?
php - 同一 PHP 脚本的多个实例使用行锁定处理不同的 MySQL 行
我想要做的是每隔几分钟使用 cron 执行相同的脚本。
该脚本需要处理从数据库读取的一些数据,所以显然我需要它每次都在不同的行上工作。
我的概念是使用行锁定来确保每个实例在不同的行上工作,但它似乎不是那样工作的。甚至可以以这种方式使用行锁吗?还有其他溶液吗?
例子:
基本上我需要的是 SCRIPT1 从表中读取 R1;SCRIPT2 读取 R2(下一个非锁定行匹配条件)
编辑:例如:1)表存储 URL 列表 2)脚本检查 URL 是否响应,并在数据库中更新它的状态(和时间戳)
transactions - 如何以原子方式更新带有时间戳的行?
我有一个分布式应用程序,它使用数据库来同步客户端。客户端将尝试更新记录,但只有在过去 1 小时内没有其他客户端更新时才会这样做。
这是缩小的代码和困境:
假设一个客户试图将一个字段更新为“红色”(检查过去一小时内没有其他人更新它):
同时,另一个客户端尝试将其更新为“绿色”(检查过去一小时内没有其他人更新它):
我可以假设只有一个客户端会成功更新该行吗?
这就是为什么我认为答案是“不”的原因:
由于 Oracle 必须在获取行级更新锁sysdate
之前解决(因为它必须首先使用它来查找行),所以似乎存在竞争条件:
- 客户端“红色”计算
sysdate
- 客户“Green”计算
sysdate
- 1小时通行证
- 客户端“红色”更新
TimeOfLastUpdate
为旧sysdate
- 客户端“绿色”更新
TimeOfLastUpdate
旧sysdate
(因此更新两次)
我将其确定为比赛条件是否正确?如果没有,我错过了什么?
如果是这样,是否有有效、更可靠的解决方案来解决这个问题?