【问题标题】:Sporadic Execution Times for Query in SQL Server 2008SQL Server 2008 中查询的零星执行时间
【发布时间】:2023-03-15 16:03:01
【问题描述】:

我一直在对一个查询进行一些速度测试,其中我将 10,000 条记录插入到一​​个包含数百万(超过 2400 万)条记录的表中。查询(下)不会插入重复记录。

MERGE INTO [dbo].[tbl1] AS tbl
USING (SELECT col2,col3, max(col4) col4, max(col5) col5, max(col6) col6 FROM #tmp group by col2, col3) AS src
ON (tbl.col2 = src.col2 AND tbl.col3 = src.col3)
WHEN NOT MATCHED THEN 
INSERT (col2,col3,col4,col5,col6)
VALUES (src.col2,src.col3,src.col4,src.col5,src.col6);

上述查询的执行次数是零星的;范围从 0:02 秒到 2:00 分钟。

我正在 SQL Server Studio 中通过脚本运行这些测试,该脚本将创建 10,000 行数据(到 #tmp 表中),然后触发上面的 MERGE 查询。关键是,我运行的每个测试都在执行相同的脚本。

执行时间从几秒到几分钟跳动,如下所示:

  • 测试 #1:0:10 秒
  • 测试 #2:1:13 分钟
  • 测试 #3:0:02 秒
  • 测试 #4:1:56 分钟
  • 测试#5:0:05 秒
  • 测试 #6:1:22 分钟

我觉得有趣的一个指标是秒/分钟交替序列相对一致 - 即每隔一个测试结果以秒为单位。

你能告诉我什么可能导致这个查询有如此零星的执行时间吗?

【问题讨论】:

  • 您是否排除了其他可能性:网络延迟、DB 偶尔会非常忙于服务其他请求等?
  • 这看起来非常熟悉my question。我很想看看你是否知道发生了什么。
  • @Jeff - 数据库与 SQL Studio 位于同一台机器上,因此不必担心网络延迟,不是吗?至于排除其他可能性,我什至不知道从哪里开始寻找。
  • @Jerad - 我一定会回发我认为值得一提的任何内容。

标签: sql tsql sql-server-2008


【解决方案1】:

我希望我能说出导致执行时间不规律的原因是什么,但我可以说出我为解决这个问题所做的工作......

我创建了一个新的数据库和目标表,并在目标表中添加了 2500 万条记录。然后我通过在目标表中重复插入 10k 条记录,在新的数据库/表上运行我的原始测试。结果是一致的执行时间大约为 0:07 秒(对于每个 10k 插入)。

为了好玩,我在一台 CPU/内存是我的开发笔记本电脑两倍的机器上进行了完全相同的测试。结果是一致的执行时间为 0:00 秒(是时候换一台新的开发机器了;))

我不喜欢不发现问题的原因,但在这种情况下,我将不得不称之为好并继续前进。希望有一天,StackO 的顽固分子可以用一个好的答案更新这个问题。

【讨论】:

  • 根据您的分辨率,可能是统计数据不佳或碎片化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多