Makale Özeti

Bir sistemde yaşayacağınız performans sorunu büyük ihtimalle giriş\çıkış işlemlerinden kaynaklanıyor olacaktır. Peki bu giriş\çıkış işlemleri nedeniyle yaşayabileceğimiz performans sorunlarıyla nasıl başaçıkabiliriz? Bu yazımda bu konuya değineceğim.

Makale

Merhaba arkadaşlar,


Veritabanı yöneticileri olarak bizlerin sırtındaki en ağır yüklerden biri de performansın her zaman mümkün olduğunda en iyi şekilde kalmasını sağlamaktır. Bu nedenle sürekli sistemi gözlemlemeli, gerekli analizleri yapmalı ve geleceğe yönelik tespitlerde bulunmalıyız. Bu sayede, ileride iş yükünün artmasıyla birlikte karşılaşacağımız sorunları önceden görmüş oluruz ve buna göre tedbirler almış oluruz.

Gerçek hayat öyküsü
Büyük bir şirket, SQL Server Failover Cluster ve Active Directory + Exchange Server sistemlerini kurmamız için bize başvurdu. Tahmin edeceğiniz gibi işin SQL Server tarafı bana aitti. Projeyi bitirdik, teslim ettik. Bu arada analizler yaptım, şimdiki ve önlerindeki bir kaç aya dair bir de sonuç raporu çıkartarak kendilerine teslim ettim. Öngördüğüm tüm sorunlarla da karşılaştılar. Çünkü bu kaçınılmazdı. Önceden kendilerine yaşayacakları sorunları gösterdiğim halde herhangi bir önlem almadılar. Sonucunda da gene yanlış kararlar verip, yanlış yatırımlar yaptıklarını öğrendim. Ama maalesef, bazı şirketler hâlâ profesyonelce çalışmamakta diretiyor ve uğradıkları zararlar, alacakları önlemler için yapacakları yatırımdan daha maliyetli olabiliyor... 

Giriş
Makale başlığında da belirttiğim gibi, bu makalede size diskinizde gelişen etkinlikleri nasıl izleyeceğiniz hakkında bilgi vereceğim. İşlemci ve Hafıza konularındaki makaleleri de ayrıca yayınlayacağım.

SQL Server, diskinizdeki okuma ve yazma işlemleri için Windows işletim sisteminin giriş\çıkış çağrılarını uygular. Bu giriş\çıkış işlemlerinin yönetim tarafını SQL Server halleder, fakat işi Windows yapar. Bir sistemde yaşayacağınız performans sorunu büyük ihtimalle giriş\çıkış işlemlerinden kaynaklanıyor olacaktır. Peki nedir bu giriş\çıkış işlemleri? Şunlardır: Sistem Yolu (System Bus), Disk Kontrol Kartları (Disk Controller Cards), Diskler, Teyp Sürücüleri, CD-ROM sürücüleri ve diğer giriş\çıkış işlemi yapan aygıtlar.

Sisteminizde gelişen bu olayları ise System Monitor adı verilen ve Windows işletim sistemi ile birlikte gelen araç ile izleyebilirsiniz. Bu araç SQL Server ile birlikte kurulmaz, fakat SQL Server kurulurken System Monitor ile birlikte kullanabileceğimiz yeni sayaçlar da ekler. Bahsini ettiğim sayaçlar ve konumuzla ilgisi olmayan diğerleri bu makalede konu dışı olduğu için onlara değinmeyeceğim.

Disklerimizde gerçekleşen etkinlikleri iki ana dala ayırabiliriz:

- Disk giriş\çıkışını izlemek ve fazla sayfalamayı (paging) algılamak
- SQL Server' ın neden olduğu disk etkinliklerini ayıklamak

Disk giriş\çıkışını izlemek ve fazla sayfalamayı (paging) algılamak
Disk etkinliğini izlemek için aşağıdaki iki sayacı kullanabilirsiniz.

- PhysicalDisk: % Disk Time
- PhysicalDisk: Avg. Disk Queue Length

"PhysicalDisk: % Disk Time" sayacı, diskin okuma\yazma ile meşgul olma yüzdesini verir. Eğer "PhysicalDisk: % Disk Time" sayacı yüksekse (%90' dan fazla), o zaman kaç tane sistem isteğinin sırada beklediğini görmek için "PhysicalDisk: Avg. Disk Queue Length" sayacını kontrol edin. Girdi\çıktı isteklerinin sayısı (diskteki mil sayısı başına) 1.5 - 2' yi geçmemelidir. Çoğu diskin bir mili vardır, fakat RAID cihazlarının genellikle birden fazla mili vardır. bir RAID cihazı System Monitor' de tek bir fiziksel disk olarak görünür. Yazılımla yapılan RAID cihazları System Monitor' de çoklu olarak görünür.

Sisteminizdeki disk sistemleriyle ilgili performans sorunlarını belirlemek için "% Disk Time" ve "Current Disk Queue Length" sayaçlarının verdikleri değerleri kullanın. Eğer bu değerler sürekli yüksekse o zaman disk sistemiyle ilgili bir performans sorunu yaşıyorsunuz demektir. Bu durumda ise, aşağıdaki çözümlerden birini uygulamayı düşünebilirsiniz:

- Daha hızlı bir disk sürücü kullanmak
- Bazı dosyaları başka fiziksel sürücülere veya sunucuya taşımak
- Eğer RAID kullanıyorsanız, RAID dizisine yeni diskler eklemek

Eğer RAID cihazını kullanıyorsanız "% Disk Time" sayacı %100' den fazla bir değer gösterebilir. Eğer böyle bir şey olursa o zaman ortalama kaç sistem isteği olduğunu görmek için "PhysicalDisk: Avg. Disk Queue Length" sayacını kullanın.

Giriş\çıkış işlemleri ağırlıklı olan uygulamalar ve sistemler disklerinizi sürekli meşgul edebilirler.

Disk işlemlerinin sayfalamadan (paging) kaynaklanmadığından emin olmak için de "Memory: Page Faults/sec" sayacını kullanabilirsiniz.

Windows' ta, sayfalama aşağıdaki nedenlerden kaynaklanabilir:

- Çok fazla hafıza kullanmak için yapılandırılan işlemler
- Dosya sistemi etkinlikleri

Eğer aynı sabit diskte birden fazla mantıksal bölüm varsa, "Physical Disk" sayaçlarının yerine "Logical Disk" sayaçlarını kullanın. Hangi dosyaların daha sık kullanıldığını belirlemeye yardımcı olması için mantıksal disk sayaçlarına bakın. Büyük ölçüde okuma\yazma işlemlerinin yapıldığı diskleri bulduktan sonra, her mantıksal sürücüdeki yoğun etkinliğin okumadan mı yoksa yazmadan mı kaynaklandığını öğrenmek için okumaya ve yazmaya yönelik sayaçları kullanın. Meselâ "Logical Disk: Disk Write Bytes/sec." gibi. Bu sayaç ile seçtiğiniz mantıksal sürücüde her saniyede gerçekleşen diske yazma işleminin değerlerini alabilirsiniz.


SQL Server' ın neden olduğu disk etkinliklerini ayıklamak
SQL Server bileşenlerinin neden olduğu giriş\çıkış işlemlerinin miktarını aşağıdaki iki sayaç ile izleyebilirsiniz:

- SQL Server: Buffer Manager: Page reads/sec
- SQL Server: Buffer Manager: Page writes/sec
Eğer bu sayaçların verdikleri değerler donanımsal olarak giriş\çıkış işlemlerinin kapasite sınırına yaklaşırsa, giriş\çıkış işlemlerini azaltmayı denemek için uygulamanızı ve veritabanınızı gözden geçirin. Meselâ daha iyi Index' ler veya Normalizasyon kullanabilirsiniz, disk donanımınızın giriş\çıkış kapasitesini arttırabilir veya da daha fazla hafıza ekleyebilirsiniz. Veritabanınız hakkında bir analiz yapmak için SQL Server 2005 Standard ve Enterprise Edition ile birlikte gelen Database Tuning Advisor' ı kullanabilirsiniz.

RAID' ler
RAID sistemlere de çok özetle değinmeden geçemeyeceğim, çünkü bu konuda habergruplarından çok soru geliyor. RAID' lerin yapılarını anlatmayacağım, ama genel kurallardan bahsedeceğim. Kullanacağınız RAID sistemi de giriş\çıkış işlemlerini doğrudan etkiler. Bazı arkadaşlar şuna benzer sorular soruyor: "5 tane diskimiz var, hangi RAID' i kursak daha iyi olur?".

Maalesef buna cevap vermek çok zor, çünkü önce RAID kurulmaz. Önce sistem incelenir, hangi işlemler daha ağırlıklı, okuma mı yoksa yazma mı. Yeterli disk var mı? Eğer varsa ve güçlü bir SQL Server gerekiyorsa, o zaman ideal olanı veritabanına ait veri ve kayıt dosyalarını ayırmaktır. Kayıt (Transaction Log) dosyalarına daha ziyade yazma işlemi yapılır. Yazma işlemleri için en uygun RAID ise RAID1' dir. Böylece hem otomatik yedeklemeniz olur, hem de bir diskinizin bozulması sisteminizin çökmesine neden olmaz.

Veri dosyaları için ise duruma göre RAID-5 veya RAID-10 önerilir. Neden "duruma göre" dedim? Çünkü bunun duruma göre değiştiğini gördüm. RAID-5 okuma için iyidir, RAID-10 ise yazma\okuma işlemlerinin karışık yapıldığı ortamlara en uygun RAID' tir. İki RAID' le de sisteminiz yedekli ve güvenilir çalışır (Redundancy).

Bunlar genel kanıdır, genelde de doğrudur. Fakat doğru olmadıkları yerleri de gördüm. Farklı kişilerin farklı ortamlarda yaptıkları analiz raporlarında, bazı donanımlarda RAID-5 ile daha iyi sonuç alındığına şahit oldum. Bu nedenle düz mantık kararlar vermeden önce, eğer imkânınız varsa donanımlarınızda RAID testleri yapmanızı tavsiye ederim.

Özet
System Monitor' de, bu makalede söz ettiğimden çok çok daha fazla sayaç bulunmaktadır. Bu sayaçları çeşitli amaçlar için kullanabilirsiniz. Sistem Monitor içerisinde her sayaca ait kısa bir açıklama da bulunmaktadır. Sayaçları kurcalamanızı tavsiye ederim. Çok yararlı bir araç, sisteminizde performans sıkıntısı yaşadığınızda ilk başvuracağınız temel araçlardandır.

RAID' leri daha iyi anlayabilmek için doğrudan RAID' ler hakkında yazılan makaleleri okumanızı öneririm. Böylece, RAID' lerin yapıları hakkında daha fazla bilgi edinmiş olursunuz. Tabi RAID için kullanılan donanımlar hakkında da fikirler edinirsiniz.



Ekrem Önsoy

Yardımcı Kaynak: BOL