Commit Transaction 耗时太长?
Commit Transaction take too long?
我有一个包含以下代码的存储过程:
BEGIN TRY
--BEGIN TRANSACTION @TranName
DECLARE @ID int
INSERT INTO [dbo].[a] ([Comment],[Type_Id],[CreatedBy])
VALUES ('test',1,2)
SET @ID = SCOPE_IDENTITY()
INSERT INTO [dbo].[b] ([Can_ID],[Com_ID],[Cal_ID],[CreatedBy])
VALUES (1,@ID,null,2)
UPDATE c SET LastUpdated = GETDATE(), LastUpdatedBy = 2 WHERE b.id = @ID
--COMMIT TRANSACTION @TranName
SELECT * from [View] where a.id=@ID
END TRY
BEGIN CATCH
--ROLLBACK TRANSACTION @TranName
END CATCH
那里的每个语句 运行 单独(就像现在一样)运行 很快。 但是当我们从 Transaction 的一段代码中删除注释时,脚本 运行 时间从 1 秒增加到 2 分钟以上。
系统已经 运行 运行了很长一段时间,以前这不是问题,我一直在尝试搜索有关 SQL 服务器如何处理事务的文档如果有任何可能影响 SQL 性能的事情,我唯一想到的就是事务日志...但理想情况下,这些单独的语句 运行 也在单个事务中,有什么想法吗?
正如 Jens 所建议的问题是由于某些表阻塞,在重置 SQL 服务器服务后,此锁消失并且数据库再次开始正常工作。
我有一个包含以下代码的存储过程:
BEGIN TRY
--BEGIN TRANSACTION @TranName
DECLARE @ID int
INSERT INTO [dbo].[a] ([Comment],[Type_Id],[CreatedBy])
VALUES ('test',1,2)
SET @ID = SCOPE_IDENTITY()
INSERT INTO [dbo].[b] ([Can_ID],[Com_ID],[Cal_ID],[CreatedBy])
VALUES (1,@ID,null,2)
UPDATE c SET LastUpdated = GETDATE(), LastUpdatedBy = 2 WHERE b.id = @ID
--COMMIT TRANSACTION @TranName
SELECT * from [View] where a.id=@ID
END TRY
BEGIN CATCH
--ROLLBACK TRANSACTION @TranName
END CATCH
那里的每个语句 运行 单独(就像现在一样)运行 很快。 但是当我们从 Transaction 的一段代码中删除注释时,脚本 运行 时间从 1 秒增加到 2 分钟以上。
系统已经 运行 运行了很长一段时间,以前这不是问题,我一直在尝试搜索有关 SQL 服务器如何处理事务的文档如果有任何可能影响 SQL 性能的事情,我唯一想到的就是事务日志...但理想情况下,这些单独的语句 运行 也在单个事务中,有什么想法吗?
正如 Jens 所建议的问题是由于某些表阻塞,在重置 SQL 服务器服务后,此锁消失并且数据库再次开始正常工作。