小编For*_*est的帖子

为什么 NOLOCK 使带有变量赋值的扫描变慢?

在我目前的环境中,我正在与 NOLOCK 作斗争。我听到的一个论点是锁定的开销会减慢查询速度。所以,我设计了一个测试来看看这个开销可能有多少。

我发现 NOLOCK 实际上减慢了我的扫描速度。

起初我很高兴,但现在我很困惑。我的测试以某种方式无效吗?NOLOCK 实际上不应该允许稍微快一点的扫描吗?这里发生了什么事?

这是我的脚本:

USE TestDB
GO

--Create a five-million row table
DROP TABLE IF EXISTS dbo.JustAnotherTable
GO

CREATE TABLE dbo.JustAnotherTable (
ID INT IDENTITY PRIMARY KEY,
notID CHAR(5) NOT NULL )

INSERT dbo.JustAnotherTable
SELECT TOP 5000000 'datas'
FROM sys.all_objects a1
CROSS JOIN sys.all_objects a2
CROSS JOIN sys.all_objects a3

/********************************************/
-----Testing. Run each multiple times--------
/********************************************/
--How fast is a plain select? (I get about 587ms)
DECLARE @trash CHAR(5), @dt DATETIME = SYSDATETIME()

SELECT @trash …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016

14
推荐指数
1
解决办法
422
查看次数

为什么这个 RX-X 锁没有出现在扩展事件中?

问题

我有一对查询,在可序列化隔离下,会导致 RX-X 锁定。但是,当我使用扩展事件查看锁获取时,RX-X 锁获取从未出现,它只是释放。它从何而来?

再现

这是我的表:

CREATE TABLE dbo.LockTest (
ID int identity,
Junk char(4)
)

CREATE CLUSTERED INDEX CX_LockTest --not unique!
ON dbo.LockTest(ID)

--preload some rows
INSERT dbo.LockTest
VALUES ('data'),('data'),('data')
Run Code Online (Sandbox Code Playgroud)

这是我的问题批次:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRAN

INSERT dbo.LockTest
VALUES ('bleh')

SELECT *
FROM dbo.LockTest
WHERE ID = SCOPE_IDENTITY()

--ROLLBACK
Run Code Online (Sandbox Code Playgroud)

我检查了这个会话持有的锁,并看到了 RX-X:

SELECT resource_type, request_mode, request_status, resource_description
FROM sys.dm_tran_locks
WHERE request_session_id = 72 --change SPID!
Run Code Online (Sandbox Code Playgroud)

dm_tran_locks

但我在lock_acquired和上也有一个扩展事件lock_released。我在适当的 associated_object_id 上过滤它...没有 RX-X。

扩展事件输出

执行回滚后,我看到 RX-X (LAST_MODE) 被释放,即使它从未被获取。 …

sql-server locking sql-server-2017

13
推荐指数
1
解决办法
354
查看次数

STATISTICS IO 输出是否包括版本存储读取?

SQL Server 有一个选项SET STATISTICS IO ON可以显示查询的逻辑和物理页读取次数。这些统计信息是否包括 SNAPSHOT 和 RCSI 查询的版本存储读取?

sql-server tempdb-version-store

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