powershell per ottenere contatori di memoria del server sql e mostrare valore


9

Sto scrivendo uno script PowerShell per acquisire i seguenti contatori del server SQL:

SQL Server: Memory Manager: Total Server Memory (KB)

SQL Server: Memory Manager: Target Server Memory (KB)

La mia macchina ha 3 istanze di server SQL, quindi voglio che questo script acquisisca tutti i contatori in modo dinamico e riporti il ​​valore solo per 1 campione. ho provato a scrivere quanto segue:

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

alla fine voglio eseguire questo su più server con -computernameparametro e quindi voglio che acquisisca in modo dinamico.

Qualcuno può aiutarmi a trovare ciò che manca? Di seguito è riportato lo script esatto che sto eseguendo:

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

Grazie in anticipo

Risposte:


7

Aaron Bertrand ha scritto un buon post su di esso che è piuttosto dettagliato ... Come uso PowerShell per raccogliere i dati del contatore delle prestazioni .

Quindi Laerte Junior fa un'eccellente spiegazione di come trova i segnalini che desidera in un articolo di Simple-Talk: Raccogliere dati di Perfmon con Powershell . Questo potrebbe essere il punto in cui vuoi iniziare. Presenta alcuni cmdlet che utilizza per acquisire i contatori per un'istanza particolare, credo.

EDIT: vedi se questo è quello che ti serve:


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

Modifica2 Aggiunto -NomeComputer


grazie per questo ... Ma il problema principale che sto riscontrando è l'aggiunta di filtri aggiuntivi ai contatori, ad esempio se eseguo quanto segue: $ listOfMetrices = (Get-Counter -ListSet "* Database" -ComputerName $ Nome host | dove {$ _. percorsi -like "* \ transazioni / sec"}) $ listOfMetrices | get-counter Mi mostra tutti i contatori nella categoria database ... ma quello che voglio davvero vedere sono le transazioni al secondo per ogni database. Per favore
aiutatemi

risposta corretta.

Grazie Shawn, ho provato a usare il codice che hai aggiornato. ma ora non è in grado di trovare alcun segnalino. (Get-Counter -ListSet "* Database"). Contatore | Dove {$ _ -like "* \ Transactions / sec"} non trova alcun contatore. grazie per il tuo tempo
Manjot

veramente? Con quale versione di SQL Server stai lavorando? Ho provato questo solo su un Windows Server 2008 R2, SQL Server 2008 R2.

1
Ho anche appena provato sul mio Windows Server 2003, SQL 2005 e restituisce un singolo contatore di: \ SQLServer: Database (*) \ Transactions / sec

0

Controllalo:

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

Verrà visualizzato un elenco di database e i relativi \ Transazioni / sec associati. Ricevo errori dalla mia parte all'inizio della ricerca, ma presumo sia un problema di autorizzazioni. Altrimenti funziona come una bellezza. Puoi usare Regex per ripulirlo se ti piace :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.