![]() |
1
3
SQL Server不仅缓存执行计划,还缓存数据 如果你愿意的话 将统计信息IO设置为打开 看看你将看到的输出 逻辑读 和 物理读 ,逻辑读取来自RAM,物理读取来自磁盘。因此,第一次看到物理读取的数字时,如果再次运行该数字,则应该看到逻辑读取的值。 3小时似乎很长,也可能是因为阻塞/锁定、过时的统计数据等。 |
![]() |
2
0
理论上,当第一次运行(一个“冷运行”)时,查询所需的表和索引页可能位于磁盘上。查询获取了它们,引擎将它们放入缓存中。 查询的第二次运行(“热运行”)只使用缓存中的数据,当然这要快得多。 但是,3个小时甚至足以填充最大的缓存,因此这种情况很难实现。 最有可能的是,第二次运行中使用了另一个执行计划(可能是由于统计信息更新)。 |
![]() |
3
0
不!不可能!
区别在其他地方!
很可能是由于以下两种原因造成的:
所提及的差异:
3小时,最短1分钟左右是如此的激烈,我不认为只有缓存数据才能解释它。
.
以下是一些了解更多信息的建议:
清除缓存的语句有(对于较新版本的SQL Server,可能还有其他方法可以做到这一点):
|
![]() |
4
0
不。很可能是第一次您的查询被阻塞(例如,被另一个会话或增长事件阻塞),而第二次没有。
要给出示例,请使用此查询:
这里的要点并不是您在执行过程中有或没有发生增长事件。关键是,如果查询持续3小时,您需要了解 为什么? . Activity Monitor 是一个很好的开始。像读白皮书一样 Performance Tunning Wait Queues 会更好。 |
![]() |
Sweepy Dodo · JSON lite的格式化 5 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 7 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 7 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 10 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 10 月前 |
![]() |
Mohan · 是否有一种更快的方法来编写代码,从1:N中提取许多随机样本? 11 月前 |
![]() |
user2980746 · 在C#字典中键入xyz对的最有效方法是什么? 11 月前 |