通过 c# (Microsoft.AnalysisServices) 的 SSAS 处理比 SSMS 慢得多
SSAS Processing via c# (Microsoft.AnalysisServices) Much Slower than SSMS
我正在以编程方式处理我的 SSAS 多维数据集。我并行处理维度(我自己管理对 .Process() 的并行调用),一旦它们全部完成,我并行处理度量组分区(再次自己管理并行性)。
据我所知,这是我在 SSMS 中所做的直接复制(相同的流程类型等)。我能看到的唯一区别是我正在并行处理所有维度然后所有的度量组分区并行。如果您在 SSMS 中右键单击处理多个对象,它似乎在任何时候都只能并行处理 2(从指示进程尚未在除 2 以外的所有处理 windows 中启动的文本推断)。但如果有的话,我希望我的代码比 SSMS 更快,而不是更慢。
我用 "starting" 和 "finishing" 调试消息包装了处理操作,一切都符合预期。 .Process() 所做的工作似乎比 SSMS 慢得多。
在通常需要不到 1 小时处理的 Cube 上,现在需要 7.5 小时。
在通常需要不到 3 分钟的处理时间的立方体上,它需要 6.5 分钟。
据我所知,维度的处理大致相同,但度量组的速度要慢得多。然而,后者当然要大得多,所以可能只是差异对我来说并不那么明显。
我不知所措,非常感谢任何帮助!我缺少设置吗?自己管理并行性并并行处理多个而不是 2 个会导致问题吗?
如果您能提供您的代码,我很乐意查看,但我猜您是在并行线程中调用 dimension.Process(),希望它在服务器上并行处理。它不会。它将由于锁定而串行处理,因为您正在执行单独的处理批次和单独的事务。
有什么理由不处理所有内容(而不是增量处理最近的分区或其他内容)?让我们从简单开始,看看这是否就是您所需要的。您可以获取数据库对象并只执行 ProcessFull 吗?这将正确地并行处理所有维度和度量值组。
database.Process(ProcessType.ProcessFull)
如果您确实需要增量处理,请查看此 link 以在事务中并行使用 ExecuteCaptureLog(true,true) 到 运行 多个 ProcessUpdate 命令:
https://jesseorosz.wordpress.com/2006/11/20/how-to-process-dimensions-in-parallel-using-amo/
我建议在该事务批处理中包含您要处理的分区。它会自动知道正确的依赖关系。还要确保在该批次中的多维数据集对象上包含 ProcessIndexes,以便在维度 ProcessUpdate 之后重建旧分区上的灵活聚合和索引。
我正在以编程方式处理我的 SSAS 多维数据集。我并行处理维度(我自己管理对 .Process() 的并行调用),一旦它们全部完成,我并行处理度量组分区(再次自己管理并行性)。
据我所知,这是我在 SSMS 中所做的直接复制(相同的流程类型等)。我能看到的唯一区别是我正在并行处理所有维度然后所有的度量组分区并行。如果您在 SSMS 中右键单击处理多个对象,它似乎在任何时候都只能并行处理 2(从指示进程尚未在除 2 以外的所有处理 windows 中启动的文本推断)。但如果有的话,我希望我的代码比 SSMS 更快,而不是更慢。
我用 "starting" 和 "finishing" 调试消息包装了处理操作,一切都符合预期。 .Process() 所做的工作似乎比 SSMS 慢得多。
在通常需要不到 1 小时处理的 Cube 上,现在需要 7.5 小时。 在通常需要不到 3 分钟的处理时间的立方体上,它需要 6.5 分钟。 据我所知,维度的处理大致相同,但度量组的速度要慢得多。然而,后者当然要大得多,所以可能只是差异对我来说并不那么明显。
我不知所措,非常感谢任何帮助!我缺少设置吗?自己管理并行性并并行处理多个而不是 2 个会导致问题吗?
如果您能提供您的代码,我很乐意查看,但我猜您是在并行线程中调用 dimension.Process(),希望它在服务器上并行处理。它不会。它将由于锁定而串行处理,因为您正在执行单独的处理批次和单独的事务。
有什么理由不处理所有内容(而不是增量处理最近的分区或其他内容)?让我们从简单开始,看看这是否就是您所需要的。您可以获取数据库对象并只执行 ProcessFull 吗?这将正确地并行处理所有维度和度量值组。
database.Process(ProcessType.ProcessFull)
如果您确实需要增量处理,请查看此 link 以在事务中并行使用 ExecuteCaptureLog(true,true) 到 运行 多个 ProcessUpdate 命令: https://jesseorosz.wordpress.com/2006/11/20/how-to-process-dimensions-in-parallel-using-amo/
我建议在该事务批处理中包含您要处理的分区。它会自动知道正确的依赖关系。还要确保在该批次中的多维数据集对象上包含 ProcessIndexes,以便在维度 ProcessUpdate 之后重建旧分区上的灵活聚合和索引。