SQL SERVER’DA RAM DOWNGRADE (MAX SERVER MEMORY)
Sunucu performansı, CPU, Bellek, RAM ve Depolama yapılandırmaları gibi çeşitli faktörlere bağlıdır. SQL Server, işletim sisteminin üstünde çalışır ve bu kaynaklarla yakından çalışır.
SQL Server izin verdiğiniz kadar bellek tüketir. SQL Server’a 24 GB bellek verirseniz, SQL Server 24 GB belleği kullanmak için elinden geleni yapacaktır. Bu durum karşınızda bize sunulan özelliklerin detayından biri de max server memory, yani max sunucu belleğidir.
Max server memory , sanal olarak veri sayfalarını ve yordam önbelleğinin depoladığı bellektir. Max bellek oranının sunuculardaki varsayılan değeri 2147483647 MB şeklindedir. Ancak bu değer; tek başına SQL server çalışırken problem olmasa da sunucu üzerinde başka bir uygulama çalışması durumunda sağlıklı olmayacaktır ve kaynak tüketimine neden olacaktır. Bu durumun önüne geçmek için Server’da Ram kapasitesine göre memory üzerinden yapılandırma uygulanabilir.
Physical RAM MaxServerMem Setting |
2GB 1500 |
4GB 3200 |
6GB 4800 |
8GB 6400 |
12GB 10000 |
16GB 13500 |
24GB 21500 |
32GB 29000 |
48GB 44000 |
64GB 60000 |
72GB 68000 |
96GB 92000 |
128GB 124000 |
Nitekim bu yapılandırmalar sırasında max server memory düzenlemesi yapılırken vereceğimiz değerin belleğe göre küçük olması bize problem oluşturabilir. Bu durumda izlenecek yöntem sunucu üzerinden yeniden düzenleme ile configure edilir. Ancak bu hususta server bize failed olarak dönüş sağlar ve SQL hizmeti başaltılamaz.
Örneğin; kendi lokalimizde max server memory değerini kontrol edelim ve bu değeri 200 mb yapalım. (Bu denemeyi kesinlikle primary ve secondry olarak kullanılan sunucularınızda uygulamayınız!)
Max server memory değerini 200 mb yapmamız durumuna server aşağıda yer alan yetersiz bellek hatasını verecektir ve login uyguladığınız mb kapasitesine göre login olmanız dahi engellenecektir.
Bu durum karşısında sunucu cevap vermeyeceği için çözüm olarak izlenilen yollardan pratik olanı server sunucusunu kapatmak ve sistem üzerinden SQL Server Servisini açarak çalışır durumda olan state modları durdurmaktır.
Her sunucu aynı stop işlemini veremeyebilir, eğer ki sunucu durdurulmaz ve çalışıyor ise serveri kill etmeniz gerekir. Bu işlem PC hizmetlerinde durduruluyor şeklinde görünmektedir.
Durdurulması için ilgili sqlservr.exe’yi görev yöneticisinden sonlandırma işlemi yapabilirsiniz. Ancak durmaya devam eden Windows hizmeti nedeniyle sorun devam ederse komut dizini ile kill edilmelidir. Bunun için başlattan run ederek cmd’yi ya da direkt komut istemini çalıştırın ve bu sırada servisten SQL Server hizmet adını kontrol edin.
Ardından cmd’ ye dönerek aşağıdaki kodu koplayın ve çalıştırın, burada hizmetin PID kodu ekranımıza gelecektir.
sc queryex MSSQLSERVER
Daha sonra elde edilen PID numarası ile aşağıdaki yöntemi çalıştırın.
taskkill /f /pid [PID]
İşlemi başarıyla tamamladığınızda The process with PID XXXX has been terminated mesajını alacaksınız.
Şayet komut istemi ile işlem gerçekleşmediyse Windows PowerShell yöntemi ile de hizmeti durdurmaya çalışabiliriz. Bunun için başlat menüsünde sağ tık yaparak gelen panelden Windows PowerShell (yönetici) ‘i çalıştırın.
Açılan panelde aşağıdaki komutu çalıştırın.
Get-WmiObject -Class win32_service | Where-Object {$_.state -eq ‘stop pending’}
Bu sayede durma durumundaki hizmetlerin bir listesini gelecektir. Buna gelen listeyi Stop-Process cmdlet komutu ile sonlandırabilirsiniz.
Server sonlandırma başarılı olduktan sonra sunucuyu restart edebiliriz.
SQL durdurulduğunda, minimum konfigürasyon anlamına gelen f parametresi ile başlamamız gerekiyor. Bunun için Komut istemini yönetici olarak açmamız ve aşağıdaki satırda yer aldığı şekilde çalıştırma işlemini gerçekleştirmeliyiz.
NET START MSSQLSERVER /f /mSQLCMD
Bu işlem bize serverın başlatılmasını sağlar ancak bunu durdurduğumuz yerden yani maneger’ dan da uygulayabiliriz.
Server’ı tekrar etkinliştirdikten sonra yeniden Microsoft Sql Server’ı çalıştırarak login olabiliriz. Server’ a bağlandıktan sonra Server proporties’e giriş yaparak max server memory değerini düzelterek bellek kapasitesini yeniden onarabiliriz.
İnce ayrıntı burada Server’daki aynı değer değil Server’ın Fiziksel RAM’ine göre yukarıda belirttiğimiz Tablo 1 de yer alan MaxServerMem Setting değeri verilmelidir ya da kapasiteye uygun bir aralık verilebilir.
Sonuç olarak DB tekrardan aktif olmuştur ve kullanılabilir.