PowerShell, aby uzyskać liczniki pamięci serwera SQL i wyświetlić wartość

9

Piszę skrypt PowerShell do przechwytywania następujących liczników serwera SQL:

SQL Server: Menedżer pamięci: Całkowita pamięć serwera (KB)

SQL Server: Menedżer pamięci: Pamięć serwera docelowego (KB)

Moja maszyna ma 3 instancje serwerów SQL, więc chcę, aby ten skrypt przechwytywał wszystkie liczniki dynamicznie i raportował wartość tylko dla 1 próbki. próbowałem napisać następujące:

Get-counter -List *SQL*Memory* | Select paths, counter | format-list # doesn't display full list

Get-counter -List *SQL*Memory* | Select paths, counter | where {_.counter -like "*server memory*"} |format-list # displays nothing

ostatecznie chcę uruchomić to na wielu serwerach z -computernameparametrem, a zatem chcę, aby przechwytywał to dynamicznie.

Czy ktoś może mi pomóc w znalezieniu tego, czego brakuje? Oto dokładny skrypt, który uruchamiam:

Function checkTransactionsPerSecond([string] $Hostname )
{ 
    (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"} #this returns nothing
#   $listofmetrics = (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"}
#   $listofmetrics | Get-Counter
}

clear


foreach ($Hostname in Get-Content "D:\TEMP\machines.txt")
{
    Write-Host $Hostname
    checkTransactionsPerSecond($Hostname) 
}

z góry dziękuję

Manjot
źródło

Odpowiedzi:

7

Aaron Bertrand napisał na nim dobry post, który jest dość szczegółowy ... Jak używam PowerShell do zbierania danych licznika wydajności .

Następnie Laerte Junior doskonale omawia, w jaki sposób znajduje liczniki, których chce, w artykule w Simple-Talk: Zbieranie danych Perfmon za pomocą Powershell . To może być miejsce, od którego chcesz zacząć. Ma kilka poleceń cmdlet, których używa do przechwytywania liczników dla określonej instancji.

Sprawdź, czy tego potrzebujesz:


$listofmetrics = (Get-Counter -ListSet "*Databases" -ComputerName $hostname).Counter | Where {$_ -like "*\Transactions/sec"}
$listofmetrics | Get-Counter
Aaron Bertrand
źródło
dzięki za to ... Ale głównym problemem, jaki mam, jest dodanie dodatkowych filtrów do liczników, np. jeśli uruchomię: $ listOfMetrices = (Get-Counter -ListSet "* Bazy danych" -ComputerName $ Nazwa hosta | gdzie {$ _. ścieżki podobne do „* \ Transakcje / s”}) $ listOfMetrices | get-counter Pokazuje mi wszystkie liczniki w kategorii bazy danych ... ale tak naprawdę chcę zobaczyć transakcje / s dla każdej bazy danych. Proszę o pomoc
Manjot
skorygowana odpowiedź.
Dzięki Shawn, próbowałem użyć zaktualizowanego kodu. ale nie można teraz znaleźć żadnych liczników. (Get-Counter -ListSet „* Bazy danych”). Licznik | Gdzie {$ _-like "* \ Transactions / sec"} nie znajduje żadnego licznika. dzięki za
Manjot
naprawdę? Z jaką wersją programu SQL Server współpracujesz? Próbowałem tego tylko na Windows Server 2008 R2, SQL Server 2008 R2.
1
Właśnie próbowałem również na moim Windows Server 2003, SQL 2005 i zwraca pojedynczy licznik: \ SQLServer: Bazy danych (*) \ Transakcje / s
0

Spójrz na to:

$listofmetrics = Get-Counter -ListSet "*Databases" | Get-Counter -MaxSamples 1 | Select -ExpandProperty CounterSamples | Where {$_.path -like "\Transactions/sec"} | Select Path, CookedValue

Spowoduje to wyświetlenie listy baz danych i powiązanych z nimi \ Transakcji / s. Na początku wyszukiwania pojawiają się błędy, ale zakładam, że jest to problem z uprawnieniami. W przeciwnym razie działa jak piękno. Możesz użyć Regex, aby go wyczyścić, jeśli chcesz :)

Ken J
źródło