PowerShell para obter contadores de memória do servidor sql e mostrar o valor

9

Estou escrevendo um script do PowerShell para capturar os seguintes contadores do SQL Server:

SQL Server: Gerenciador de memória: memória total do servidor (KB)

SQL Server: Gerenciador de memória: memória do servidor de destino (KB)

Minha máquina possui 3 instâncias de servidores SQL, portanto, desejo que esse script capture todos os contadores dinamicamente e relate o valor para apenas 1 amostra. Eu tentei escrever o seguinte:

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

eventualmente, eu quero executar isso em vários servidores com -computernameparâmetro e, portanto, quero que ele capture dinamicamente.

Alguém pode me ajudar a encontrar o que está faltando? A seguir está o script exato que estou executando:

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

desde já, obrigado

Manjot
fonte

Respostas:

7

Aaron Bertrand escreveu uma boa publicação bastante detalhada ... Como eu uso o PowerShell para coletar dados do Contador de Desempenho .

Então Laerte Junior faz um excelente passeio sobre como encontra os contadores que deseja em um artigo do Simple-Talk: Reunindo dados do Perfmon com o Powershell . Pode ser onde você deseja começar. Ele tem alguns cmdlets que ele usa para capturar os contadores para uma instância específica que acredito.

EDIT: veja se é isso que você precisa:


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

Edit2 Adicionado -ComputerName


fonte
obrigado por isso ... Mas o principal problema que estou tendo é adicionar filtros adicionais aos contadores, por exemplo, se eu executar o seguinte: $ listOfMetrices = (Get-Counter -ListSet "* Databases" -ComputerName $ Hostname | where {$ _. caminhos - como "* \ transaction / s"}) $ listOfMetrices | get-counter Ele me mostra todos os contadores na categoria banco de dados ... mas o que realmente quero ver é transações / s para cada banco de dados. Por favor ajude
Manjot
resposta ajustada.
Obrigado Shawn, tentei usar o código que você atualizou. mas, não é possível encontrar nenhum contador agora. (Get-Counter -ListSet "* Databases"). Counter | Onde {$ _-like "* \ Transactions / s"} não encontra nenhum contador. obrigado pelo seu tempo
Manjot
mesmo? Com qual versão do SQL Server você está trabalhando? Eu tentei isso apenas em um Windows Server 2008 R2, SQL Server 2008 R2.
11
Também tentei no meu Windows Server 2003, SQL 2005 e ele retorna um único contador de: \ SQLServer: Databases (*) \ Transactions / s
0

Veja isso:

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

Isso produzirá uma lista de bancos de dados e seus \ Transactions / s associados. Estou recebendo erros do meu lado no início da pesquisa, mas presumo que seja um problema de permissão. Caso contrário, funciona como uma beleza. Você pode usar o Regex para limpá-lo, se quiser :)

Ken J
fonte