sql sunucusu bellek sayaçlarını almak ve değeri göstermek için powershell


9

Aşağıdaki SQL sunucu sayaçlarını yakalamak için bir powershell komut dosyası yazıyorum:

SQL Server: Bellek Yöneticisi: Toplam Sunucu Belleği (KB)

SQL Server: Bellek Yöneticisi: Hedef Sunucu Belleği (KB)

Makinemin SQL sunucularının 3 örneği var, bu yüzden bu komut dosyasının tüm sayaçları dinamik olarak yakalamasını ve yalnızca 1 örnek için değeri rapor etmesini istiyorum. aşağıdakileri yazmayı denedim:

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

sonunda bu -computernameparametre ile birden çok sunucu üzerinde çalıştırmak istiyorum ve bu nedenle dinamik olarak yakalamak istiyorum.

Biri eksik olanı bulmamda bana yardımcı olabilir mi? Çalıştırdığım tam komut dosyası aşağıdadır:

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

şimdiden teşekkürler

Yanıtlar:


7

Aaron Bertrand üzerinde oldukça ayrıntılı olan iyi bir yazı yazdı ... Performans Sayacı verilerini toplamak için PowerShell'i nasıl kullanırım .

Daha sonra Laerte Junior, Simple-Talk makalesinde istediği sayaçları nasıl bulduğu konusunda mükemmel bir yürüyüşe sahiptir: Powershell ile Perfmon Verilerini Toplama . Bu, başlamak istediğiniz yer olabilir. İnandığım belirli bir örnek için sayaçları yakalamak için kullandığı bazı cmdlet'leri var.

İhtiyacınız olanın bu olup olmadığına bakın:


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

bunun için teşekkürler ... Ama ana sorun sayaçları ek filtreler ekleyerek örneğin aşağıdaki çalıştırmak eğer: $ listOfMetrices = (Get-Counter -ListSet "* Veritabanları" -BilgisayarAdı $ Hostname | nerede {$ _. yolları benzeri "* \ işlemleri / sn"}) $ listOfMetrices | get-counter Bana veritabanı kategorisi altındaki tüm sayaçları gösterir ... ama gerçekten görmek istediğim her veritabanı için işlemler / sn. Lütfen yardım
Manjot

düzeltilmiş cevap.

Teşekkürler Shawn, güncellediğin kodu kullanmayı denedim. ancak, artık sayaç bulamıyor. (Get-Counter -ListSet "* Veritabanları"). {$ _ -Like "* \ İşlemler / sn"} herhangi bir sayaç bulamaz. zaman ayırdığınız için teşekkürler
Manjot

Gerçekten mi? Hangi SQL Server sürümü ile çalışıyorsunuz? Bunu yalnızca bir Windows Server 2008 R2, SQL Server 2008 R2 üzerinde denedim.

1
Ben de sadece benim Windows Server 2003, SQL 2005 üzerinde denedim ve tek bir sayaç döndürür: \ SQLServer: Veritabanları (*) \ İşlemler / sn

0

Şuna bir bak:

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

Bu, bir veritabanı listesi ve ilişkili \ İşlemler / sn. Arama başlangıcında yanımda hatalar alıyorum ama bunun bir izin sorunu olduğunu varsayıyorum. Aksi takdirde bir güzellik gibi çalışır. İsterseniz temizlemek için Regex kullanabilirsiniz :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.