Akash Asked: 2012-11-26 22:25:39 +0800 CST2012-11-26 22:25:39 +0800 CST 2012-11-26 22:25:39 +0800 CST Sql Server 中的查询成本是否考虑了缓冲? 772 如果我通过检查它们的相对“查询成本”作为高级性能指标来比较 2 个查询,缓冲区状态是否对执行计划中显示的值有任何影响? sql-server sql-server-2008 1 个回答 Voted Best Answer Paul White 2012-12-01T23:19:56+08:002012-12-01T23:19:56+08:00 是和否,取决于您所说的“缓冲区状态”是什么意思。 缓冲池的状态(内容)不会直接影响执行计划的估计成本(成本模型假设每个查询都从冷数据缓存开始。 出于多种原因,缓冲池的大小(而非内容)可能会对计划选择产生影响。 第一个发生在存在诸如散列和排序之类的内存消耗操作时。估计可用于内存授予的内存量取决于缓冲池大小(请注意此区域中有趣的错误)。 以下基于AdventureWorks的查询显示了基于缓冲池大小的这种成本差异的示例。在这种情况下,计划形状是相同的,但这些成本差异可以并且确实会改变计划选择,使用更大的表或更复杂的查询: -- Set to 256 MB EXEC sys.sp_configure @configname = 'max server memory (MB)', @configvalue = 256; RECONFIGURE; -- Estimated cost 5.92241 with 256MB SELECT DISTINCT ProductID, TransactionDate, Quantity, ActualCost FROM Production.TransactionHistory AS th OPTION (MAXDOP 1); -- Set to 2GB EXEC sys.sp_configure @configname = 'max server memory (MB)', @configvalue = 2048; RECONFIGURE; -- Estimated cost 5.48355 with 2GB SELECT DISTINCT ProductID, TransactionDate, Quantity, ActualCost FROM Production.TransactionHistory AS th OPTION (MAXDOP 1); 其次,优化器包含用于评估(例如)在执行期间再次需要从磁盘读取页面(在冷缓存假设下)的可能性的逻辑,如果是这样,它是否仍然可以从缓存中获得。 更重要的是,优化器成本估算主要仅对内部服务器有用。它们不打算用于评估潜在绩效,即使是在“高水平”。该模型是一种抽象,恰好可以很好地满足其设计的内部目的。估计成本与您的硬件和配置上的实际执行成本有任何明显相似的可能性确实很小。 根据对您重要的任何实际问题,选择其他指标来比较性能。
是和否,取决于您所说的“缓冲区状态”是什么意思。
缓冲池的状态(内容)不会直接影响执行计划的估计成本(成本模型假设每个查询都从冷数据缓存开始。
出于多种原因,缓冲池的大小(而非内容)可能会对计划选择产生影响。
第一个发生在存在诸如散列和排序之类的内存消耗操作时。估计可用于内存授予的内存量取决于缓冲池大小(请注意此区域中有趣的错误)。
以下基于AdventureWorks的查询显示了基于缓冲池大小的这种成本差异的示例。在这种情况下,计划形状是相同的,但这些成本差异可以并且确实会改变计划选择,使用更大的表或更复杂的查询:
其次,优化器包含用于评估(例如)在执行期间再次需要从磁盘读取页面(在冷缓存假设下)的可能性的逻辑,如果是这样,它是否仍然可以从缓存中获得。
更重要的是,优化器成本估算主要仅对内部服务器有用。它们不打算用于评估潜在绩效,即使是在“高水平”。该模型是一种抽象,恰好可以很好地满足其设计的内部目的。估计成本与您的硬件和配置上的实际执行成本有任何明显相似的可能性确实很小。
根据对您重要的任何实际问题,选择其他指标来比较性能。