我在如下所示的数据库上执行 SQL:
SET IDENTITY_INSERT table1 ON
GO
BEGIN TRANSACTION
GO
INSERT INTO table1 SELECT ... FROM table2
GO
DELETE FROM table2 ...
GO
COMMIT TRANSACTION
GO
SET IDENTITY_INSERT table1 OFF
GO
Run Code Online (Sandbox Code Playgroud)
问题是我的表被锁定在最后一条语句上SET IDENTITY_INSERT table1 OFF
,之前的所有语句大约需要 6 个小时,但我的表现在被锁定在最后一条语句上 1 天。
在活动监视器中,它具有不执行任何命令的连接,但它是锁定链的头部阻塞器,我杀死了它,但没有任何改变,只是处于回滚状态,但它仍在消耗所有 I/O。
我的问题是这个会话在做什么以及如何避免它?由于某种原因,看起来 IDENTITY_INSERT 几乎像全表娱乐一样昂贵,我不知道这会如何导致性能方面的任何缺点。
附加信息:插入期间没有身份冲突,bcs i insert 操作的身份值低于 table1 上的初始设置
餐桌设计:
CREATE TABLE [dbo].[table1] (
[id_table1] BIGINT IDENTITY NOT NULL,
[id_table3] INT NOT NULL,
[some_id] BIGINT NOT NULL,
[some_time2] DATETIME2 NOT NULL,
[some_time] DATETIME2 NOT NULL,
[some_value] FLOAT …
Run Code Online (Sandbox Code Playgroud)