Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 为什么计算执行计划需要这么长时间?_Sql Server_Statistics_Sql Execution Plan_Sqlperformance_Rebuild - Fatal编程技术网

Sql server 为什么计算执行计划需要这么长时间?

Sql server 为什么计算执行计划需要这么长时间?,sql-server,statistics,sql-execution-plan,sqlperformance,rebuild,Sql Server,Statistics,Sql Execution Plan,Sqlperformance,Rebuild,我有一个问题,在我第一次运行queryselect查询时,当一些表的重建或更新统计信息完成后,它运行得太慢,此查询的持续时间约为30分钟,但在这之后,当我再次运行时,持续时间约为3秒,如何解决它 我在查询中设置了统计IO,得到了以下结果: -第二次 表“表1”。扫描计数42,逻辑读取963118,物理读取0, 预读读取274,lob逻辑读取0,lob物理读取0,lob 预读为0 -第一次 表“表1”。扫描计数42,逻辑读取977019,物理读取 1143,预读读取946797,lob逻辑读取0,

我有一个问题,在我第一次运行queryselect查询时,当一些表的重建或更新统计信息完成后,它运行得太慢,此查询的持续时间约为30分钟,但在这之后,当我再次运行时,持续时间约为3秒,如何解决它

我在查询中设置了统计IO,得到了以下结果:

-第二次

表“表1”。扫描计数42,逻辑读取963118,物理读取0, 预读读取274,lob逻辑读取0,lob物理读取0,lob 预读为0

-第一次

表“表1”。扫描计数42,逻辑读取977019,物理读取 1143,预读读取946797,lob逻辑读取0,lob物理读取 0,lob预读读取0

为什么计算执行计划需要这么长时间

你认为它为什么在计算执行计划

第一次从磁盘读取:预读读取946797

预读可能高达512字节,因此30分钟内的946797预读平均为500 IO/秒,高达260MB/秒,任何一个都可能是IO系统所能提供的。因此,这些预读可能会占满30分钟的执行时间


第二次,数据几乎全部存储在内存中。

30分钟对于计划来说有点极端,因此很可能它实际上选择了一个次优计划,但直到第二次才知道。是否有尚未更新的表?查询中的索引暗示可能会有所帮助,或者添加稍微不同的索引。然而,我们需要更多的信息来判断。另外,这种情况会发生多久?