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

laravel - Laravel 悲观锁锁定整个表而不是单行

Laravel 版本:7.15

PHP版本:7.4.6

数据库驱动程序和版本:MariaDB 10.4.11

下面的代码将返回每个发票的数组响应。一旦调用了 action 方法,id=1它需要 20 秒才能被提交。当调用id=2响应的相同方法等到第一个事务完成时。为什么行级锁定不起作用。


它以前在 Laravel 6.x上工作

AlockForUpdate()锁定特定行,直到它成功提交 ( Select * from invoices where id=1 FOR UPDATE)。但select * from invoices where id=2 FOR UPDATE不应该等到第一个查询被提交。同样,如果没有指定锁 ( Select * from invoices),则不会绘制记录,它会等待提交第一个事务。锁定整个表而不是单行的可能原因是什么?

7.x中,当您锁定单行时,整个记录(表)都会被锁定!

0 投票
1 回答
1350 浏览

sql-server - 在 MSSQL 服务器中使用行锁进行更新

我试图了解 SQL Server 中的 ROWLOCK 以在锁定记录后更新记录。这是我的观察,并想确认 ROWLOCK 是否像表或页面锁之类的东西,或者我没有正确尝试。ROWLOCK 应该是对行的锁定,而不是对表或页面的锁定。

这是我尝试过的:

我创建了一个简单的表:row_lock_temp_test有两列IDName,没有 PK 或索引。现在我打开 SQL Server,两个不同的客户端但相同的凭据并尝试执行一组查询,如下所示:

客户 1:

客户 2:

我在 C-1 上执行了查询 1、2,然后转到 C-2 并执行相同的查询,两个客户端都执行了查询,然后我提交了事务,一切都很好。

然后我添加了 RowLock 来更新查询,

C-1

C-2

现在,我在 C-1 上执行了查询 1 和 2,然后转到 C-2 并尝试执行相同的 2 个查询,但是由于该行被 C-1 锁定,所以它应该在队列中,直到事务在 C-1 上提交。一旦我在 C-1 上提交了事务,对 C-2 的查询就被执行了,然后我也在 C-2 上提交了事务。都好。

在这里,我尝试了另一种场景来执行同一组查询,其中行 id = 3

C-2

我在 C-1 中执行了第一个两个查询,然后执行了 C-2 的第一个两个查询,两个客户端的行 ID 不同,但是 C-2 中的查询仍然卡住了。这意味着在使用 id = 2 更新查询时,它已锁定页面或表,我期待行锁定,但它似乎是页面或表锁定。

我还尝试使用 xlock、HOLDLOCK 和 UPDLOCK 和不同的组合,但它总是锁定表。有没有可能只锁定一行。

选择和插入按预期工作。

提前致谢。

0 投票
0 回答
673 浏览

c# - 在带有 linq 的 EF Core 中使用 postgresql "SELECT FOR UPDATE" - FromSqlRaw

我试图在 EF Core 中使用 postgresql 的 ROW LOCK。我有一个 .net 核心应用程序和 postgresql 数据库。

在 GetUserContainer 函数中,我使用 FromSqlRaw 构建查询,如下所示

其中 rowLock 是一个函数参数,其值可以是“FOR UPDATE”或“FOR SHARE”。

我使用下面的代码来读取 UserContainers 并更新

注意:上面代码中用到的函数片段如下

根据代码和行锁概念,我希望第二个任务中的 getusercontainer 要么失败,要么等到行锁被释放,因为它被第一个任务锁定。

我试图确保从应用程序端更新用户的 ACID 事务。Postgresql 文档 ( ROW LOCK ) 清楚地表明它在 SQL 中是可能的,但是我需要在 C# 中实现它。

我做错了什么/遗漏了重要的细节吗?或者欢迎任何通过新方法实现这一目标的建议。

0 投票
0 回答
32 浏览

mysql - 为什么对于 SQLCOM_UPDATE_MULTI,它用 lock_s (INNODB) 锁定其他表

innodb READ-COMMITTED:

桌子:

情况1:

案例2:

在 ha_innobase::store_lock 中,只处理了 SQLCOM_UPDATE。

为什么 SQLCOM_UPDATE_MULTI 不能是 LOCK_NONE ?,但是 SQLCOM_UPDATE 和 LOCK_NONE 。

0 投票
0 回答
42 浏览

java - MySQL 更新需要更多时间与并发用户命中

我有一个运行本机查询的 Spring Boot 应用程序。

在用户表中,

card_id 是主键,

user_id 是唯一键。

该表包含许多具有不同状态的卡(最多 4 个状态)我需要选择状态为“U”的行并将用户分配给该行。

看起来桌子在某个地方被锁住了。

我有大约 500 万条记录。当运行大约 40 个并发用户时,单个调用大约需要 40 秒。

谢谢。

0 投票
1 回答
57 浏览

mysql - MySQL 中的可序列化和基于行的锁定

我正在尝试将数据库从 MsSQL 转换为 MySQL。

对于 MsSQL 中存在的 Serializable 隔离级别,在 MySQL 中究竟应该如何进行事务配置?因为 MsSQL 关键字不起作用。

例子;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION;
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE 条件 GO
COMMIT TRANSACTION;

除了这个;在事务开始和提交之间对表的一行进行事务时,是否有基于行的锁定功能?

例子;

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE 条件

// 仅用于条件的基于行的锁定

如果默认禁用,我应该怎么做才能启用它?

谢谢你。

0 投票
1 回答
38 浏览

sql - Postgres 行锁定

我是 Postgres 的新手(甚至是 SQL)。我正在构建一个密钥数据库,它有一个名为 Key 的表。我的问题是如何在 pg.

如果一个连接正在读取第一条记录,同时第二条连接进来,它应该读取第二条记录而不是第一条。第 3 次第 4 次也是如此,以此类推。