【问题标题】:One SQL SELECT causing three transactions一个 SQL SELECT 导致三个事务
【发布时间】:2021-12-13 01:58:20
【问题描述】:

有人能解释一下为什么 t-sql select 会创建三个打开的​​事务吗?为什么它会创建一个交易呢?

我在名为jobimage 的表上有一个这样的查询,没有触发器,我在 SSMS 中作为新查询运行:

  SELECT 1
  FROM [JobImage] AS [j] 
  WHERE ((((([j].[JobId] = 3401639) 
    AND ([j].[DateTime] = '2021-10-27 09:18:05.3441290')) 
    AND ([j].[Comment] = '')) 
    AND ([j].[Stage] = 'Items to Fit'))  
    AND ([j].[Mandatory] = 0))  
    AND ([j].[Image] = 0xFFD8F.....002110103) 

问题在于类型为varbinary(max) 的图像列,如果我将其排除在选择之外,则没有问题,但如果我包含它,那么查询就会挂起,如果我在挂起时运行 sp_whoisactive然后它报告该查询创建了三个打开的​​事务,这会导致几分钟的阻塞问题。使用 NOLOCK 提示没有区别。

【问题讨论】:

    标签: sql select transactions varbinary


    【解决方案1】:

    我自己修好了。一个非常有趣的解决方案,因为它可能没有记录;我也运行了 DBCC TRAN,看看这个神秘的交易是什么,交易名称是 AutoCreateQPStats。互联网并没有告诉我太多关于这一点的信息,但是我禁用了表上的自动创建统计信息并允许 SELECT 继续进行。它似乎试图在事务下的这个 varbinary(max) 列上创建统计信息

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 2023-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多