标签: locking

Postgres、MVCC 和锁定

我有一系列 SQL 语句,如下所示:

BEGIN;
SELECT counter FROM table WHERE id=X FOR UPDATE;
REALLY COMPLEX QUERY;
UPDATE table SET counter=Y WHERE id=X;
END;
Run Code Online (Sandbox Code Playgroud)

我想防止在重新计算计数器值时读取计数器,但根据 Postgres 文档“行级锁不影响数据查询;它们只阻止写入者到同一行。”

问题:

  1. 如果不阻止读取,“排他”行锁有什么意义?难道只是为了防止其他事务获取共享锁?
  2. 如果我使用 SELECT ... FOR SHARE 读取该行,是否达到与“排他”锁相同的效果?
  3. 是否可以关闭表/模式/数据库的 MVCC 并允许就地写入?

postgresql locking

9
推荐指数
1
解决办法
2577
查看次数

SQL Server - 非阻塞选择语句的隔离级别是什么?

我有一个长时间运行的事务(称为 T1),它对 SQL Server 2008 R2 中的表执行一些删除、更新和插入操作。同时,另一个进程会定期从该表中运行 select 语句。

在默认隔离设置下(我认为是 READ COMMITTED?),T1 会阻止任何 select 语句运行,直到事务提交或回滚。

我希望看到的是,即使在事务正在进行时,select 语句也能对一致的数据起作用。我相信 SNAPSHOT 隔离可以提供帮助,但不确定我是否朝着正确的方向前进。这是该应用程序的最佳隔离级别吗?

其次,我无法控制调用 select 语句的进程,但我可以控制调用 T1 的 .NET 应用程序。select 语句和 T1 都需要更改任何隔离级别,还是仅将 T1 标记为具有不同的隔离级别就足够了?

sql-server transaction locking isolation-level

9
推荐指数
2
解决办法
6720
查看次数

了解 SQL Server 锁定和并发性的资源?

正如最近一个关于矿井锁定和并发性的问题所证明的那样,很难。

您能否为中级到高级 SQL 专业人员推荐任何好的资源,以对这些资源进行彻底的研究,如果正确学习,可以更好地导航该领域的所有固有缺陷?

我正在考虑各种资源——教程、博客、手册页、PASS 会话或任何东西。

sql-server concurrency locking

9
推荐指数
3
解决办法
753
查看次数

在已提交读快照隔离 (RCSI) 下获取的共享锁

LCK_M_S在使用 RCSI时看到等待共享锁 ( )。我的理解是这不应该发生,因为SELECTs在使用 RCSI 时不需要共享锁。

我怎样才能看到共享锁?是因为外键吗?

sql-server-2008 sql-server locking snapshot-isolation

9
推荐指数
1
解决办法
1170
查看次数

sp_configure 阻塞进程阈值更改对性能的影响

我的任务是识别生产服务器上发生的任何阻塞。我实现这一目标的计划是使用

EXECUTE sp_configure 'blocked process threshold', 5
Run Code Online (Sandbox Code Playgroud)

结合服务器端跟踪来收集阻塞进程报告。

我知道这项活动会影响性能,我想找到某种方法来量化这将是什么。

performance sql-server locking

9
推荐指数
1
解决办法
2315
查看次数

是否有关于缓冲池实例的大小和数量的经验法则?

我知道共识似乎是大约 75% 的 ram 应该专用于缓冲池。但是,我对缓冲池实例的最佳数量更感兴趣。确定设置时需要考虑哪些事项?

例如,假设我有一个 75GB 的缓冲池。我应该只分配 75 个 1GB 的缓冲池实例吗?15 个,每个 5GB?或者,每个 7.5GB 的 10 个?

我应该从单个缓冲池开始并根据我是否看到锁定来增加吗?

最大实例数应该基于什么 - 可用内核?

谢谢 - 非常感谢您的回复。

mysql innodb mysql-5.5 locking

9
推荐指数
1
解决办法
3730
查看次数

当无法立即锁定所选行时,PostgreSQL`FOR UPDATE NOWAIT` 究竟返回了什么错误?

所述的PostgreSQL 9.4文档指出添加NOWAIT选项将SELECT FOR UPDATE当行不能被锁定时产生一个错误的装置:

要防止操作等待其他事务提交,请使用 NOWAIT 选项。使用 NOWAIT,如果无法立即锁定所选行,该语句将报告错误,而不是等待。

那究竟是什么错误?

由于这是一个可接受的条件,我希望我的 Java 代码检查此类预期错误,然后解决它。

postgresql select locking

9
推荐指数
1
解决办法
6790
查看次数

使用 PAGELATCH_* 等待类型等待的阻塞会话?

编辑:为什么会话报告被阻止但等待PAGELATCH_*,而不是LCK_M_相关的等待类型?

我之前假设 SQL Server 只会在 blocks_session_Id 列中报告阻塞会话。如果被阻塞的会话正在等待逻辑锁而不是其他任何东西,例如PAGELATCH_*.

在此处输入图片说明

sql-server optimization locking wait-types sql-server-2014

9
推荐指数
1
解决办法
732
查看次数

MySQL:可以安全地杀死卡在“等待表元数据锁定”中的事务

早上/下午/晚上好。

我试图在有几百万行的表中添加一列。这是完整的查询:

alter table date_tasks_mark add column noDuplicate int unsigned not null default 0
Run Code Online (Sandbox Code Playgroud)

不过好像卡住了。

| 28893 | root         | localhost | database_name   | Query   | 10668 | Waiting for table metadata lock | alter table date_tasks_marks add column noDuplicate int unsigned not null default 0
Run Code Online (Sandbox Code Playgroud)

终止查询对我来说安全还是会破坏我的表(它已经处于这种状态大约半小时)?

mysql innodb deadlock locking mysql-5.6

9
推荐指数
1
解决办法
2万
查看次数

没有 WHERE 子句的 UPDATE 是否会锁定 PostgreSQL 中的表?

整个表UPDATE(不指定WHERE子句)是否锁定了 PostgreSQL 中的一个表?例如,它会阻止行被删除/插入吗?

例如,如果我运行,我 UPDATE t1 SET key = 'value' 可以期望t1UPDATE执行过程中不会插入新行吗?

如果不是,我UPDATE是否可以期望即使在开始后出现的行也会更新?(键DEFAULT 'value'在其定义中没有)

postgresql locking

9
推荐指数
1
解决办法
1320
查看次数