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.