我想使用C# AMO
对象刷新多维数据集分区,刷新分区的同步方式正在正常进行。但是我想并行刷新分区。为此,我尝试通过
Parelle.ForEach()
。
templatePartition.RequestRefresh(Microsoft.AnalysisServices.Tabular.RefreshType.Full);
database.Model.SaveChanges();
但是它给出了以下错误:
无法将修改保存到服务器。返回错误:“由于死锁,锁定操作未成功结束。
因此想检查是否有人使用AMO异步调用来刷新分区。
答案 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);
}
}