截断表锁定系统视图

Jam*_*all 5 sql-server truncate snapshot-isolation sql-server-2014

我们有一个Truncate Table在 Snapshot 事务中运行的 proc 。这似乎导致了一个LOCK_M_S阻塞 sys 视图的锁sys.partitions

有没有方便的解决方法?我喜欢不使用 truncate 发生的多余日志的效率,但不想锁定我的sys.partitions.

我很高兴应要求发布代码,但我很确定这是Truncate在 Snapshot 事务中的某种行为。我只是不知道。

Pio*_*otr 3

截断和删除的锁定是不同的。至于锁定 TRUNCATE 的行为更像是“ALTER TABLE”而不是 DELETE。

来自 Microsoft 文档:
TRUNCATE TABLE (Transact-SQL)
“当使用行锁执行 DELETE 语句时,表中的每一行都将被锁定以进行删除。TRUNCATE TABLE 始终锁定表(包括架构 (SCH-M) 锁)和页面,但不是每一行”。

正如您所看到的,整个表上有一个架构锁。