设置
- 并行阈值成本:5
- 最大并行度:4
- 处理器数量:8
- SQL Server 2008 10.0.2.2757
- 我有一个包含许多连接、许多记录的查询。
- 设计是明星。(带有 fks 到参考表的中央表)
- 中央表在相关日期列上进行分区。
- 分区架构按天拆分
- 数据在分区模式中被很好地分割 - 通过比较分配给分区模式的文件组中的文件大小来判断
- 涉及的查询在分区列上设置了谓词。例如( cs.dte >= @min_date 和 cs.dte < @max_date )
- 日期参数的值是隔天 @ 午夜所以,2010-02-01, 2010-02-02
- 估计的查询计划显示没有并行性
a) 这个问题是关于 Sql Server 2008 数据库引擎的。当 OLTP 引擎中的查询正在运行时,我希望看到/获得在使用 Progress End 事件分析 SSAS 查询时获得的那种洞察力——在这种情况下,人们会看到类似“完成读取 PartititionXYZ”的内容。
b) 如果估计的查询计划或实际的查询计划显示没有并行处理,这是否意味着所有分区都将被/被检查/读取?* 我在这里想说的是 - 只是 b/c 我在查询计划中看不到并行性,这并不能保证查询不会触及多个分区 - 对吧?或者 - 并行度和访问的 # 个分区之间是否存在稳固的关系?
c) 建议?我需要提供更多信息吗?
d)我如何判断查询是否正在并行处理而无需查看@实际查询计划?* 如果它有助于确定正在使用的分区,我真的只对此感兴趣。
11 月 10 日添加
试试这个:
- 创建应该命中 1、3 和所有分区的查询
- 打开一个 SSMS 查询窗口,然后运行
SET SHOWPLAN_XML ON
- 在该窗口中一个一个地运行每个查询
- 每次运行都会踢出一大块 XML
- 比较这些 XML 结果(我使用文本比较工具“CompareIt”,但任何类似的工具都可以)
您应该看到执行计划明显不同。在我的“3”和“All”查询中,有一段标记为“ConstantScan”的文本在表中有(分别)3和所有分区的条目,而“1 partition”查询不存在该部分. 我用它来推断是的,SQL 确实按照它所说的去做,也就是说:只读取它认为需要的表中的尽可能多的内容,以便解决查询。