1

我有两个嵌入在两个单独的 SQL Server 计划作业中的 xmla 查询(用于处理 SSAS 多维数据集)。这些作业由一些代码在随机时间触发,并且可能有一段时间两个作业同时被触发。在这种情况下,一项作业(实际上是与该计划作业关联的 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>

寻找可能的建议/答案。

4

1 回答 1

1

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

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

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

于 2014-01-23T17:58:05.397 回答