Hen*_*Lee 5 sql-server-2008 sql-server blocking
我的理解是在线索引在开始(准备)和结束(最终)阶段获取锁。但是,我们看到很多 DML 查询在构建阶段被阻塞。
被阻止的查询的样本显示它们有一些共同点 - 等待类型是 PAGELATCH_UP,等待资源引用 PFS 页面,并且查询使用锁定提示(NOLOCK、ROWLOCK 等)。锁定提示会干扰吗?
任何人都可以在这里阐明或指出我正确的方向吗?
让我补充一下,实际命令是:
ALTER TABLE dbo.Whatever DROP CONSTRAINT [PK_Whatever] WITH (ONLINE=ON);
Run Code Online (Sandbox Code Playgroud)
这是聚集索引,没有非聚集索引。
不管官方文档如何说,删除聚集索引ALTER TABLE DROP CONSTRAINT可以在线执行(在 SQL Server 2005-2014 上测试):
USE Sandpit;
ALTER DATABASE Sandpit
SET RECOVERY SIMPLE;
CREATE TABLE dbo.Test
(
col1 integer NOT NULL,
CONSTRAINT PK PRIMARY KEY CLUSTERED (col1)
);
INSERT dbo.Test
VALUES (1);
CHECKPOINT;
BEGIN TRANSACTION;
ALTER TABLE dbo.Test
DROP CONSTRAINT PK WITH (ONLINE = ON);
SELECT
[Current LSN],
[Operation],
[Transaction Name],
[Xact ID],
[Description]
FROM sys.fn_dblog(NULL,NULL) AS FD
WHERE
FD.[Transaction Name] IS NOT NULL;
ROLLBACK TRANSACTION;
DROP TABLE Test;
Run Code Online (Sandbox Code Playgroud)


然而,在线执行操作并不意味着其他并发查询完全不会受到影响。在线操作并不需要长期锁定,但它仍然可能消耗大量的系统资源(例如内存、处理器、I/O)。如果这些资源成为瓶颈,并发查询可能会遇到与资源相关的等待。
在您的特定场景中,页面PAGELATCH_UP等待PFS表明分配资源上存在闩锁争用。任何可能的纠正措施取决于与锁存等待相关的资源描述。
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |