Böyle bir giriş yapmamın nedeni, geçenlerde büyük bir firmanın yöneticisinin masaya oturduğu anda bana şöyle demesi:
- "Biliyorum, SQL Server zaten performanslı çalışmayan bir ürün, haliyle Oracle seviyesinde performans alabilmemiz için daha fazla donanıma ihtiyacı var."
- "Bu kadar geçmişte kaldığınız için üzgünüm bayım, ama bu çok demode bir fikir!" diyemedim ne yazık ki, ortam müsait değildi.
İpucu: İlgili firmada sadece birkaç günlük bir çalışma ile %66 performans iyileştirmesi sağladık!
Eğer bugün hala SQL Server veritabanlarınızdaki performanstan şikayetçiyseniz, ilk bakacağınız şeyler veritabanı sunucunuzun yapılandırılması / kurgusu, en iyi pratiklerin uygulanıp uygulanmadığı ve uygulamalarınızın çalıştırdığı veritabanı kodlarının "performans" özelliği ile birlikte yazılıp yazılmaması olmalı. Yazılımlar KOBİ'dekilerden büyük firmadakilere kadar daha ziyade "işlev" odaklı kod yazılıyor. Genellikle "Ekran benim makinemde / test ortamında iş tarafından talep edildiği gibi çalışıyor, kafi!" düşüncesi hakim. Maalesef hala birçok kurumda yazılım yazılırken "performans" ve "güvenlik" konuları birer özellik olarak görülmüyor. Neyse, bunlar belki başka bir yazının veya başka bir yazarın konusu. Bu yazımda başka bir konuya değineceğim.
Efendim SQL Server 2012 Standard Edition olan kritik ortamlardan birinde SQL Server sunucusunun CPU yapılandırmasında bir ilginçlik gördüm. Durum aşağıdaki gibiydi:
|6 tane CPU soketi görünüyor, 2 tanesi kullanım dışı|
Bu makinede 6 tane CPU soket, her sokette de 2'şer tane Core var görünüyordu. Yani toplamda 12 Core vardı.
Bu ortamdaki Log'larda şöyle bir mesaj görüyordum:
"SQL Server detected 6 sockets with 2 cores per socket and 2 logical processors per socket, 12 total logical processors; using 8 logical processors based on SQL Server licensing. This is an informational message; no user action is required."
Yani makinede 12 Core olmasına rağmen, SQL Server bunun 8'ini görebiliyor, CPU kaynaklarının %33'ünden faydalanılamıyordu. Neden mi? Çünkü SQL Server 2012 Standard Edition'ın 4 soket lisanslama sınırlaması var. SQL Server 2012 Standard Edition'da 4'ten fazla CPU Soketi, 16'dan fazla Core kullanılamaz. Sonuç olarak israf edilen %33'lük bir CPU donanımı söz konusu, ama ilgili yöneticiler SQL Server'ın tüm varolan kaynağı kullandığını düşünüyor. Emin olabilirsiniz, daha farklı ortamlarda bundan çok çok daha büyük israf oranlarını gördüm.
İlave örnek: İsraf oranlarının nereye varabileceği hakkında sadece fikir vermesi açısından aşağıdaki mesaja bakın bir de, ama o hikayenin ayrıntılarına burada girmeyeceğim. Bu bir kurgu değildir, gerçek bir ortam.
SQL Server detected 8 sockets with 8 cores per socket and 8 logical processors per socket, 64 total logical processors; using 20 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
Nasıl ama? CPU kaynaklarının %68,75'i SQL Server tarafından kullanılamıyor.
Asıl hikayemize dönersek, söz konusu makine bir sanal makineydi, ben de ilgili sistem yöneticilerine bu sanal makinenin CPU ayarlarının SQL Server lisanslaması açısından doğru olmadığını, değiştirmemiz gerektiğini ilettim. Ufak bir planlı kesintiyle, artık SQL Server makinedeki 12 Core'dan yani CPU kaynaklarının tümünden faydalanabiliyordu. SQL Server için herhangi bir CPU modelini kullanmamalısınız. Bir SQL Server sunucu için CPU seçimi özenle yapılmalıdır. Makinenin sanal veya fiziksel oluşu da dikkate alınmalıdır. Bu sadece performans açısından değil, lisanslama maliyeti açısından da çok önemlidir. Sırf yapacağınız yanlış bir CPU modeli seçimiyle bile işe onbinlerce dolar zararla başlayabilirsiniz.
Bu yapılandırma işinin tabii ki daha hafıza, disk ve ağ altyapısı ayakları var. Sonra da veritabanı tasarımı ve kodlar...
Demem o ki söylenmek, kızmak kolay; ama gerçekten de ürün mü sıkıntılı, yoksa hakkını veremeyenler mi? Birçok yönetici giderleri kısmak için yollar arıyor, ama "varolan kaynaklardan gerçekten verimli yararlanılabiliyor mu?" sorusu sorulmuyor.
Eğer sizin de farkında olduğunuz veya kuşkulandığınız benzer sorunlarınız varsa iletişime geçmek için beklemeyin.
İyi işler!
Ekrem Önsoy