Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQLServer2005缓存_Sql Server_Sql Server 2005_Caching_Sql Server Express_Ssms - Fatal编程技术网

Sql server SQLServer2005缓存

Sql server SQLServer2005缓存,sql-server,sql-server-2005,caching,sql-server-express,ssms,Sql Server,Sql Server 2005,Caching,Sql Server Express,Ssms,据我所知,SQLServer2005执行某种结果或索引缓存。我目前正在分析复杂的select语句,这些语句需要几秒钟到几分钟才能完成。我的问题是,即使我不更改查询,第二次运行查询也不会超过一秒钟。我目前正在使用SQLServerManagementStudio Express对SQLServer2005服务器执行查询 我的问题是,有没有办法避免或清除导致我的查询在第二次运行时执行得如此之快的缓存 我发现性能调整的唯一可行指标来自SQL Server的探查器应用程序。当查看CPU时间,尤其是读取时

据我所知,SQLServer2005执行某种结果或索引缓存。我目前正在分析复杂的select语句,这些语句需要几秒钟到几分钟才能完成。我的问题是,即使我不更改查询,第二次运行查询也不会超过一秒钟。我目前正在使用SQLServerManagementStudio Express对SQLServer2005服务器执行查询


我的问题是,有没有办法避免或清除导致我的查询在第二次运行时执行得如此之快的缓存

我发现性能调整的唯一可行指标来自SQL Server的探查器应用程序。当查看CPU时间,尤其是读取时间时,您将更加远离“其他影响”


例如,操作系统正忙,或多个用户处于活动状态将减少您的CPU份额,从而增加执行时间。在多个CPU上,您可能获得并行性,也可能得不到并行性。但无论哪种方式,总CPU时间(相对于执行时间)都将保持大致相同。

我发现性能调整的唯一可行指标来自SQL Server的探查器应用程序。当查看CPU时间,尤其是读取时间时,您将更加远离“其他影响”


例如,操作系统正忙,或多个用户处于活动状态将减少您的CPU份额,从而增加执行时间。在多个CPU上,您可能获得并行性,也可能得不到并行性。但无论哪种方式,总CPU时间(相对于执行时间)都将保持大致相同。

这里可能会有两种不同的情况,最初想到的3种情况(可能按顺序排列)如下-如果您需要一些解释结果的帮助,按照以下说明粘贴问题中的统计输出:

  • 您的查询/批处理需要很长时间才能编译执行计划。确定并缓存执行计划(请参阅了解重建计划的时间、时间等的概述)
    • 要验证这一点,请启用,这将为您提供有关引擎生成查询计划所需时间的信息。对于有问题的查询/批次:
    • 执行批处理,捕获统计输出
    • 再次执行批处理,捕获统计输出
    • 比较两个stat输出,特别注意两个执行之间的解析/编译时差异
    • 如果这是一个问题,您可以采取两种方法来解决这个问题,包括指定一个或可能的其他选项,例如创建一个计划作业,以便每几分钟编译一次计划(Sql 2k5上的选项不如其他选项好)
  • 您的查询/批处理涉及大量数据-在第一次执行时,数据可能不在中(基本上是服务器需要的缓存数据页),并且查询正在执行物理IO操作,而不是逻辑IO操作(即从磁盘读取与从缓存读取)。
    • 要验证这一点,请启用,这将为您提供有关IOs类型的信息以及引擎为批处理执行的IOs的数量。对于有问题的查询/批次:
    • 执行批处理,捕获统计输出
    • 再次执行批处理,捕获统计输出
    • 比较两个stat输出,特别注意两次执行之间的物理/预读和逻辑IO输出
    • 要解决这个问题,您基本上只有一个选项—优化有问题的查询,使其执行更少的IO操作。您可以考虑创建一个预定的作业,它可以经常运行查询,以便将数据保存在缓冲池中,但这不是一个好的选择。
  • 您的查询/批处理得到的执行计划和/或不同变量值的执行计划选择不佳-这是一个使用参数化语句的批处理/查询(即,您在where/join子句中使用的是变量/静态值?)?如果是这样,您是否看到相同值或不同值的执行时间有差异?如果对于相同的值,答案可能是#1或#2-如果对于不同的值,这可能是您的问题。如果您在研究了#1和#2之后认为这是问题所在,请使用.sqlplan、TSQL和您正在使用的不同参数值重新发布

  • 这里可能有两种不同的情况,最初出现在脑海中的3种情况(按可能的顺序)如下-如果您想要一些解释结果的帮助,请按照下面的说明并将统计输出粘贴到问题中:

  • 您的查询/批处理需要很长时间才能编译执行计划。确定并缓存执行计划(请参阅了解重建计划的时间、时间等的概述)
    • 要验证这一点,请启用,这将为您提供有关引擎生成查询计划所需时间的信息。对于有问题的查询/批次:
    • 执行批处理,捕获统计输出
    • 再次执行批处理,捕获统计输出
    • 比较两个stat输出,特别注意两个执行之间的解析/编译时差异
    • 如果这是一个问题,您可以采取两种方法来解决这个问题,包括指定一个或可能的其他选项,例如创建一个计划作业,以便每几分钟编译一次计划(Sql 2k5上的选项不如其他选项好)
  • 您的查询/批处理涉及大量数据-在第一次执行时,数据可能不在中(基本上是服务器需要的缓存数据页),并且查询正在执行物理IO操作,而不是逻辑IO操作(即从磁盘读取与从缓存读取)。
    • 要验证这一点,请启用,这将为您提供
      CHECKPOINT
      DBCC DROPCLEANBUFFERS