设置
a)这个问题与Sql Server 2008数据库引擎有关。当OLTP引擎中的查询正在运行时,我希望看到/具有使用Progress End事件分析SSAS查询时获得的那种洞察力 - 其中一个人看到类似“完成阅读PartititionXYZ”的内容。
b)如果估计的查询计划或实际查询计划显示没有并行处理,那是否意味着将检查/读取所有分区? *我在这里想说的是 - 只是b / c我在查询计划中没有看到并行性,这并不能保证查询没有达到多个分区 - 对吧?或者 - 并行性和访问的#分区之间是否存在稳固的关系?
c)建议?我需要提供更多信息吗?
d)如何判断查询是否正在并行查看@实际查询计划? *如果它有助于确定正在使用的分区,我真的只对此感兴趣。
11月10日添加
试试这个:
SET SHOWPLAN_XML ON
您应该看到执行计划明显不同。在我的“3”和“所有”查询中,有一大块文本被标记为“ConstantScan”,其中包含(分别)3和表中所有分区的条目,并且该部分不存在于“1分区”查询中。我使用它来推断确实是,SQL正在做它所说的将会做的事情,即:只读取它认为需要的表以便重新调用查询。
答案 0 :(得分:1)
答案 1 :(得分:0)
a)在查询仍在运行时,我不知道有任何方法可以确定查询的进展情况。锁定和锁定系统视图可能有点挑剔,但我对此表示怀疑。 (我,唉,对SSAS不够熟悉,无法在两者之间划出相似之处。)
b)在单个表中处理多个分区时,SQL可能会使用并行性,在这种情况下,您将在查询计划中看到并行处理“令牌”。但是,如果出于某种原因无法调用并行性,但必须读取多个分区,则不使用并行性就会读取它们。
d)另一件可能无法做到的事情。在非常受控制的情况下,您可以使用系统监视器(Perfmon)在执行查询期间跟踪CPU使用情况或磁盘读取。如果服务器正在执行其他工作,或者数据驻留在内存(缓冲区缓存)中,这将无济于事,因此可能用途有限。
c)你究竟想弄清楚什么?用户在一段时间内访问了哪些分区(如果有)? SQL生成“智能”查询计划吗?如果没有数据,结构和查询的细节,很难提出建议。