SQL Server Performans İzleme Komut Dosyası Nasıl Oluşturulur
Microsoft SQL Server, kaynak açısından en yoğun sunucu uygulamalarından biri olabilir. Takip etmenize yardımcı olması için PowerShell ile bir SQL Server performans izleme betiği oluşturmalısınız!
SQL Server Linux'ta da çalışabilir ancak ne yazık ki Windows'ta bulunan performans sayacı sistemine sahip değilsiniz.
Windows, işletim sisteminin yanı sıra performans sayaçları olarak bilinen diğer birçok uygulamaya ilişkin çeşitli performans ölçümleri hakkında bilgi edinmek için harika bir kaynak oluşturmuştur.
Windows Performans İzleyicisi, birçok BT uzmanının temel öğesidir. Windows Performans İzleyicisi, performans istatistiklerini görsel olarak görmek için harika bir araç olmasına rağmen, otomasyon için mutlaka mükemmel değildir. PowerShell'in devreye girdiği yer burasıdır.
Performans istatistiklerini sorgulamak için PowerShell'i kullanarak bu sayıları, veritabanlarını otomatik olarak daha hızlı depolamaya taşıma, otomatik olarak ek CPU, bellek vb. ekleme kararları verme gibi diğer işlevler için tetikleyici olarak kullanabilirsiniz.
Bu makalede, SQL için en yaygın performans ölçümlerinden bazılarını ve bunların PowerShell ile nasıl sorgulanacağını gözden geçirelim.
Get-Counter'ı kullanma
En rahat kullanacağınız PowerShell cmdlet'i Get-Counter'dur. Get-Counter, Windows'tan istediğiniz sayıda performans ölçümünü sorgulamanıza olanak tanıyan bir cmdlet'tir. Kendi başına çalıştırdığınızda çeşitli ortak performans sayaçlarının ve bunların mevcut değerlerinin bir listesini alırsınız.
Get-Counter, parametresiz olarak kullanılır ve yerel bilgisayarı sorgular. Bir SQL sunucusunu sorgulayacağımız için uzak SQL sunucunuzu belirtmek için BilgisayarAdı parametresini kullanın.
PS> Get-Counter -ComputerName SQLSRVGet-Counter'ı yalnızca BilgisayarAdı parametresini kullanarak çalıştırdığınızda, cmdlet muhtemelen görmek istediğiniz şey olmayan varsayılan bir sayaç kümesi döndürür.
SQL Server Performans Sayaçlarını Bulma
Get-Counter aynı sayaç değerlerini döndürecektir. Ancak SQL sunucusu için önemli olan bazı sayaçları arayacağız. Şunları sorgulayacağız:
- Ortalama CPU Sıra Uzunluğu
- Ortalama Disk Sıra Uzunluğu
- Bellek Sayfaları/Sn
- Mandal Bekleme Süresi
- Arabellek Sayfası Ömrü Beklentisi
- Ortalama Kilit Bekleme Süresi.
Bu sayaçların her birinin mevcut değerlerini elde etmek için öncelikle bunların hangi kümede olduğunu ve özel adını belirlememiz gerekir. Birden fazla örneğin kullanılabildiği herhangi bir ölçümde, mevcut tüm örneklerin ortalamasını almak için yıldız işareti kullanıyorum veya tüm örneklerin toplamını almak için _total kullanıyorum.
- Ortalama CPU Sıra Uzunluğu=\Sistem\İşlemci Sıra Uzunluğu
- Ortalama Disk Sıra Uzunluğu=\PhysicalDisk()\Avg. Disk Sıra Uzunluğu
- Bellek Sayfaları/Sn=\Bellek\Sayfalar/sn
- Kilitleme Bekleme Süresi=\SQLServer:Latches\Ortalama Kilitleme Bekleme Süresi (ms)
- Arabellek Sayfası Yaşam Beklentisi=\SQLServer:Buffer Manager\Page yaşam beklentisi
- Ortalama Kilit Bekleme Süresi=\SQLServer:Locks(_total)\Ortalama Bekleme Süresi (ms)
Artık doğru sayaç adlarını tanımladığımıza ve sayaçların bir parçası olduğu sayaç kümelerine sahip olduğumuza göre, artık bir SQL Server performans izleyicisi oluşturmak için bazı PowerShell kodlarını bir araya getirmeye başlayabiliriz.
SQL Performans Sayaçlarını Sorgulama
Performansın genel bir resmini elde etmek ve sayaçlardan herhangi birinde tek seferlik bir artış olasılığını ortadan kaldırmak için sayaçların her birini on kez sorgulayacağım. Bir saniyelik varsayılan örnek aralığını kullanacağım, bu da her sayacı on saniye içinde on kez sorgulayacağım anlamına geliyor. Bu bana her sayacı tek bir kez sorgulamaktan daha gerçekçi bir sayı vermeli.
Bunu yapmak için Get-Counter üzerinde MaxSamples parametresini kullanacağım. Bu, her sayacın maksimum kaç kez sorgulanacağını belirlememe olanak tanıyacak. Tüm bu rakamları toplayacağım ve işim bittiğinde her birinin ortalamasını alacağım.
Yalnızca değerleri istediğim ve biçimlendirmeyi pek umursamadığım için doğrudan CounterSamples özelliğini ve bunun bir parçası olarak da CookedValue özelliğini belirteceğim. Bu bana yalnızca gerçek tamsayı değerlerini verir.
Birden fazla performans sayacını sorgulayacağım için bunları dizi halinde gruplandırmak iyi bir uygulamadır. Bunu aşağıda yaptım ve ona $counters değişkenini atadım. Sayacın "kolay" adını ve gerçek sayaç adını içeren karma tabloları kullanmayı seçtim. Daha sonra foreach döngüsüyle okuyabileceğim bir şeyim var.
$counters = @(
@{
'Name' = 'Avg. CPU Queue Length'
'CounterName' ='\System\Processor Queue Length'
}
@{
'Name' = 'Avg. Disk Queue Length'
'CounterName' ='\PhysicalDisk()\Avg. Disk Queue Length' }
@{
'Name' = 'Memory Pages/Sec'
'CounterName' = '\Memory\Pages/sec'
}
@{
'Name' = 'Latch Wait Time'
'CounterName' ='\SQLServer:Latches\Average Latch Wait Time (ms)' }
@{
'Name' = 'Buffer Page Life Expectancy'
'CounterName' ='\SQLServer:Buffer Manager\Page life expectancy' }
@{
'Name' = 'Average Lock Wait Time'
'CounterName' ='\SQLServer:Locks(_total)\Average Wait Time (ms)'
}
)Hashtable dizisini tanımladıktan sonra her sayacı okumaya başlayacağım, on örneğin tamamını toplayacağım ve ortalama değeri sayaç örneğinin kendisine ekleyeceğim.
Son olarak çıktının gerekirse başka amaçlarla kolayca kullanılabilmesi için özel bir PowerShell nesnesi oluşturuyorum.
$sqlServerName = 'LABSQL'
foreach ($counter in $counters) {
$values = (Get-Counter -ComputerName $sqlServerName -Counter $counter.CounterName -MaxSamples 10).CounterSamples.CookedValue
$counter.Add('Value', ($values | Measure-Object -Average).Average)
[pscustomobject]$counter
}Yukarıdaki kod parçacığını çalıştırdığınızda, Get-Counter'ın $counters dizisinde tanımlanan sayaçların her birini sorgulayacağını ve değerleri döndüreceğini göreceksiniz. Her yineleyici ($counter) bir karma tablosu olduğundan, komut dosyası daha sonra Value adlı bir özellik ekliyor ve değerlerin ortalamasını alıyor.
Her sayaç değerinin ortalamasını temsil eden tek bir Value özelliğine sahip tek bir pscustomobject nesnesi elde edersiniz.
Bu bize SQL sunucumuz için performans sayacı istatistiklerini gösteren güzel bir rapor elde etmemizi sağlar!
Özet
PowerShell'de performans sayaçlarıyla çalışmanın oldukça basit olduğunu görebilirsiniz. Benim için en zor kısım sayaç adlarını kendileri bulmaya çalışmaktı! Şimdi burada gösterilen SQL Server performans izleme komut dosyasının başlangıcını alın ve genişletin!