【问题标题】:Reduce parallelism when processing a SSAS Tabular model using TOM使用 TOM 处理 SSAS 表格模型时减少并行度
【发布时间】:2018-09-18 20:59:13
【问题描述】:

我使用 Tabular Object Model 和 powershell 脚本处理我们的表格模型(兼容性级别 1200)。该脚本使用一些元数据来确定给定表需要处理哪些分区,然后在这些分区上执行process full。在某些情况下,脚本会在整个表上执行Process Full(例如在第一次将模型部署到服务器之后)

当脚本处理整个表时,我希望能够控制在任何给定时间对数据源执行多少并发查询,因此在我的脚本中,我创建了一个 Microsoft.AnalysisServices.Tabular.SaveOptions 的新实例并设置MaxParallelism 属性设置为 1 到 10 之间的数字。然后我将更改保存到服务器上的模型,并等待处理完成。

$serverTable.RequestRefresh([Microsoft.AnalysisServices.Tabular.RefreshType]::Full)
$db.Update( "ExpandFull")
$saveOptions = New-Object Microsoft.AnalysisServices.Tabular.SaveOptions
$saveOptions.MaxParallelism = $maxParallelism   
$result = $db.Model.SaveChanges($saveOptions)

如果我监控表连接到的 SQL 服务器,无论我将 MaxParallelism 设置为什么,我都会从我的 SSAS 框中看到几个查询(大多数情况下是 8 个)。阅读该属性上的documentation,此值不能保证并行性,因为服务器可能会强制执行其他限制。我没有看到任何提到并行性的server properties。还有哪些其他限制/为什么此属性不会影响同时运行的查询数量?

【问题讨论】:

    标签: powershell ssas-tabular ssas-2016


    【解决方案1】:

    脚本以错误的顺序调用方法,因此在处理完成之前不会在服务器上设置$maxParallelism 值!

    --Call the SaveChanges method with the SaveOptions before you RequestRefresh
    $saveOptions = New-Object Microsoft.AnalysisServices.Tabular.SaveOptions
    $saveOptions.MaxParallelism = $maxParallelism  
    $result = $db.Model.SaveChanges($saveOptions)
    $db.Update( "ExpandFull")
    $serverTable.RequestRefresh([Microsoft.AnalysisServices.Tabular.RefreshType]::Full)
    

    使用 $maxParallelism 的不同值对此进行测试,我可以看到 SSAS 现在开始的查询数量与我传入的值相同。(最多 8 个)

    【讨论】:

    • 感谢您的回答。我正在使用带有 TOM 的 C# 脚本一次处理多个表,我试图弄清楚为什么 MaxParallelism 选项不限制正在处理的表的数量。我知道您在一个表中测试了多个分区,但是几个表呢?在 C# 中,处理仅在您调用 SaveChanges 方法后开始。我尝试先使用 MaxParallelism 选项集保存它,但没有效果。
    • 没关系,它起作用了 :) 将 MaxParallelism = 1 设置为 Model.SaveChanges() 方法中的一个选项使我的表处理顺序(在处理之前和请求刷新之后都完成)。
    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多