Powershell, um SQL Server-Speicherzähler abzurufen und Wert anzuzeigen

9

Ich schreibe ein Powershell-Skript, um die folgenden SQL Server-Zähler zu erfassen:

SQL Server: Speichermanager: Gesamter Serverspeicher (KB)

SQL Server: Speichermanager: Zielserverspeicher (KB)

Mein Computer verfügt über 3 Instanzen von SQL-Servern. Daher möchte ich, dass dieses Skript alle Zähler dynamisch erfasst und den Wert nur für 1 Beispiel meldet. Ich habe versucht, Folgendes zu schreiben:

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

Schließlich möchte ich dies auf mehreren Servern mit -computernameParametern ausführen und daher möchte ich, dass es dynamisch erfasst wird.

Kann mir bitte jemand helfen, herauszufinden, was fehlt? Das folgende Skript wird genau ausgeführt:

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) 
}

Danke im Voraus

Manjot
quelle

Antworten:

7

Aaron Bertrand hat einen guten Beitrag darüber geschrieben, der ziemlich detailliert ist ... Wie ich PowerShell verwende, um Leistungsindikatordaten zu sammeln .

Dann hat Laerte Junior einen hervorragenden Überblick darüber, wie er die gewünschten Zähler in einem Simple-Talk-Artikel findet: Sammeln von Perfmon-Daten mit Powershell . Hier möchten Sie möglicherweise beginnen. Es hat einige Cmdlets, mit denen er die Zähler für eine bestimmte Instanz erfasst, glaube ich.

EDIT: Sehen Sie, ob dies das ist, was Sie brauchen:


$listofmetrics = (Get-Counter -ListSet "*Databases" -ComputerName $hostname).Counter | Where {$_ -like "*\Transactions/sec"}
$listofmetrics | Get-Counter

Edit2 -ComputerName hinzugefügt


quelle
Danke dafür ... Aber das Hauptproblem, das ich habe, ist das Hinzufügen zusätzlicher Filter zu den Zählern, z. B. wenn ich Folgendes ausführe: $ listOfMetrices = (Get-Counter -ListSet "* Databases" -ComputerName $ Hostname | where {$ _. Pfade -ähnlich "* \ transaction / sec"}) $ listOfMetrices | get-counter Zeigt mir alle Zähler unter der Datenbankkategorie an ... aber was ich wirklich sehen möchte, sind Transaktionen / Sek. für jede Datenbank. Bitte helfen Sie
Manjot
angepasste Antwort.
Danke Shawn, ich habe versucht, den von Ihnen aktualisierten Code zu verwenden. Es können jedoch derzeit keine Zähler gefunden werden. (Get-Counter -ListSet "* Databases"). Counter | Wobei {$ _-like "* \ Transactions / sec"} keinen Zähler findet.
Vielen
Ja wirklich? Mit welcher Version von SQL Server arbeiten Sie? Ich habe dies nur auf einem Windows Server 2008 R2, SQL Server 2008 R2 versucht.
1
Ich habe es auch gerade auf meinem Windows Server 2003, SQL 2005 versucht und es gibt einen einzelnen Zähler zurück: \ SQLServer: Databases (*) \ Transactions / sec
0

Überprüfen Sie dies heraus:

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

Dadurch wird eine Liste der Datenbanken und der zugehörigen \ Transactions / sec ausgegeben. Zu Beginn der Suche werden Fehler auf meiner Seite angezeigt, aber ich gehe davon aus, dass es sich um ein Berechtigungsproblem handelt. Ansonsten funktioniert es wie eine Schönheit. Sie können Regex verwenden, um es zu bereinigen, wenn Sie möchten :)

Ken J.
quelle