我正在以编程方式处理我的SSAS Cube。我并行地处理维度(我自己管理对.Process()的并行调用),一旦它们都完成了,我就并行地处理度量值组分区(再次自己管理并行性)。
据我所见,这是我在SSMS (相同的进程类型等)中所做的事情的直接复制。我唯一能看到的区别是,我正在并行地处理所有维度,然后并行处理所有度量组分区。如果在SSMS中右键单击“处理多个对象”,则在任何时候它似乎只并行地处理2(从指示进程尚未在除2之外的所有处理窗口中启动的文本中推断)。但是,如果有的话,我希望我的代码更快,而不是比SSMS慢。
我已经用“启动”和“完成”调试消息包装了处理操作,一切都如期而至。.Process()所做的工作似乎比SSMS慢得多。
在一个通常需要不到1小时的立方体上,它需要7.5小时。在一个通常需要3分钟才能处理的立方体上,它需要6.5分钟。据我所知,维数的处理大致相同,但测度组的处理要慢得多。然而,后者当然要大得多,所以这可能只是在我看来没有那么明显的差别。
我对自己的想法一无所知,希望得到任何帮助!我错过了一个场景吗?是否自己管理并行性和并行处理是多个,而不是2造成了一个问题?
发布于 2015-08-07 23:26:36
如果您可以提供代码,我很乐意查看,但我的猜测是,您正在并行线程中调用dimension.Process(),期望它在服务器上并行处理。它不会。由于锁定,它将以串行方式处理,因为您正在执行单独的处理批处理和单独的事务。
有什么理由不去处理所有的东西(而不是增量地处理最近的分区什么的)?让我们从简单的开始,看看这是否是您所需要的。你能得到数据库对象然后只做一个ProcessFull吗?这将适当地并行处理所有维度和度量组。
database.Process(ProcessType.ProcessFull)如果确实需要增量处理,请查看此链接,以便使用ExecuteCaptureLog(true,true)并行和在事务中运行多个ProcessUpdate命令:https://jesseorosz.wordpress.com/2006/11/20/how-to-process-dimensions-in-parallel-using-amo/
我建议在该事务批处理中包括要处理的分区。它将自动知道正确的依赖项。还要确保在该批处理中的多维数据集对象上包含一个ProcessIndexes,以便在维度ProcessUpdate之后重新构建旧分区上的灵活的ProcessUpdate和索引。
https://stackoverflow.com/questions/31875612
复制相似问题