并行运行SSAS XMLA查询

时间:2014-01-23 14:04:21

标签: ssas xmla

我有两个xmla查询(用于处理SSAS多维数据集),这两个查询已嵌入到两个单独的SQL Server预定作业中。这些作业在随机时间由某些代码触发,并且可能有一段时间同时触发两个作业。在这种情况下,一个作业(实际上是与该预定作业相关联的XMLA查询)获得优先权,而其他作业一直等到前一个完成。我想同时执行两个xmla查询。那可能吗。 XMLA的结构如下:

  <Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <Parallel>
    <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200">
      <Object>
        <DatabaseID>SSAS Database ID here</DatabaseID>
        <CubeID>Cube ID here</CubeID>
      </Object>
      <Type>ProcessFull</Type>
      <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
    </Process>
  </Parallel>
</Batch>

寻找可能的建议/答案。

1 个答案:

答案 0 :(得分:1)

如果两个处理指令都访问公共对象(分区或维度),则必须等待另一个处理指令完成。 Analysis Services - 针对OLAP进行了优化 - 使用非常粗略的粒度锁定模型:对分区或维度等对象的每次写入访问都会在此对象上放置一个写入锁定,该锁定仅在作业完成后释放 - 成功或使用错误。

如果两个处理作业只访问不同的对象,则不会发生冲突,并且它们可以并行运行(例如,作业1处理维A和B并测量组X,作业2处理维C和D以及测量组Y和Z)。

这种粗略的锁定粒度是快速的方面之一,因为不需要检查您访问的每个数据行上的锁定 - 就像大多数关系数据库的情况一样,这会导致一些开销。