首页 > 解决方案 > 如何运行会使其他查询运行更慢的 SQL Server 查询

问题描述

这听起来像是一个黑客问题,但是我可以在 SQL Server 中运行一个查询,它会消耗 CPU 时间,使其他查询运行得更慢吗?

我问的原因是因为我试图重现生产中发生的超时错误。在开发环境中,SQL Server 永远不会给出这样的超时错误,所以我正在寻找一种方法来降低 SQL Server 的速度,这些查询除了消耗 CPU 时间之外什么都不做。

我已经尝试Timeout=1在连接字符串中设置,但仍然没有抛出异常。

标签: sql-serversql-server-2012

解决方案


慢查询马上出现!. @SteveC 的回答非常好,肯定会成功。我真的在 15 分钟前结束了一篇关于下面代码的文章,所以我无法抗拒。这个查询比听说过的胖老三足乌龟穿过一条由融化的棉花糖制成的宽阔街道要慢。它还会导致内部查询并行死锁,从而破坏每个人的乐趣。您需要dbo.NGrams2B的副本(地球上最快的 VARCHAR(MAX) N-Grams 函数,但不是今天。)

DECLARE @Match VARCHAR(MAX) = REPLICATE(CAST('X' AS VARCHAR(MAX)),150000),
        @Junk1 VARCHAR(MAX) = REPLICATE(CAST('Z' AS VARCHAR(MAX)),10000011),
        @Junk2 VARCHAR(MAX) = REPLICATE(CAST('#' AS VARCHAR(MAX)),2000000000);

DECLARE @SearchText VARCHAR(MAX) = @Match,
        @SomeString VARCHAR(MAX) = @Junk1+@Match+@Junk2;

SELECT ItemIndex = ISNULL(MAX(f.ItemIndex),0)
FROM
(
  -- Returns the first position of @SearchText
  SELECT TOP(1) ng.Position
  FROM     dbo.ngrams(@SomeString,LEN(@SearchText)) AS ng
  WHERE    ng.Token = @SearchText
  ORDER BY ng.Position
) AS f(ItemIndex)
OPTION (QUERYTRACEON 8649);

上帝保佑我的朋友!


推荐阅读