在这个职位中,作者多次运行一个查询。我注意到逻辑读取在不同的执行中略有不同。在总共几千页的阅读中,大约有2页的差别。在我看来,从上下文中可以清楚地看到,在这段时间内不会有任何写活动。如果计划改变的话,我就会期望有更大的变化,而不是百分之一的零头。
问:在没有数据写入的情况下,哪些因素会导致Server为同一查询报告不同的逻辑读取计数?
发布于 2014-12-11 22:27:21
在没有数据写入的情况下,哪些因素会导致Server为同一查询报告不同的逻辑读取计数?
对于堆表,我不知道有什么机制会导致这种情况。
我注意到,在使用压缩时,作者报告的逻辑读取只会有所不同。这表明每次执行时都包含表重建。重构语句没有指定MAXDOP = 1,因此将生成并行计划。在运行时,行在重建过程中跨线程的分布方式不是确定性的(这取决于时间),因此堆的最终结构会有所不同。这是我能够复制已发表的结果的唯一方法。
对于群集表(通常是对索引结构的查找/扫描),逻辑读取可能因提前读取活动而变化。预读从b树的上层读取页面,以便在扫描之前识别要读取的页面,从而产生不同数量的“额外”逻辑读取,这取决于存储系统的时间和特性。禁用带有全局跟踪标志652的预读功能可以用来演示这一点。
我提到预读方面只是为了完整性,因为所讨论的表是一个堆。堆扫描确实使用预读,但这是从IAM页面驱动的。IAM页面不构成主表结构的一部分(与b树的上层结构不同),因此这些额外的读取不会由STATISTICS IO报告。
https://dba.stackexchange.com/questions/71722
复制相似问题