powershell para obtener contadores de memoria del servidor sql y mostrar valor


9

Estoy escribiendo un script de PowerShell para capturar los siguientes contadores del servidor SQL:

SQL Server: Administrador de memoria: Memoria total del servidor (KB)

SQL Server: Administrador de memoria: Memoria del servidor de destino (KB)

Mi máquina tiene 3 instancias de servidores SQL, por lo que quiero que este script capture todos los contadores dinámicamente e informe el valor solo para 1 muestra. Traté de escribir lo siguiente:

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

Finalmente, quiero ejecutar esto en varios servidores con -computernameparámetros y, por lo tanto, quiero que capture de forma dinámica.

¿Alguien puede ayudarme a encontrar lo que falta? El siguiente es el script exacto que estoy ejecutando:

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

gracias por adelantado

Respuestas:


7

Aaron Bertrand escribió una buena publicación que es bastante detallada ... Cómo uso PowerShell para recopilar datos del Contador de rendimiento .

Luego, Laerte Junior tiene un excelente recorrido sobre cómo encuentra los contadores que quiere en un artículo de Simple-Talk: Recopilación de datos de Perfmon con Powershell . Esto podría ser donde quieres comenzar. Creo que tiene algunos cmdlets que usa para capturar los contadores para una instancia en particular.

EDITAR: vea si esto es lo que necesita:


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

Edit2 Agregado -ComputerName


gracias por esto ... Pero el principal problema que tengo es agregar filtros adicionales a los contadores, por ejemplo, si ejecuto lo siguiente: $ listOfMetrices = (Get-Counter -ListSet "* Bases de datos" -ComputerName $ Hostname | donde {$ _. rutas como "* \ transacciones / seg"}) $ listOfMetrices | get-counter Me muestra todos los contadores en la categoría de base de datos ... pero lo que realmente quiero ver es transacciones / segundo para cada base de datos. Por favor ayuda
Manjot

respuesta ajustada

Gracias Shawn, intenté usar el código que actualizaste. pero no puede encontrar ningún contador ahora. (Get-Counter -ListSet "* Bases de datos"). Counter | Donde {$ _-like "* \ Transactions / sec"} no encuentra ningún contador. gracias por su tiempo
Manjot

¿De Verdad? ¿Con qué versión de SQL Server está trabajando? Solo probé esto en un Windows Server 2008 R2, SQL Server 2008 R2.

1
También acabo de probar en mi Windows Server 2003, SQL 2005 y devuelve un solo contador de: \ SQLServer: Databases (*) \ Transactions / sec

0

Mira esto:

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

Esto generará una lista de bases de datos y sus \ Transacciones / seg asociadas. Recibo errores de mi parte al comienzo de la búsqueda, pero supongo que es un problema de permisos. De lo contrario, funciona como una belleza. Puedes usar Regex para limpiarlo si quieres :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.