Veritabanı Performans Optimizasyonu | Donanım ve OS Tuning Rehberi
Veritabanı Performansında "Sihirli Değnek" Aramayı Bırakın: Donanım ve OS Tuning Rehberi
Çoğu zaman bir veritabanı yavaşladığında ilk refleksimiz sorguları (query) optimize etmek ya da hemen bir üst pakete geçmek oluyor. Ama dürüst olalım; altındaki zemin (donanım ve işletim sistemi) doğru ayarlanmamış bir veritabanı, otobanda el freni çekili giden spor arabaya benzer.
Eğer web sitenizin veya uygulamanızın kalbi olan veritabanından tam verim almak istiyorsanız, "default" ayarlarla vedalaşmanız gerekiyor. Gelin, profesyonel bir ortamda sunucu kutusundan çıktığı andan itibaren yapılması gereken kritik dokunuşlara bakalım.
1. Donanım Seçimi ve Yapılandırması: Temeli Sağlam Atmak
Veritabanı sunucusu dediğimizde karşımızda üç ana düşman var: I/O Gecikmesi, Bellek Yetersizliği ve İşlemci Kuyrukları.
İşlemci (CPU): Çekirdek Sayısı mı, Hız mı?
Veritabanı motorlarının çoğu (SQL Server, Oracle, PostgreSQL vb.) lisanslama tarafında "core" başına ücret alır. Bu yüzden 64 tane yavaş çekirdek yerine, 16 veya 32 tane çok hızlı (high clock speed) çekirdek her zaman daha mantıklıdır.
- BIOS Ayarı: Sunucuyu mutlaka "Maximum Performance" moduna alın. Enerji tasarrufu için işlemci hızını düşüren "C-States" ve "P-States" gibi özellikleri kapatın. Veritabanı uyumaya gelmez, her an tetikte olmalıdır.
Bellek (RAM): "Daha Fazlası" Her Zaman Yeterli Değildir
RAM miktarınız, en büyük tablolarınızın index’lerini hafızada tutabilecek kadar geniş olmalı. Ancak hız kadar ECC (Error Correction Code) desteği ve kanal dizilimi de kritik. RAM’leri takarken anakartın kanal mimarisine (Quad-channel vb.) uygun taktığınızdan emin olun.
Depolama (Disk ve I/O): En Büyük Darboğaz
Eski nesil mekanik diskleri (HDD) sadece yedekleme için kullanın. Veritabanı için NVMe SSD artık bir standart.
- RAID Yapılandırması: Yazma yoğunluklu işler için RAID 10 altın kuraldır. RAID 5 veya 6, "parity" hesaplama yükü nedeniyle veritabanı yazma performansını ciddi oranda düşürür.
- HBA ve Controller: Diskleriniz ne kadar hızlı olursa olsun, RAID kartınızın önbelleği (cache) küçükse darboğaz yaşarsınız. 2GB veya 4GB FBWC (Flash Backed Write Cache) olan kartları tercih edin.
2. İşletim Sistemi (OS) Tuning: Motoru Modifiye Etmek
Donanımı aldık, şimdi bu canavarı dizginlemeyecek bir işletim sistemi yapılandırması lazım. (Bakınız: Linux Kernel Optimization vs Windows Server Performance Roles).
Dosya Sistemi Seçimi ve Blok Boyutu (Block Size)
İşte en çok atlanan konu: Formatlama. İşletim sistemini kurarken varsayılan blok boyutu genellikle 4KB’dır. Ancak modern veritabanları veriyi 64KB’lık bloklar (Extent) halinde okur/yazar.
- Tavsiye: Veritabanı dosyalarının duracağı disk bölümlerini (NTFS veya XFS/EXT4 fark etmeksizin) 64KB Allocation Unit Size ile formatlayın. Bu, işletim sisteminin tek bir okuma hamlesinde daha fazla veriyi çekmesini sağlar.
Swap ve Sayfalama (Paging) Dosyası
Veritabanı, RAM’e erişmek ister. Eğer işletim sistemi RAM’deki veriyi "belki lazım olmaz" diyerek diske (swap) taşımaya kalkarsa performans çöker.
- Linux’ta: vm.swappiness değerini 1 veya 10 gibi çok düşük seviyelere çekin.
- Windows’ta: "Lock Pages in Memory" yetkisini veritabanı servis hesabına mutlaka tanımlayın.
Ağ Ayarları (Networking)
Eğer veritabanı sunucunuz saniyede binlerce istek alıyorsa, network kartınızın "interrupt" (kesme) yönetimi önem kazanır. RSS (Receive Side Scaling) özelliğinin aktif olması, gelen ağ trafiğinin tüm işlemci çekirdeklerine dengeli dağılmasını sağlar.
3. Veritabanı Motoruna Özel Dokunuşlar
Donanım hazır, OS ayarlı. Şimdi veritabanı yazılımının bu kaynakları nasıl kullandığına bakalım.
Bellek Yönetimi (Memory Grant)
Veritabanına "RAM'in %80'ini sen al, kalanı işletim sistemine bırak" demelisiniz. Eğer limit koymazsanız, işletim sistemiyle veritabanı RAM için kavgaya tutuşur ve bu kavganın galibi olmaz.
Paralellik Ayarları (MaxDOP)
Tek bir sorgunun tüm işlemci çekirdeklerini sömürmesine izin vermeyin. Özellikle çok kullanıcılı sistemlerde, bir sorgunun kullanabileceği maksimum çekirdek sayısını (Max Degree of Parallelism) toplam çekirdek sayınızın yarısı veya dörtte biri olarak sınırlamak, sistemin genel akıcılığını korur.
Log Dosyaları ve Veri Dosyalarını Ayırmak
Bu eski bir kuraldır ama hala geçerlidir: Veri dosyalarınız (Data) ile işlem kayıtlarınız (Logs) fiziksel olarak farklı disklerde (veya farklı RAID gruplarında) durmalı. Yazma operasyonu log dosyasını şişirirken, okuma operasyonu veri dosyasını yormasın.
Özetle: Check-list
Yazıyı bitirirken, sunucunuzu yayına almadan önce üzerinden geçmeniz gereken kısa bir liste bırakıyorum:
- BIOS: Power management kapatıldı mı?
- Disk: 64KB cluster size ile formatlandı mı?
- RAID: RAID 10 yapıldı ve Write-Back cache açık mı?
- OS: Swappiness ayarlandı ve güç planı "Yüksek Performans"a çekildi mi?
- Network: RSS ve Offload özellikleri kontrol edildi mi?
Unutmayın; veritabanı tuning bir varış noktası değil, bir yolculuktur. Sisteminiz büyüdükçe bu ayarları tekrar gözden geçirmeniz gerekebilir.
Yazar Notu: Bu yapılandırmalar, standart bir kurumsal yük altında en iyi sonucu veren genel kabul görmüş pratiklerdir. Kendi özel yükünüzü (OLTP vs OLAP) analiz etmeden radikal değişiklikler yapmamanızı öneririm.