提交交易需要太长时间?

时间:2016-06-13 10:11:13

标签: sql-server stored-procedures sql-server-2012 sqlperformance sqltransaction

我有一个存储过程,其代码如下:

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

其中每个单独运行的语句(现在都是)运行得很快。 但是当我们从交易的代码段中删除注释时,脚本运行时间从1秒增加到超过2分钟

系统已经运行了很长一段时间,之前这不是问题,我一直在尝试搜索有关SQL Server如何处理事务的文档,以防万一有可能影响SQL性能的事情和我唯一想到的就是事务日志......但理想情况下,这些单独的语句也可以在单个事务中运行,任何想法?

1 个答案:

答案 0 :(得分:3)

正如Jens建议的那样,问题是由于某些表阻塞,重置SQL Server服务后,这个锁消失了,数据库又开始正常工作了。