PowerShell untuk mendapatkan penghitung memori server sql dan menunjukkan nilai

9

Saya menulis skrip PowerShell untuk menangkap penghitung SQL server berikut:

SQL Server: Memory Manager: Total Server Memory (KB)

SQL Server: Memory Manager: Target Server Memory (KB)

Mesin saya memiliki 3 contoh SQL server, jadi saya ingin skrip ini menangkap semua penghitung secara dinamis dan melaporkan nilai untuk 1 sampel saja. Saya mencoba menulis yang berikut ini:

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

akhirnya saya ingin menjalankan ini di beberapa server dengan -computernameparameter dan karenanya saya ingin menangkapnya secara dinamis.

Adakah yang bisa membantu saya menemukan apa yang hilang? Berikut ini adalah skrip persis yang saya jalankan:

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

Terima kasih sebelumnya

Manjot
sumber

Jawaban:

7

Aaron Bertrand menulis posting yang bagus tentang itu yang cukup rinci ... Bagaimana saya menggunakan PowerShell untuk mengumpulkan data Penghitung Kinerja .

Kemudian Laerte Junior memiliki pengalaman yang sangat baik tentang bagaimana dia menemukan penghitung yang dia inginkan dalam artikel Simple-Talk: Mengumpulkan Data Perfmon dengan Powershell . Ini mungkin tempat Anda ingin memulai. Ia memiliki beberapa cmdlet yang ia gunakan untuk menangkap penghitung untuk contoh tertentu yang saya percaya.

EDIT: Lihat apakah ini yang Anda butuhkan:


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

Edit2 Ditambahkan -ComputerName


sumber
terima kasih untuk ini ... Tapi masalah utama yang saya hadapi adalah menambahkan filter tambahan ke penghitung mis. Jika saya menjalankan yang berikut: $ listOfMetrices = (Get-Counter -ListSet "* Databases" -ComputerName $ Hostname | mana {$ _. pathslike "* \ transaction / sec"}) $ listOfMetrices | get-counter Ini menunjukkan kepada saya semua penghitung di bawah kategori basis data ... tetapi yang benar-benar ingin saya lihat adalah transaksi / detik untuk setiap basis data. Tolong bantu
Manjot
jawaban yang disesuaikan.
Terima kasih Shawn, saya mencoba menggunakan kode yang Anda perbarui. tetapi, sekarang tidak dapat menemukan penghitung apa pun. (Get-Counter -ListSet "* Databases"). Counter | Di mana {$ _ -seperti "* \ Transaksi / detik"} tidak menemukan penghitung. terima kasih atas waktu Anda
Manjot
Betulkah? Versi SQL Server apa yang Anda gunakan? Saya hanya mencoba ini di Window Server 2008 R2, SQL Server 2008 R2.
1
Saya juga baru saja mencoba di Window Server 2003, SQL 2005 dan mengembalikan satu counter: \ SQLServer: Database (*) \ Transactions / sec
0

Lihat ini:

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

Ini akan menampilkan daftar database dan terkait \ Transaksi / dtk. Saya mendapatkan kesalahan di sisi saya pada awal pencarian tetapi saya menganggap itu masalah izin. Kalau tidak, itu bekerja seperti keindahan. Anda bisa menggunakan Regex untuk membersihkannya jika mau :)

Ken J
sumber