【问题标题】:SSAS Processing via c# (Microsoft.AnalysisServices) Much Slower than SSMS通过 c# (Microsoft.AnalysisServices) 处理 SSAS 比 SSMS 慢得多
【发布时间】:2015-10-30 18:33:49
【问题描述】:

我正在以编程方式处理我的 SSAS 多维数据集。我并行处理维度(我自己管理对 .Process() 的并行调用),一旦它们全部完成,我就并行处理度量组分区(再次自己管理并行性)。

据我所知,这是我在 SSMS 中所做的直接复制(相同的流程类型等)。我能看到的唯一区别是我正在并行处理所有维度,并且所有维度之后并行的度量组分区。如果您在 SSMS 中右键单击处理多个对象,它似乎在任何时候都仅并行处理 2(从指示进程未在除 2 之外的所有处理窗口中启动的文本中推断)。但如果有的话,我希望我的代码比 SSMS 更快,而不是更慢。

我已经用“开始”和“结束”调试消息包装了处理操作,一切都符合预期。 .Process() 完成的工作似乎比 SSMS 慢得多。

在通常需要不到 1 小时来处理的 Cube 上,它需要 7.5 小时。 在通常需要不到 3 分钟来处理的立方体上,它需要 6.5 分钟。 据我所知,维度的处理大致相同,但度量值组要慢得多。但是,后者当然要大得多,所以可能只是差异对我来说并不那么明显。

我不知所措,希望能提供任何帮助!我错过了一个设置吗?自己管理并行度并并行处理多个而不是 2 会导致问题吗?

【问题讨论】:

    标签: c# parallel-processing ssas ssms


    【解决方案1】:

    如果您可以提供您的代码,我很乐意查看,但我的猜测是您在并行线程中调用 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 之后重建旧分区上的灵活聚合和索引。

    【讨论】:

    • 感谢您的回答。我不敢相信我不认为服务器会序列化我的请求——这不足为奇,因为它自己处理锁。是否有允许我并行处理的函数/属性?我处理更新维度,然后处理最近的分区 - 这绝对是我所需要的 - 处理所有(和不必要的)太耗时了。 Cube 是半聚合的,但它后面有超过 70 亿行。在 SSMS 中,我们右键单击进程更新所有维度,然后右键单击进程完整最近的分区。再次感谢。
    • 格雷格,非常感谢。真的很感激 - 现在将实现这个逻辑并跟进。这样一个小众问题,我真的很难找到相关信息!
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多