powerhell, щоб отримати лічильники пам'яті sql сервера та показати значення


9

Я пишу сценарій powerhell для захоплення таких лічильників сервера 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) 
}

Спасибі заздалегідь

Відповіді:


7

Аарон Бертран написав хороший пост про нього, який є досить детальним ... Як я використовую PowerShell для збору даних про лічильник ефективності .

Тоді Лаерте Джуніор продемонстрував відмінну інформацію про те, як він знаходить лічильники, які він хоче, у статті Simple-Talk: Збір даних Perfmon з Powershell . Тут ви можете почати. У ньому є кілька командлетів, які він використовує для зйомки лічильників для певного екземпляра, на який я вважаю.

Подивіться, чи це вам потрібно:


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

дякую за це ... Але головна проблема, з якою у мене виникає, - це додавання додаткових фільтрів до лічильників, наприклад, якщо я запускаю наступні: $ listOfMetrices = (Get-Counter -ListSet "* Бази даних" -ComputerName $ Hostname | де {$ _. шляхи -подібні "* \ транзакції / сек"}) $ listOfMetrices | get-counter Він показує мені всі лічильники під категорією баз даних ... але я дійсно хочу бачити транзакції / сек для кожної бази даних. Будь ласка, допоможіть
Manjot

скоригована відповідь.

Дякую, Шон, я спробував використовувати оновлений код. але, зараз не вдається знайти жодного лічильника. (Get-Counter -ListSet "* Бази даних"). Лічильник | Де {$ _ -like "* \ Операції / сек"} не знайде жодного лічильника. дякую за ваш час
Manjot

справді? З якою версією SQL Server ви працюєте? Я спробував це лише на Window Server 2008 R2, SQL Server 2008 R2.

1
Я також щойно спробував на своєму Windows Window Server 2003, SQL 2005, і він повертає єдиний лічильник: \ SQLServer: Бази даних (*) \ Операції / сек

0

Заціни:

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

Це виведе список баз даних та пов'язані з ними \ Транзакції / сек. Я отримую помилки на своїй стороні на початку пошуку, але я припускаю, що це проблема з дозволом. Інакше це працює як краса. Ви можете використовувати Regex, щоб очистити його, якщо вам подобається :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.