столкновение с ошибкой. Для нестатического метода требуется цель в SSAS TabularTMSL, скрипт обновления Power Shell

Я пытаюсь обновить табличный куб SSAS, размещенный в Azure, с помощью сценария Power Shell TMSL с помощью Azure Runbooks. Для больших разделов я получаю следующую ошибку: я попытался увеличить тайм-аут для Invoke-ASCmd, даже с неограниченным временем ожидания я столкнулся с этой проблемой .

failed: {"database":"DashboardName","table":"table Name,"partition":"table-CurrentMonth"} - Non-static method requires a target.   at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
   at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
   at Microsoft.AnalysisServices.AadAuthenticator.BuildAadTokenHolderFromAuthenticationResult(Object result, AadAuthParams authParams, String dataSource, Boolean useAdalCache)
   at Microsoft.AnalysisServices.AadAuthenticator.ReAcquireToken(String refreshToken, AadAuthParams authParams, String dataSource, Boolean useAdalCache)
   at Microsoft.AnalysisServices.AadTokenHolder.GetValidAccessToken()
   at Microsoft.AnalysisServices.HttpStream.GetRequestStream(Boolean isNewXmlaRequest)
   at Microsoft.AnalysisServices.HttpStream.WaitForAndUpdateHttpResponseContainingXmlaPayload()
   at Microsoft.AnalysisServices.HttpStream.GetResponseStream()
   at Microsoft.AnalysisServices.HttpStream.GetResponseDataType()
   at Microsoft.AnalysisServices.CompressedStream.GetResponseDataType()
   at Microsoft.AnalysisServices.XmlaClient.EndRequest(Boolean useBinaryXml)
   at Microsoft.AnalysisServices.XmlaClient.SendExecuteAndReadResponse(Boolean skipResults, Boolean throwIfError, Boolean useBinaryXml)
   at Microsoft.AnalysisServices.Core.AnalysisServicesClient.Execute(String command)
   at Microsoft.AnalysisServices.Core.Server.Execute(String command)
   at Microsoft.AnalysisServices.PowerShell.Cmdlets.ExecuteScriptCommand.ExecuteQueryBatch(Server server, String queryStatement)
   at Microsoft.AnalysisServices.PowerShell.Cmdlets.ExecuteScriptCommand.ExecuteQueryBatches(Server server)
   at Microsoft.AnalysisServices.PowerShell.Cmdlets.ExecuteScriptCommand.ExecuteQuery()
   at Microsoft.AnalysisServices.PowerShell.Cmdlets.ExecuteScriptCommand.ProcessRecord()
   at System.Management.Automation.CommandProcessor.ProcessRecord()

Скрипт, используемый для обновления:

$Credential = Get-AutomationPSCredential -Name 'XXXX'
$Objects = @(
    '{"database":"Database Name","table":"tableName","partition":"CurrentMonth"}',  
    '{"database":"Database Name","table":"tableName","partition":"CurrentMonth"}',      
    '{"database":"Database Name","table":"tableName"}',
    '{"database":"Database Name","table":"tableName"}'
)
$QueryPrefix = '{"refresh":{"type":"full","objects":['
$QuerySuffix = ']}}'

for ($i = 0; $i -lt $Objects.Count ; $i++) {

    Sleep -s 5


        $Query = $QueryPrefix + $Objects[$i] + $QuerySuffix

        Invoke-ASCmd -Server "ServerName" -Database "DatabaseName" -Credential $Credential -Query $Query -ConnectionTimeout 0 -QueryTimeout 0   
}

person kanna    schedule 05.06.2018    source источник
comment
То же самое мы наблюдаем и в рабочих процессах. Предположим, что это тоже какая-то ошибка.   -  person Murray Foxcroft    schedule 06.06.2018
comment
Можете ли вы подтвердить, что тайм-аут истекает через ~ 1 час?   -  person Murray Foxcroft    schedule 06.06.2018
comment
Нет, это выдает эту ошибку только за один час   -  person kanna    schedule 06.06.2018
comment
@ Мюррей Фокскрофт, эта ошибка возникает из-за тайм-аута? Я упомянул тайм-аут как 0, это неограниченный тайм-аут   -  person kanna    schedule 06.06.2018
comment
Добавил ответ ниже   -  person Murray Foxcroft    schedule 07.06.2018


Ответы (1)


Да, это потребовало некоторых усилий, чтобы решить эту проблему. У меня была такая же проблема, как и у вас. Вот некоторые из ключевых вопросов, которые помогли мне решить.

В Azure Analysis Services я установил:

  • Таймаут ExternalCommand с 3600 до 10800
  • ServerTimout с 3600 до 10800
  • ExternalConnectionTimeout с 60 до 180
  • Включена диагностика служб Analysis Services, чтобы лучше видеть активность.

Я также тестировал напрямую в PowerShell, то есть без Runbook. У меня такая же ошибка. Затем я увеличил масштабы служб Analysis Services до максимума, чтобы проверить тайм-ауты. Это тоже не подействовало. Я уменьшил его самостоятельно, чтобы избежать финансового краха.

Итак, со службами Analysis Services все в порядке, с Azure и модулями Runbook тоже все в порядке. Я дважды проверил модель. Он тоже был персиковым. Это заставило меня выйти за рамки служб Analysis Services.

Мы подключаем нашу модель к хранилищу данных SQL с терабайтами данных. Я заметил, что обновление модели разрушает хранилище данных, поэтому я увеличил DWU (производительность) хранилища, запросы выполнялись быстрее, и ошибка исчезла.

Короче говоря, за счет уменьшения времени загрузки из нижестоящей системы ошибка исчезла. Проверьте свои источники на наличие длительных запросов и посмотрите, можете ли вы их оптимизировать (или использовать подмножество данных), чтобы увидеть, решит ли это вашу проблему.

person Murray Foxcroft    schedule 06.06.2018