使用C#AMO对象刷新多维数据集分区-异步方式

时间:2019-05-03 10:58:09

标签: c# azure azure-analysis-services

我想使用C# AMO对象刷新多维数据集分区,刷新分区的同步方式正在正常进行。但是我想并行刷新分区。为此,我尝试通过

内的refresh方法

Parelle.ForEach()

templatePartition.RequestRefresh(Microsoft.AnalysisServices.Tabular.RefreshType.Full);
database.Model.SaveChanges();

但是它给出了以下错误:

  

无法将修改保存到服务器。返回错误:“由于死锁,锁定操作未成功结束。

因此想检查是否有人使用AMO异步调用来刷新分区。

1 个答案:

答案 0 :(得分:0)

如Jeroen所述,正确的方法是允许SSAS处理并行化,这样就不会遇到死锁或其他由于处理顺序错误而导致的其他问题。

您可以利用CaptureLog属性在AMO中使用implement this。捕获日志收集您要运行的语句,然后ExecuteCaptureLog来运行它们。 ExecuteCaptureLog上的第二个参数表示这些进程是否将并行运行。

static public XmlaResultCollection RunWithCaptureLog(Server server, string dbName)
{
    if ((svr != null) && (svr.Connected))
    {
        svr.CaptureXml = true;

        #region Actions to be captured to an XMLA file  
        foreach (Table table in server.Databases.GetByName(dbName).Model.Tables)
        {
            foreach (Partition partition in table.Partitions){
                partition.RequestRefresh(Microsoft.AnalysisServices.Tabular.RefreshType.Full);
            }
        }
        #endregion

        svr.CaptureXml = false;

        //public Microsoft.AnalysisServices.XmlaResultCollection ExecuteCaptureLog (bool transactional, bool parallel, bool processAffected)
        return svr.ExecuteCaptureLog(true, true, true);

    }
}