SSAS: Powershell: Raport o wielkości baz danych

12-Wrz-2018

W świecie SQL do raportu dotyczącego wielkości baz danych, zupełnie naturalne jest wykorzystanie poleceń języka TSQL.

W świecie SSAS odpowiednikiem tego języka jest XMLA. Czy to nie dziwne, że polecenia/zapytania buduje się w XML. No cóż – tak to ktoś wymyślił i nie zmienimy tego. Na pewno nie da się do SSAS wysłać zapytania SQL.

Co w takim razie zrobić kiedy trzeba zaraportować wielkość baz danych w SSAS? Z pomocą przyjdzie moduł, za pomocą którego można w bardzo prosty sposób (jeśli choć trochę się zna powershella) wysłać zapytanie do SSAS i skonsumować wynik w postaci obiektów o intuicyjnych właściwościach. Oto funkcja, która pobiera informacje o bazach danych SSAS i raportuje ich rozmiar i status:

function Get-SSASDBSize
{
    param($ServerName="localhost")
    $loadInfo = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")

    $server = New-Object Microsoft.AnalysisServices.Server
    $server.connect($ServerName)
    if ($server.name -eq $null) {
     Write-Output ("Server '{0}' not found" -f $ServerName)
     return
    }

    foreach ($d in $server.Databases )
    {
     Write-Output ( "{0}; {1}; {2};  {3}MB" -f $ServerName, $d.Name, $d.State, ($d.EstimatedSize/1024/1024).ToString("#,##0") )
    } 
}

Prawda, że krótkie? Po kolei:

  1. funkcja przyjmuje tylko jeden parametr – nazwę serwera SSAS
  2. na początku ładuje namespace – czyli bibliotekę pozwalającą wykonywać operacje na SSAS
  3. następnie tworzy obiekt $server, który łączy się do konkretnej instancji SSAS
  4. gdyby coś poszło nie tak, to funkcja kończy się
  5. a jeśli wszystko się udało, to wykonujemy iterację po bazach danych
  6. dla każdej z nich wyświetlamy nazwę serwera, nazwę bazy, status bazy i jej rozmiar

A jak wywołać tą funkcję? Też prosto:

$list = 'server1','server2','server3'
foreach ($s in $list)
{
    Get-SSASDBSize $s
}

i raporcik gotowy!

Dodaj komentarz:

Autor: Rafał Kraik