sql-server – 事务块是否会降低SQL Server的性能?

前端之家收集整理的这篇文章主要介绍了sql-server – 事务块是否会降低SQL Server的性能?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现在我和一位同事正在争论非重要的BEGIN TRAN …… COMMIT TRAN块的影响.
我已经为简单的插入更新删除操作写了大约140个存储过程,因为我们以后可能需要在它们中做一些额外的操作,我已经包含了可能是必要的BEGIN TRAN和COMMIT TRAN块,如下所示:
CREATE PROCEDURE [Users].[Login_Insert]

        @Username           nvarchar (50) OUTPUT,@Password           char (40),@FullName           nvarchar (150),@LoginTypeId        int

AS

SET NOCOUNT ON;

BEGIN TRY
BEGIN TRAN

INSERT [Users].[Login]
(
        [Username],[Password],[FullName],[LoginTypeId]
)
VALUES
(
        @Username,@Password,@FullName,@LoginTypeId
)

COMMIT TRAN
RETURN 1
END TRY

BEGIN CATCH
ROLLBACK TRAN

RETURN -1
END CATCH

GO

现在许多这些交易可能永远不必要.这些无关的块是否会以明显的方式影响性能
提前致谢.

解决方法

不足以引起注意.

也就是说,每个TXN将在BEGIN TRAN和INSERT之间打开额外的OhNoSecond.如果有人能测量它,我会留下深刻的印象.

但是,如果你做BEGIN TRAN然后提示用户输入,你的腿需要打破……

好主意:我这样做所以我的所有写入过程100%一致,具有相同的错误处理,可以嵌套等

编辑:在Remus的回答之后,我看到我没有链接到我的嵌套TXN模板:Nested stored procedures containing TRY CATCH ROLLBACK pattern?这与Remus的不同之处在于它总是回滚并且没有SAVEPOINTs

编辑,一个快速而肮脏的测试显示它在交易时间的2/3左右更快

SET NOCOUNT ON
SET STATISTICS IO OFF

DECLARE @date DATETIME2
DECLARE @noTran INT
DECLARE @withTran INT

SET @noTran = 0
SET @withTran = 0

DECLARE @t TABLE (ColA INT)
INSERT @t VALUES (1)

DECLARE 
  @count INT,@value INT

SET @count = 1

WHILE @count < 100
BEGIN

  SET @date = GETDATE()
  UPDATE smalltable SET smalltablename = CASE smalltablename WHEN 'test1' THEN 'test' ELSE 'test2' END WHERE smalltableid = 1
  SET @noTran = @noTran + DATEDIFF(MICROSECOND,@date,GETDATE())

  SET @date = GETDATE()
  BEGIN TRAN
  UPDATE smalltable SET smalltablename = CASE smalltablename WHEN 'test1' THEN 'test' ELSE 'test2' END WHERE smalltableid = 1
  COMMIT TRAN
  SET @withTran = @withTran + DATEDIFF(MICROSECOND,GETDATE())

  SET @count = @count + 1
END

SELECT 
  @noTran / 1000000. AS Seconds_NoTransaction,@withTran / 1000000. AS Seconds_WithTransaction

Seconds_NoTransaction    Seconds_WithTransaction
2.63200000               2.70400000
2.16700000               2.12300000

颠倒更新顺序会保持相同的行为

猜你在找的MsSQL相关文章