【问题标题】:Query Lag – Single Row Select Takes Over 2 Minutes to Complete查询滞后 - 单行选择需要超过 2 分钟才能完成
【发布时间】:2015-06-30 22:49:02
【问题描述】:

查询滞后 - 单行选择需要超过 2 分钟才能完成

SQL Server 10.50.4000.0 (2008 R2 SP2)

第 1 步 - 填充测试表

begin tran
truncate table MSDS_PROD_BK..MSDS_Import
insert into    MSDS_PROD_BK..MSDS_Import
select * from  MSDS_PROD..MSDS_Import (nolock)
commit tran

(受影响的 30354 行)

(需要 32 秒才能完成)

(重要提示 - 该表包含一个 VARBINARY 列)

第 2 步 – 仅选择 1 行的 VARBINARY 列(通过新的查询窗口,数据库:MSDS_PROD_BK)

SELECT distinct FILE_DATA 
FROM MSDS_Import 
WHERE FILE_NAME = ‘example.pdf’

(需要 2 分钟完成)

(重要提示 - 在运行时,相同的查询会从其他新的和现有的会话返回亚秒级 [响应时间],是的,如果未指定 DISTINCT,则不会出现延迟)

(随后,所有此类查询现在返回亚秒级 [响应时间])

在延迟时间期间,运行 sp_who2 显示没有阻塞,但 sp_lock 显示:

dbid    ObjId   IndId   Type    Resource    Mode    Status
75  0   0   MD  2(35e8b1ea:b:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:a:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:a:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:b:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:9:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:8:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:8:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:9:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:3:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:3:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:1:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:1:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:1:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:7:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:6:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:6:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:7:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:5:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:4:0)                     Sch-S   GRANT
75  0   0   MD  2(35e8b1ea:4:0)                     Sch-S   GRANT
75  0   0   MD  1(35e8b1ea:5:0)                     Sch-S   GRANT

问题 - VARBINARY 列的第一次点击查看的幕后情况是什么?

当然,计划尝试安装 SP3

谢谢

【问题讨论】:

  • 我假设你没有任何索引。
  • 听起来DISTINCT 是在WHERE 之前应用的;所以它正在读取所有 30,354 个 VARBINARY 字段?你能提供实际的执行计划吗? (虽然这就是我的感觉,但我有信心/希望我一定是错的。)
  • DISTINCT 是罪魁祸首。意思是不发送重复,但是为了找到重复,引擎需要读取并比较所有二进制字段的内容。
  • 我同意 DISTINCT 是罪魁祸首——然而,当查询旋转运行超过两分钟时,我可以打开一个新的查询窗口,运行相同的查询并完成子第二个(而第一个命中查询仍在运行和运行
  • 该表有一个主键,并且估计的查询计划说它正在执行聚集索引扫描(即使查询列 FILE_DATA 和 FILE_NAME 不是索引的一部分 - 奇怪吗?)

标签: sql-server sql-server-2008-r2


【解决方案1】:

with ctefiledate
as
(
	SELECT FILE_DATA 
	FROM MSDS_Import 
	WHERE FILE_NAME = 'example.pdf'
)
select distinct file_data from ctefiledate

检查上面的代码

谢谢

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多