Answered by:
Win2008 server sql ram şişme hatası

Question
-
Sql server'i çalıştırınca ilk başlarda ramda 1,6 gb yer kaplarken gün içerisinde yükseliyor, yükseliyor, bazen bir gün bazen iki gün içerisinde 12 gblere yaklaşıp serverin tüm ramini sömürür hale geliyor. Dolayısıyla servere reset atmak zorunda kalıyoruz. Türkiye geneli 20 şubemizden bağlanılıyor ve nebim üzerinden satış yapılıyor. Sorunu microsoft telefonla destek ekibine sorduk, normalde hiç şişmemesi lazım bir kaç mb artar ama hep yerinde sayar dediler ve buraya konu açarak sormamızı istedikler.
Yardımlarınızı bekliyoruz.
Answers
-
Microsoft'tan kiminle konuştun bilemiyorum, ama SQL Server bölümündeki arkadaşlarla olmadığı kesin! Bu sorunu yaşadığına göre o sunucuların etrafında SQL Server'dan anlayan tek bir kişi yok demektir. Bu nedenle İsmail'in anlattığı şeylerin sadece kafanı karıştıracağını tahmin ediyorum. Sana çok temel olarak ifade edeyim, SQL Server'da iki çeşit hafıza yönetim sistemi vardır.
Birincisi ve varsayılan olanı, Dinamik Hafıza Yönetimidir. Bu yöntemde, SQL Server kullanabildiği kadar çok hafızayı kullanır ve OS veya diğer uygulamaların ihtiyacı olduğunda, ihtiyaç kadar hafızayı boşaltır; sonra tekrar kullanır.
Diğer yöntem ise Statik Hafıza Yönetimidir. Bunda taban ve tavan değerlerini belirlersin ve SQL Server da hafızayı bu değerlere göre kullanır.
Çok temel olarak hafıza yönetimi bu şekildedir. Bu ayarları da SSMS->Server Properties (Instance adının üstünde sağ tuşa tıkla, Properties)->Memory bölümünden veya Query Editor'de "sp_configure" sistem SP'sini kullanarak yapabilirsin. sp_configure'dan "max server memory" ve min server memory" ayarlarını (veya bu değerleri arayüzden) değiştirmen, Statik Hazıfa Yöntemini kullanman için kâfidir. Örneğin biz tüm Production sistemlerimizde (yaşadığın sorunları yaşamamak için) Statik Hafıza Yönetmini kullanırız.
Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com- Proposed as answer by Emre Gunerturk Friday, August 19, 2011 8:07 AM
- Marked as answer by Emre Gunerturk Friday, August 19, 2011 9:27 AM
All replies
-
Merhabalar,
SQL serverda memory management işlemi Lazywriter adlı process tarafından yapılır.Bu process belli zaman aralıkları ile calişip SQL server ve işletim sisteminin memory ye ihtiyacına gore SQL server tarafından kullanılan Memory i yi artırıp azaltır.Fakat Lazywiret sadece İşletim sistemi yeterli memory e sahip değilse sql server process nin kullandıgı memmory miktarını azaltır.Fakat bu azaltmayı yaparken memoryde bulunan execution plan gibi verileri disk e yazar.Fakat bu verilerin disk e yazılması bu verileri erşişimi yavaslatacagı için SQL server bu işlemleri yappıp Memory kullanımını gerekl,i değilse azaltmaz Yani sql server ın bu ram i kullanması çok anormal bir durum olmamakla beraber Memory üzerinde bi anormalik durumunu olcebileceiniz SQL Server Buffer Mgr adlı bir ğparametre var onunda değeri : Lazy Writes/Sec olarak hesaplanıyor.Bu değern cok yuksek olmaması gerekir ki bu değerin yuksek olması demek SQL server ınızın yteri kadar memory si olmadıgına işarettir.
Kolay gelsin
-
-
-
Microsoft'tan kiminle konuştun bilemiyorum, ama SQL Server bölümündeki arkadaşlarla olmadığı kesin! Bu sorunu yaşadığına göre o sunucuların etrafında SQL Server'dan anlayan tek bir kişi yok demektir. Bu nedenle İsmail'in anlattığı şeylerin sadece kafanı karıştıracağını tahmin ediyorum. Sana çok temel olarak ifade edeyim, SQL Server'da iki çeşit hafıza yönetim sistemi vardır.
Birincisi ve varsayılan olanı, Dinamik Hafıza Yönetimidir. Bu yöntemde, SQL Server kullanabildiği kadar çok hafızayı kullanır ve OS veya diğer uygulamaların ihtiyacı olduğunda, ihtiyaç kadar hafızayı boşaltır; sonra tekrar kullanır.
Diğer yöntem ise Statik Hafıza Yönetimidir. Bunda taban ve tavan değerlerini belirlersin ve SQL Server da hafızayı bu değerlere göre kullanır.
Çok temel olarak hafıza yönetimi bu şekildedir. Bu ayarları da SSMS->Server Properties (Instance adının üstünde sağ tuşa tıkla, Properties)->Memory bölümünden veya Query Editor'de "sp_configure" sistem SP'sini kullanarak yapabilirsin. sp_configure'dan "max server memory" ve min server memory" ayarlarını (veya bu değerleri arayüzden) değiştirmen, Statik Hazıfa Yöntemini kullanman için kâfidir. Örneğin biz tüm Production sistemlerimizde (yaşadığın sorunları yaşamamak için) Statik Hafıza Yönetmini kullanırız.
Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com- Proposed as answer by Emre Gunerturk Friday, August 19, 2011 8:07 AM
- Marked as answer by Emre Gunerturk Friday, August 19, 2011 9:27 AM
-
Kullanılan makine hem application server hem de database server olarak çalışıyorsa statik memory ayarını bilinçli yapmanız gerekiyor. Aksi durumda işletim sistemi tarafında memory sorunu yaşanabilir bu durumda her defasında SQL Server üzerinde min memory değerini düşürmeniz gerekiyor.
Aslında sadece WINNER'e ait bir veritabanının çalıştığı bir makine için 12 GB az değil. Fakat kullanıcıları ve DB'yi nasıl yapılandırdığınız önemli. 20 şube RDP ile bağlanıp bu makine üzerinde WINNER'i kullanırken her kullanıcı için işletim sistemi bir memory ayıracak, arka tarafta çalışan servisleri ve WINNER ve diğer kasa uygulamalarının o anda kullandığı belleği de gözönünde bulundurduğumuzda WINNER programını ve DB'yi ayrı makinelerde çalıştırmanız daha mantıklı olacaktır.
Ahmet Kaymaz
http://www.ahmetkaymaz.com
C# VB.NET ASP.NET kitabı -
Merhaba,
sql server 2008 r2 sunucuda 32 GB ın 31,5 SQlservr.exe tarafından kullanılıyor.aktif aktif çalışan clusterım bulunuyor.işlemi doğru yerden mi yaptığımı belirtmek için adım adım yaptığım işlem aşağıdaki gibi;
serverv management studio da cluster ip sini yazarak sa ile bağlanıp,ip ye sağ tuş properties kısmından memory bölümündeki ayarda minumum server ve maximum serverv memory değerlerini girdim.use AWE to allocate memory işaretlemeden burada verdiğim değerler bir şey ifade etmiyor mu acaba?
Şimdiden Teşekkür ederim
-
Biz de ayno sorunu yaşamakya idik. 32 gb ramli bir suncuda 7 instance olarak calışan bir db sunucumuz var.
periyodik olarak aşağıdaki sorguyu çalıştırarak şişme sorununu bir nebze olsun önleyebildik. Ama kesin çözümmüdür bilemiyorum.
1 inci sorguyu çalıştırdıktan sonra task managerden kontrol ettiğiniz taktirde. Ram düşmesini görsel olarakta izleyebilirsiniz. Belirli bir seviyeye kadar indilten sonra stabile gelecektir. Daha sonra ikinci sorgu sql serverınızın ram değerleriniz maximuma çeker.
1 inci sorgu
EXEC sys.sp_configure 'show advanced options', '1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'min server memory (MB)', '2000'
GO
EXEC sys.sp_configure 'max server memory (MB)', '2000'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'show advanced options', '0' RECONFIGURE WITH OVERRIDE
GO
-------------------------------2 inci sorgu
EXEC sys.sp_configure 'show advanced options', '1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'min server memory (MB)', '0'
GO
EXEC sys.sp_configure 'max server memory (MB)', '2147483647'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'show advanced options', '0' RECONFIGURE WITH OVERRIDE
GO- Proposed as answer by Ali Rıza İnceoğlu Monday, November 26, 2012 9:08 AM
- Unproposed as answer by Ali Rıza İnceoğlu Tuesday, November 27, 2012 7:36 AM
-
Biz de ayno sorunu yaşamakya idik. 32 gb ramli bir suncuda 7 instance olarak calışan bir db sunucumuz var.
periyodik olarak aşağıdaki sorguyu çalıştırarak şişme sorununu bir nebze olsun önleyebildik. Ama kesin çözümmüdür bilemiyorum.
1 inci sorguyu çalıştırdıktan sonra task managerden kontrol ettiğiniz taktirde. Ram düşmesini görsel olarakta izleyebilirsiniz. Belirli bir seviyeye kadar indilten sonra stabile gelecektir. Daha sonra ikinci sorgu sql serverınızın ram değerleriniz maximuma çeker.
1 inci sorgu
EXEC sys.sp_configure 'show advanced options', '1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'min server memory (MB)', '2000'
GO
EXEC sys.sp_configure 'max server memory (MB)', '2000'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'show advanced options', '0' RECONFIGURE WITH OVERRIDE
GO
-------------------------------2 inci sorgu
EXEC sys.sp_configure 'show advanced options', '1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'min server memory (MB)', '0'
GO
EXEC sys.sp_configure 'max server memory (MB)', '2147483647'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure 'show advanced options', '0' RECONFIGURE WITH OVERRIDE
GOSevgili Ali Rıza, sanırım (ve umarım) bu cevabı yanlışlıkla "çözüm olarak" önerdin.
Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com
-
Merhaba;
benimde bunun biraz benzeri bir problemim var full ram kullanıyor.
2 Tane sql server 2008 r2 sunucularım var 1 tanesi ana sunucu diğeri terminal ikisinde de veritabanı var biraz ama 1 tanesi sürekli ram kullanıyor full olarak diğerindeki ile aynı ayarları yaptım.
ama malesef düzelmedi.
-
Merhaba Şaban,
Bu başlık altında bazı bilgileri zaten paylaşmışız, bu nedenle onlara tekrar deyinmeyeceğim.
Temel olarak yapman gerekenler:
- SQL Server Instance'ının ne kadar RAM'e ihtiyacı olduğunu belirlemek,
- Sunucu üstündeki diğer uygulamaların ve işletim sisteminin ne kadar RAM'e ihtiyacı olduğunu belirlemek,
- SQL Server'daki Max Server Memory ve Min Server Memory ayarlarını yapmak,
- SQL Server Database Engine servisine (Local Security Policy'den) Lock Pages in Memory yetkisini vermek.
Böylece SQL Server'ın RAM kullanımını kontrol altına almış olursun.
Not: Değindiğim bazı konular başlı başına makale yazıları, burada maksadım sana yol göstermek, her şeyi ayrıntısıyla burada anlatmak pek mümkün değil.
http://ekremonsoy.blogspot.com | http://www.ekremonsoy.com | @EkremOnsoy