SQL Server' ın sayfalama yapması (paging of buffer pool memory ) nasıl engellenir ?
Özet :
64-bit sürüm SQL Server üzerinde arabellek bellek havuzunun (buffer pool memory) sayfalama yapması (paging) nasıl azaltılır?
Microsoft SQL Server, sistem üzerindeki mevcut yük ve aktivitelere bakarak bellek gereksinimlerine göre dinamik bellek yönetimini gerçekleştirmektedir.
SQL Server, Windows Server 2003 veya Windows XP veya sonraki sürümlü işletim sistemlerinde bulunan “QueryMemoryResourceNotification” isimli Windows API tarafından sağlanan bellek bildirim düzeneklerini kullanır. Ayrıca, Microsoft Windows Server tabanlı sistemlerde yerel Windows API’ sini kullanarak sistem üzerindeki boş fiziksel bellek alanını periyodik olarak hesaplar.
QueryMemoryResourceNotification WindowsAPI’ sinden gelen bilgiye dayanarak veya SQL Server’ ın kendi yaptığı bellek hesaplamasına göre, SQL Server, sistemdeki mevcut bellek durumuna göre aksiyon alır. Bu kontrol, aşağıdaki faydaları sağlamaktadır :
-
SQL Server process’ lerine ait çalışma kümesi (working set) bellek alanında sayfalama işlemi yapılmaz..(page out)
-
Fiziksel giriş/çıkış (physical I/O ) gereksinimlerini mümkün olduğunca azaltmak için kullanılan, gerekli veritabanı sayfaları bellekte tutulur.
Daha fazla bilgi için, SQL Server Books Online' da bulunan "Dinamik bellek yönetimi" ve "Sunucu bellek seçenekleri" isimli konularını inceleyebilirsiniz.
Semptomlar :
SQL Server 64-bit sürümlerinde, bazı sorunlar ortaya çıkabilir. Örneğin, aşağıdaki sorunlar oluşabilir :
-
SQL Server performansı aniden azalabilir,
-
SQL Server çalıştıran bilgisayar kısa bir süre için yanıt vermiyor olabilir,
-
SQL Server' abağlanan uygulamalarda kısa bir süre için zaman aşımı oluşabilir,
Bu sorun oluştuğunda,SQL Server hata günlüğüne aşağıdaki hata iletilerinden biri kaydedilmektedir.
Hata iletisi 1 :
date timespid1s A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 1086400, committed (KB): 2160928, memory utilization: 50%.
Hata iletisi 2 :
date timespid1s A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 315 seconds. Working set (KB): 410156, committed (KB): 2201296, memory utilization: 18%.
Hata iletisi 3 :
date timespid1s A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 646 seconds. Working set (KB): 901904, committed (KB): 2215752, memory utilization: 40%.
Bu hata iletileri "A significant part of sql server process memory has been paged out" mesajları ile birlikte görülebilir.
Bu ani performans düşüşünün oluşma nedeni, Windows işletim sisteminin SQL Server işlemine ait çalışma kümesi alanlarını bellekten page out etmesi (sayfalama) olabilir..
SQL Server performansında ani düşüş olduğunda, Windows işletim sisteminin SQL Server işlemine ait çalışma kümelerinde sayfalama yapıp yapmadığını gözlemlemek için bu hata mesajlarını kontrol edebilirsiniz.
Bu sorun oluştuğunda, sistemdeki diğer uygulamaların bellekteki çalışma kümesinde de aynı zamanda sayfalama yapıldığını fark edebilirsiniz.
Daha fazla bilgi için, aşağıdaki Microsoft Web sitesini ziyaret edebilirsiniz :
http://blogs.msdn.com/psssql/archive/2007/05/31/the-sql-server-working-set-message.aspx
http://blogs.msdn.com/psssql/archive/2009/05/12/sql-server-reports-working-set-trim-warning-message-during-early-startup-phase.aspx
Çözüm Yöntemleri :
“max server memory” ve “min server memory” değerlerini set ederken aşağıda bahsedilen tüm koşulların dikkate alınmasında fayda vardır. Tüm bu uygulamaların bellek gereksiniminin düşünülmesi gerekir.
Her bir uygulama için gerekli olan bellek miktarını belirlemek için Performans monitor konsolunda işlem nesnesi altında her bir işlem için tek tek “Private Bytes” ve “Working Set” sayaç değerleri kontrol edilebilir.
İdeal olarak, sistem kaynaklarının kullanımı maksimum seviyedeyken temel bilgilerin toplanması gerekir. Bu nedenle, kaynak kullanımı yüksek değerdeyken bellek kullanım miktarı izlenip çeşitli uygulamalar ve bileşenler için bellek gereksinimlerini belirleyebilirsiniz.
Bellek gereksinimleri, herbir sistem için üzerinde çalışan işler ve uygulamalara bağlı olarak değişir.
Aşağıdaki adımların kontrol edilmesinde fayda vardır ;
-
“max server memory” ve “min server memory” özelliklerinin doğru ayarlamış olduğundan emin olmalısınız.
• Bu seçenekler, sadece SQL Server işlemine ait arabellek havuzunun bellek gereksinimini yansıtmaktadır. Diğer uygulamaların bellek kullanımını etkilemez. Ayrıca, bu seçenekler, SQL Server işlemi içindeki diğer bileşenler için ayrılan bellek alanını da etkilemez .Örneğin,
-
SQL Server worker threads,
-
SQL Server Memory Manager’ a ait , Multipage Allocator
-
SQL Server process’ ine ait adres alanına gömülen DLL ve component’ ler,
-
Backup ve restore işlemleri,
• DLL ve bileşenler; OLE DB sağlayıcıları, extended stored procedure, sp_OACreate stored procedureiçin kullanılan Microsoft COM nesneleri, linked serversve SQL Server CLR kodlarını içermektedir..
• Bu bileşenler için ayrılan bellek alanı, SQL Server işlemine ait adres alanının nonbuffer pool bölgesinde tutulmaktadır.
-
“max server memory” ve “ min server memory” değerlerini set etmeden önce SQL Server Books Online içerisinde bulunan "Setting the memory options manually" konusunun gözden geçirilmesinde fayda vardır.
-
Windows işletimsisteminin diğer bileşenleri ve sunucu üzerinde bulunan başka uygulamaların bellek gereksinimi belirlenmelidir.
-
Sunucu üzerindeki diğer SQL Server bileşenlerinin, örneğin, SQL Server Agent, SQL Server Replication Agents, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services, ve and SQL Server Full Text Search bellek kullanımı kontrol edilmelidir.
-
Yedekleme işlemleri ve dosya kopyalama işlemleri gerçekleştiren uygulamalar, büyük miktarda bellek kullanabilir. Bulk copy, file IO gibi diğer işlemlerin bellek kullanımı kontrol edilmelidir.
-
Sorun yaşanmaya devam ediliyorsa SQL Server Servis account’ u için gerekli Windows kullanıcı haklarının set edildiğinden emin olmalısınız.
-
MS destek ekibinin görüşlerini alarak fiziksel bellek içerisinde SQL Server arabellek havuzuna ait bellek alanının SQL Server tarafından önceden rezerve edilmesini sağlayabilirsiniz.