第一个SQL请求比其他使用冷缓存的请求慢

时间:2018-12-26 15:56:17

标签: sql-server tsql

我找不到为什么我的第一个请求比较慢的原因。我在每个循环中都清理缓存,但是仍然有很大的不同。

    DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
DECLARE @cnt INT = 0;
DECLARE @myTable TABLE  
    ( passage INT NOT NULL, 
    timer   INT   NOT NULL);  



WHILE @cnt < 10
BEGIN 
    DBCC DROPCLEANBUFFERS 

    SET @t1 = GETDATE();
        SELECT [IdElement]
  , [IdElementary]
  FROM [dbo].[Elementest]
  WHERE IdelementAccount = 1
    SET @t2 = GETDATE();

    INSERT INTO @myTable (timer, passage) VALUES (DATEDIFF(millisecond,@t1,@t2), @cnt);
    SET @cnt = @cnt + 1;

END;

SELECT * FROM @myTable

计时器的毫秒数为:

970

63

66

63

70

70

66

60

60

66

2 个答案:

答案 0 :(得分:1)

RDBMS将查询结果缓存到内存中,以加快访问速度。即使是经常访问的查询也会被缓存,以便从内存而不是磁盘执行执行。

根据您的SQL查询的结构,执行时间可能会有所不同。而且,SQL的保留内存在缓存中起着很大的作用。如果保留内存不足,则RDBMS会频繁释放其缓存,以为新的DML操作打开空间。

因此,在这种情况下,最好专注于资源使用和优化器特定的调整。

我相信您可能会从dba.stackexchange.com

获得更多帮助

答案 1 :(得分:0)

我想区别在于查询计划。您有一个参数化查询,因此第一次运行会编译查询并将计划存储在查询缓存中。我很惊讶这将花费900毫秒,但这似乎是造成延迟的原因。