我有一个存储过程,其代码如下:
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性能的事情和我唯一想到的就是事务日志......但理想情况下,这些单独的语句也可以在单个事务中运行,任何想法?
答案 0 :(得分:3)
正如Jens建议的那样,问题是由于某些表阻塞,重置SQL Server服务后,这个锁消失了,数据库又开始正常工作了。