SQLサーバーのメモリカウンターを取得して値を表示するPowerShell


9

次のSQLサーバーカウンターをキャプチャするPowerShellスクリプトを書いています。

SQL Server:メモリマネージャー:合計サーバーメモリ(KB)

SQL Server:メモリマネージャー:ターゲットサーバーのメモリ(KB)

私のマシンにはSQLサーバーの3つのインスタンスがあるため、このスクリプトですべてのカウンターを動的にキャプチャし、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

Aaron Bertrandがかなり詳しい記事を書いています... PowerShellを使用してパフォーマンスカウンターデータを収集する方法

次に、Laerte Juniorは、シンプルなトークの記事「Powershellを使用したPerfmonデータの収集」で、必要なカウンターを見つける方法について詳しく説明しています。ここから始めたいと思うかもしれません。私が信じている特定のインスタンスのカウンターをキャプチャするために彼が使用するいくつかのコマンドレットがあります。

編集: これが必要なものかどうかを確認してください:


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

Edit2が追加されました-ComputerName


このおかげで...しかし、私が抱えている主な問題は、カウンターにフィルターを追加することです。たとえば、次のコマンドを実行した場合:$ listOfMetrices =(Get-Counter -ListSet "* Databases" -ComputerName $ Hostname | where {$ _。パスのような "* \ transactions / sec"})$ listOfMetrices | get-counterデータベースカテゴリのすべてのカウンターが表示されますが、実際に確認したいのは、各データベースのトランザクション/秒です。助けてください
Manjot '08 / 08/31

調整された答え。

Shawnに感謝します。更新したコードを使用してみました。しかし、カウンターを見つけることができません。(Get-Counter -ListSet "* Databases")。Counter | ここで、{$ _ -like "* \ Transactions / sec"}はカウンターを見つけません。お時間をいただきありがとう
ござい

本当に?使用しているSQL Serverのバージョンは何ですか?私はこれをWindow Server 2008 R2、SQL Server 2008 R2でのみ試しました。

1
Window 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

これにより、データベースとそれに関連する\ Transactions / secのリストが出力されます。検索開始時にエラーが発生しましたが、権限の問題だと思います。それ以外の場合は、美しさのように動作します。必要に応じて、Regexを使用してクリーンアップできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.