SSAS
October 9, 2021

Балансировка нагрузки на сервер SSAS. Синхронизация схем

Архитектура крупных моделей SSAS зиждется на работе нескольких серверов. Пользователь отправляет запрос к базе, а балансировщик нагрузки решает на какой сервер его отправить. В связи с этим возникает проблема поддержки актуальной, единой информации модели на каждом сервере.

К сожалению, нет механизма автоматической синхронизации схем и данных модели между серверами. Реализация лежит на плечах разработчика.

Ниже представлены полезные скрипты для поддержания актуальной схемы данных на разных серверах одной модели

Скрипт PowerShell для копирования схемы модели с сервера источника на целевой сервер:

  $assembly = [System.Reflection.Assembly]
  $assembly::LoadWithPartialName("Microsoft.AnalysisServices.Tabular") > $null
        
  $serverNameSRC = "SuorceServer"
  $serverNameTag = "TargetServer"
  $dbName = "SSASDBname"      
  # connect to source server
  $svrSRC = new-Object Microsoft.AnalysisServices.Tabular.Server
  $svrSRC.Connect($serverNameSRC)
  $dbSRC = $svrSRC.Databases[$dbName ]
       # connect to target server
  $svrTag = new-Object Microsoft.AnalysisServices.Tabular.Server
  $svrTag.Connect($serverNameTAG)

  $script = [Microsoft.AnalysisServices.Tabular.JsonScripter]::ScriptCreateOrReplace($dbSRC)  
  $svrTag.Execute($script)

  $svrSRC.Disconnect()
  $svrTag.Disconnect()

Скрипт JSON для синхронизации моделей (можно вставить в job):

{   
   "synchronize":{   
      "database":"name_TargetDB",  
      "source":"ConnectionString_SourceDB",  
      "synchronizeSecurity":"copyAll",  
      "applyCompression":true
   }  
}

Пример шага задания синхронизации:

в SSMS можно синхронизировать только 1 куб. Если моделей больше, можно написать скрипт на powershell, который последовательно синхронизирует все модели. Дополнительно возможно проверять отличие последней даты обновления. если она разная, то запускать синхронизацию, иначе нет.