PowerShell, чтобы получить счетчики памяти сервера SQL и показать значение

9

Я пишу сценарий powershell для захвата следующих счетчиков SQL-сервера:

SQL Server: диспетчер памяти: общий объем памяти сервера (КБ)

SQL Server: диспетчер памяти: целевая память сервера (КБ)

На моей машине есть 3 экземпляра SQL-серверов, поэтому я хочу, чтобы этот скрипт динамически собирал все счетчики и сообщал значение только для 1 образца. я попытался написать следующее:

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

в конце концов я хочу запустить это на нескольких серверах с -computernameпараметром, и, следовательно, я хочу, чтобы он захватывал динамически.

Может кто-нибудь, пожалуйста, помогите мне найти то, чего не хватает? Ниже приведен точный скрипт, который я запускаю:

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

заранее спасибо

Manjot
источник

Ответы:

7

Аарон Бертран написал хороший пост, довольно подробный ... Как я использую PowerShell для сбора данных счетчика производительности .

Затем Laerte Junior отлично знакомится с тем, как он находит нужные счетчики в статье Simple-Talk: Сбор данных Perfmon с помощью Powershell . Это может быть, где вы хотите начать. У него есть несколько командлетов, которые он использует для захвата счетчиков для конкретного экземпляра, как мне кажется.

РЕДАКТИРОВАТЬ: посмотреть, если это то, что вам нужно:


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

Edit2 Добавлено -ComputerName


источник
спасибо за это ... Но основная проблема, с которой я столкнулся, - это добавление дополнительных фильтров к счетчикам, например, если я запускаю следующее: $ listOfMetrices = (Get-Counter -ListSet "* Databases" -ComputerName $ Hostname | где {$ _. по типу путей "* \ Transactions / sec"}) $ listOfMetrices | get-counter Показывает все счетчики в категории базы данных ... но я действительно хочу увидеть количество транзакций в секунду для каждой базы данных. Пожалуйста, помогите
Manjot
скорректированный ответ.
Спасибо, Шон, я пытался использовать код, который ты обновил. но он не может найти счетчики сейчас. (Get-Counter -ListSet "* Базы данных"). Счетчик | Где {$ _-like "* \ Transactions / sec"} не находит счетчик. спасибо за ваше время
Manjot
действительно? С какой версией SQL Server вы работаете? Я пробовал это только на Windows Server 2008 R2, SQL Server 2008 R2.
1
Я также только что попробовал на моем Windows Server 2003, SQL 2005, и он возвращает один счетчик: \ SQLServer: Databases (*) \ Transactions / sec
0

Проверь это:

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

Это выведет список баз данных и связанных с ними \ транзакций / сек. В начале поиска у меня появляются ошибки, но я предполагаю, что это проблема с разрешениями. В противном случае это работает как красота. Вы можете использовать Regex, чтобы очистить его, если хотите :)

Кен Дж
источник