背景:我正在优化具有大维度表的数据仓库样式查询。优化器目前不喜欢选择典型的星型模式连接计划。当我强制执行这个计划时(通过使用索引提示),我可以看到这个星型连接计划比我现在使用的计划贵一点。我怀疑这是因为尺寸不适合我的开发机器上的 RAM。该版本是 SQL Server 2014,但我希望这个问题可以推广到所有最新版本。
问题:有没有办法让优化器相信它有大量 RAM 可供使用?出于测试目的,我想获得如果它有 1TB 可用 RAM(而不是目前的 8GB)时它将生成的计划。
背景:我正在优化具有大维度表的数据仓库样式查询。优化器目前不喜欢选择典型的星型模式连接计划。当我强制执行这个计划时(通过使用索引提示),我可以看到这个星型连接计划比我现在使用的计划贵一点。我怀疑这是因为尺寸不适合我的开发机器上的 RAM。该版本是 SQL Server 2014,但我希望这个问题可以推广到所有最新版本。
问题:有没有办法让优化器相信它有大量 RAM 可供使用?出于测试目的,我想获得如果它有 1TB 可用 RAM(而不是目前的 8GB)时它将生成的计划。
该
DBCC WHATIF
命令(另见http://devondba.blogspot.co.uk/2014/03/dbcc-optimizerwhatif.html)可用于模拟当前会话的特定硬件配置:该
MemoryMBs
属性必须设置为某个值。之后似乎有必要重新编译有问题的查询(例如
DBCC FREEPROCCACHE
在开发箱上使用,或者OPTION (RECOMPILE)
如果该提示对于以后的生产使用是可接受的则使用)。通过影响XML 执行计划中
WHATIF
的值这一事实,很容易看出该值“被采用”了。<OptimizerHardwareDependentProperties>