3GB PAE AWE üçlüsü

SQL Server 3GB PAE AWE ayarları, memory, bellek, ram nasıl ayarlanır.

Bu ayarlarla ilgili birçok soru geldiği ve forumlarda bazen bildiklerimizle çakışacak yorumlar yazıldığından bu makalede bu anahtar kodların tam olarak ne işe yaradığını en kısa ve kolay şekilde yazmaya çalışacağım. 3GB ve PAE ayarları boot.ini dosyasına yazılan kodlardır (boot.ini switches). AWE ise işletim sistemi üzerinde çalışan programlara uygulanan bir ayarlamadır. Bu düzenlemelerin yapılma ihtiyacı 32 bit mimariden kaynaklanmaktadır. Konunun hikayesini, 32 bit adreslemeyi aşağıdaki makalemde bulabilirsiniz.
SQL Server’da Maksimum Memory Kullanımı(AWE)
Bu ayarların mantığını kavramak için konuyla ilgili temel kavramlar olan Application (Uygulama), Process (İşlem) ve Virtual Memory (Sanal Bellek) kavramlarını birer cümleyle anlatmak faydalı olacaktır. İşletim sistemlerinin temel görevlerinden biri Bellek Yönetimi’dir. Talebe göre belleği tahsis eder (malloc) veya belleği serbest bırakır (free). Örneğin C programlama dilinde bu fonksiyonlar kullanarak programcı kendisi de gerektiğinde ihtiyacı kadar bellek talep edebilir ve ardından o alanla ilgili işi bittikten sonra belleği serbest bırakabilir yani sisteme geri verir.
Bilgisayar üzerinde çalıştırdığımız uygulamalar Application olarak tanımlanır. Bir uygulama çalıştırıldığı zaman disk, bellek, ağ gibi farklı ortamlarda barındırılan kaynaklara erişim sağlayabilir. Uygulamalar çalışma esnasında birden fazla process’e bölünerek işlenir. Her işlem geçici işler yapmak için bellek alanına ihtiyaç duyar. Yani işletim sistemi üzerindeki fiziksel belleği (Physical Memory – RAM) kullanır. İlk nesil işletim sistemleri aynı anda tek bir uygulama çalıştırabilirdi. Bu sistemlerde ikinci bir uygulamayı çalıştırmak için bellekteki ilk uygulamayı kaldırmak gerekiyordu. Kullanıcıların zamanla aynı anda birden programı çalıştırma isteği işletim sistemlerinin multitasking (Çok Görevlilik) özellikli olmasını sağlamıştır. Günümüzdeki gelişmiş işletim sistemleri bu özellik sayesinde birden fazla programı aynı anda işletime alır yani farklı process veya datayı aynı anda aynı bellek üzerinde işler ve bunların aynı anda CPU , I/O gibi kaynaklara erişmesini sağlar. Programlarını aynı anda aynı yerde yaşıyor olması beraberinde birbirinden etkilenme riskini de doğuracağı için işletim sistemleri izolasyon yöntemi kullanır. Bütün bu işlemlere Bellek Yönetimi denilir.
Günümüzde ihtiyaç duyulan konu aynı anda birden fazla programın çalışmasıyla birlikte uygulamaların tek başına çok fazla bellek alanına ihtiyaç duymasıdır. Daha fazla RAM daha fazla maliyet demek olduğundan çoğu zaman RAM takviyesi yapılamamaktadır. İşletim sistemleri bu konuda da Virtual Memory (Sanal Bellek) denilen bir yöntem geliştirmiştir. İşletim sistemleri fiziksel belleğin yetersiz kaldığı durumlarda disk üzerinde bir dosya oluşturur (Page File / Swap File) ve bunu geçici bellek olarak kullanır. Virtul Memory, gerekli durumda RAM’de o anda acil olarak erişilmeyen verileri diske yazar ve RAM’de o alanı serbest bırakıp daha acil bir uygulama tarafından kullanılmasını sağlar. Gerektiği durumda diske taşınmış olan veri yeniden RAM’e taşınır. İşletim sistemi programın çalışan parçasını fiziksel bellekte diğer kısmını sanal bellekte (diskte) tutar. Yani programların çalışmasının kesintiye uğramaması için diski, fiziksel belleğin bir uzantısıymış gibi kullandırır. Bu taşınma işlemi Paging veya swapping olarak tanımlanır. Buradaki paging kavramı Page ifadesinden gelmektedir. Virtual memory RAM-DISK arasındaki değiş tokuş işleminde veriyi her biri 4KB büyüklüğünde Page denen küçük parçalara ayırır. Dolayısıyla bir uygulama bellek talep ettiğinde işletim sistemi en az 4KB’lık bir yer tahsis eder. Sonuçta paging işleminde verilere 4KB’lık parçalar halinde RAM-DISK arasında taşınır. Uygulama tarafından istenilen veri adresinde bulunmuyorsa geriye Page Fault hatası döndürülür ve sözkonusu veri diskten ram’e taşınarak talep eden işlemci yeniden çalıştırılır.
Disk, RAM kadar hızlı olmadığı için bir uygulama Page File’ı ne kadar yoğun kullanırsa o kadar performans sorunu yaşar. Bu nedenle mümkün olduğunca bellek ihtiyacında fiziksel belleği artırmak daha mantıklı olacaktır.
Bu bölümü toparlayıp konuya geri dönecek olursak uygulamalar sınırlı bir alan belleği kullanırlar dedik. Bu alanın hangi bölgesinde hangi verinin bulduğunu bilmek ve ona göre okuma-yazma yapabilmek için işlem sistemi hem fiziksel hem de sanal belleği adresler. Belleği adreslerken CPU’nun yeteneği ölçüsünde adresleme yapar. Yani CPU, ne kadar sayıda adres tutabiliyorsa o kadar bölüm oluşturulur. 32 bit mimaride en fazla 2^32 = 4GB (4096 MB) adresleme yapılabilir. CPU’larda 2 temel kip bulunur; Kullanıcı Kipi (User Mode) ve Çekirdek Kipi (Kernel Mode). Çekir kipi, işletim sisteminin hayati devamlılığı için kullanılır. Sistem açıldığı zaman CPU, kernel’i (işletim sisteminin kalbi diyebiliriz) yükler ve ardından user mode’a geçer. Bu kipte çalışan uygulamalar(donanım sürücüleri gibi) belleğe ve giriş-çıkış aygıtlarına tam yetkiyle erişir. Kullanıcı programları kullanıcı kipinde çalışır. Kullanıcı programında bellek, giriş/çıkış (I/O) işlemleri yapmak istediğinde devreye işletim sistemi girer. Kısacası bu kipler işletim sistemini güvenlik açısından koruma altına almak için geliştirilmiş yöntemlerdir. Konumuzla ilgisi ise şudur; 32 bitlik mimarilerde bellek paylaşımı 50/50 olarak gerçekleştirilir. Yani 4GB’nın 2G’sı işletim sistemi diğer 2G’sı uygulamalar tarafından kullanılır. SQL Server vb uygulamalar 32 bitlik sistemde 2G’nın üzerine çıkamaz. İşte tam bu noktada /3GB kodu imdadımıza yetişiyor. boot.ini’ye bu parametre eklendiği zaman bellek paylaşımı 25/75 oranında gerçekleştirilir. Böylece kullanıcı kipinde çalışan uygulamalar 3G’ye kadar çıkabilmektedir.
SQL Server’in 3G’ya kadar çıkmasını sağladık. Fakat herhangi bir nedenden dolayı 32 bitlik makineyi yeniden kurmaksızın daha yüksek bellek kullanımına ihtiyacımız olabilir. İşletim sisteminin 4G üstünü görebilmesi için The Physical Address Extension (PAE) parametresi kullanılır. Intel’in sonradan işlemcilere yüklediği bu ayar sayesinde 32 bit yerine 36 bitlik adresleme yapılır. Böylece 2^4=16 daha fazla yaklaşık adres tanımlanarak 64G’a kadar destek sağlanabilmektedir. Tabii burada işletim sisteminin de bunu desteklemesi önemlidir. PAE ancak 32 bitlik işletim sistemleri tarafından desteklenmektedir. 64 bitlik sistemler tarafından desteklenmemektedir. Microsoft Windows 2000, Windows XP ve Windows Server 2003 sistemleri temelde PAE’yi desteklese de bellek limitleri bulunmaktadır. Aşağıdaki tabloda bu limitler gösterilmiştir.

İşletim Sistemi PAE ile desteklenen en yüksek fiziksel memory
Windows 2000 Advanced Server 8 GB
Windows 2000 Datacenter Server 32 GB
Windows XP (all versions) 4 GB(*)
Windows Server 2003 (ve SP1), Standard Edition 4 GB(*)
Windows Server 2003, Enterprise Edition 32 GB
Windows Server 2003, Datacenter Edition 64 GB
Windows Server 2003 SP1, Enterprise Edition 64 GB
Windows Server 2003 SP1, Datacenter Edition 128 GB

* Bu işletim sistemleri en fazla 4 GB’yı destekler, üstüne görmez.
boot.ini dosyasını bu ayarlarla güncelledikten sonra işletim sistemi 4GB üstünü görebilecek ancak uygulamalar ortam 32 bit olduğu için hala en fazla 3 GB’yı kullanabilecekdir. Bunu da aşmak için yani uygulamaların 3 üstü bellek kullanabilmesi için uygulamaya özel Address Windowing Extensions (Adres Pencereleme Uzantıları – AWE) parametresi girilir. Uygulama AWE apisini destekliyorsa bunu aktifleştirerek uygulamanın daha fazla bellek kullanmasını sağlayabiliriz.
SQL Server’de AWE ayarını devreye almak için EXEC sp_configure ‘awe enabled’ komutu kullanılır. AWE’nin devreye girmesi için SQLService hesabının “lock pages in memory” için yetkili olması gerekmektedir.

3GB PAE AWE üçlüsü” üzerine bir düşünce

  1. TK

    İşin içinden çıkamıyordum. Konunun yüzde 80’ini biliyordum fakat ayar yapmaya cesaret edemiyordum. Tek kelime ile şunu söyleyim: “Microsoft bile bu kalitede KB (Bilgi Makalesi) yazmıyor. Yazmak ne kelime gidiyor, ingilizce türkçe otomatik çevirme yapıyor. Kısacası sayenizde olayı öğrendim. Çok teşekkürler.

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.