Sql Server Virtualization

SQL SERVER VIRTUALIZATON

    Virtualization, Türkçe karşılığı sanallaştırma, son dönemde çok popüler olan bir kavramdır. Sanallaştırma, bugün sıklıkla sunucu donanım kaynaklarının tek bir işletim sistemine atanması yerine, bir sanallaştırma ara katmanı (hypervisor) ile birden fazla işletim sistemine sunulması olarak kullanılır. Sanallaştırmanın ilk uygulamaları, 1960 yılında mainframe bilgisayarlarda, kaynakların farklı uygulamalara bölünmesiyle gerçekleştirilmiştir.

    Son 15 yılda, sanallaştırma kullanımı artmış ve günümüzde sanallaştırmanın kullanılmadığı bir datacenter düşünmek mümkün olmayacak bir hale gelmiş, sistem uzmanlarına büyük yönetimsel esneklik ve maliyet avantajı getirmiştir. Sanallaştırma bu kadar yaygınken, Sql Server’ı sanala kurmayın gibi yanlış bir söylem de IT dünyasında yaygın bir şehir efsanesidir. Sql Server’ın hypervisor üzerine kurulmasının performans kayıplarına yol açtığı ve fiziksel sunucu üzerine kurulması tavsiye edilmektedir. Sanallaştırılması kabul edilemeyecek derecede kritik ve gerçek zamanlı işlem yapması gereken SQL sunucular bulunabilir. Fakat bu özel durum dışında bu makalede Sql Server Sanallaştırması hakkında yanlış bilinenleri ve Sql Server sanallaştırması sırasında nelere dikkat etmemiz gerektiğini anlatmaya çalışacağım.

    Hypervisor, fiziksel sunucu üzerine kurulan yazılımsal sanal bir katmandır. Sanal işletim sistemleri bu hypervisor üzerine kurulur. Hypervisor, fiziksel sunucu ile sanal makinelerin arasında köprü görevi görür. Sanallaştırmada sunucu üzerine kurulan hypervisor makineye host machine, hypervisor üzerine kurulan sanal makinelere de guest machine denmektedir.

    Sql Server Sanallaştırması yapılırken sık karşılaşılan hatalar, sanal makinenin yanlış konfigüre edilmesi, host sunucu kaynaklarının yanlış ölçeklendirilmesi, sanal makine performanslarının yanlış izlenmesidir. Günümüzde hypervisor limitleri istenen düzeye gelmiş olup, desteklenen işlemci ve hafıza boyutları kabul edilebilir performans değerleri sunmaktadır. Ayrıca sanallaştırma, hem maliyet hem de yönetilebilirlik açısından çok fazla fayda sağlamaktadır.

    Bu makalede sizlere Vmware veya Hyper-V kurulumları veya yönetimsel konularından bahsetmeyeceğim, bu konular hakkında, konunun uzmanlarının yazdığı birçok makale vardır. Sql Server’ın sanallaştırma katmanları üzerindeki yapılandırılmasının nasıl olacağı, nasıl olması gerektiği ve Sql Server sanallaştırmasında karşılaşılan hataları en az seviyeye nasıl indirebiliriz bunları aktaracağım. Ama önce lisanslamadan biraz bahsedelim.

Sanal Sistemlerde SQL Server Lisanslaması

SQL Server, Microsoft’un Volume Licensing anlaşmaları içerisinde sattığı ürünleri arasında en pahalı olanıdır. Bu ürünün lisanslaması hakkında fikir sahibi olmak, organizasyonunuza lisanslama konusunda ciddi miktarda para kazandırmak anlamına gelir.

SQL Server lisanslaması hakkında bu makalede detaylı bilgi vermek zor fakat, sanallaştırma açısından çok önemli bir bilgi olan “Enterprise Core licensing with Software Assurance” tipinden bahsetmek önemlidir.

Ent Core modelinin sınırsız sanallaştırma özelliğini kullanmıyorsanız, her bir sanal makina için en az 4 core, yani 2 Ent Core lisansı almanız gerekir. Eğer bir fiziksel sunucu üzerinde diyelim ki 5 tane SQL Server çalıştırıyorsanız, her bir VM üzerinde tek bir core atanmış bile olsa, toplamda 20 core’luk lisans satın almanız gerekmektedir. Bu da hızlıca on binlerce dolar mertebesine ulaşacaktır. Bunun yerine, fiziksel sunucularınızı tek bir güçlü host üzerinde sanallaştırırsanız, 20 core – 10 lisans (her bir Ent Core lisansı 2 adet core lisanslamaya yarar) almak yerine, sadece fiziksel host üzerinden toplam core miktarını hesaplayıp ona göre lisans alımı yapabilirsiniz. Burada en önemli nokta, Ent Core sadece lisansını satın alıp Software Assurance eklemezseniz, bu anlattığımız çözüm geçerli olmayacaktır.

Yukarıda bahsettiğimiz, üzerinde 5 tane SQL VM çalışan host, eğer 2 işlemciye sahipse ve her işlemci üzerinde 4 tane core varsa, o zaman Ent Core w SA lisanslamada toplam lisanslamanız gereken core sayısı 8 olacaktır. 20 yerine 8 core, ciddi kazanımlar sağlamanıza yardımcı olur. Ayrıca bu şekilde lisanslama yaptığınız takdirde, bu sunucu üzerinde istediğiniz kadar sunucu performansı etkilenmediği sürece yeni sunucu eklemeniz mümkün. Aynı sunucudaki işlemci ve core sayıları değişmediği sürece, isterseniz 100 tane daha SQL Server kurun, yeni lisans satın almanız gerekmez.

Yukarıda bahsettiğimiz gibi SQL lisanslaması karmaşık bir konu ve bu makalede tüm başlıklarını incelememiz mümkün değil fakat Ent Core w SA lisanslamasını incelemenizi, sunucularınız yoğunluklarına ve iş yüklerine göre fiziksel hostlar üzerinde lisans masraflarınızı düşürmek üzere birleştirmenizi tavsiye ederim.

Sanallaştırma Tipleri:

    Sanallaştırmanın temelinde, İşlemci, Donanım ve Memory sanallaştırması bulunur. Bunlar hakkında bilgi sahibi olmalıyız ki, Sql Server Sanallaştırmasını daha iyi anlayabilelim. Sanallaştırmanın 3 farklı donanımsal temeli olduğu gibi, 3 farklı da tipi vardır bunlar;

  1. Full Virtualization using Binary Translation: Sanal makinadaki işletim sistemi, sanal olduğunu bilmez. İşletim sistemi istekleri doğrudan işlemciye iletilir.
  2. OS Assisted Virtualization or Paravirtualization: Sanaldaki işletim sistemi ve hypervisor, daha performanslı bir şekilde direk haberleşir. İşletim sistemindeki uygulama istekleri direk işlemciye istekte bulunur, yüksek performans sağlamaktadır. Windows 2000/XP bu tipte desteklenmemektedir.
  3. Hardware Assisted Virtualization: En temel seviyedeki sanallaştırmadır. Intel VT-x ve AMD-V olarak marka bazında terimleri vardır. Yukardaki iki tiptede olduğu gibi direk işlemciye uygulamalar erişim isteği gönderir. 64-Bit işletim sistemi desteği vardır.

Aşağıdaki şekilde, sol tarafta sanallaştırma yapılmadan kullanılan bir sunucuyu, sağ tarafta ise sanallaştırma yapılmış bir sunucunun katmanlarını görmekteyiz.

SSV-1

Cpu Virtualization – İşlemci Sanallaştırması

    İşlemci sanallaştırmasında, fiziksel işlemci hypervisor vasıtası ile sanal işlemcilere ayrılır. Fiziksel işlemci ile sanal işlemciler arasında hypervisor haberleşmeyi ve yönetimini sağlar. Input/Output portların geçişi hypervisor üzerinden olur. Sanallaştırma yapılmamış X86 mimarisindeki bir işlemcinin bölümlerini inceleyelim. Vmware Whitepaper: http://www.vmware.com/files/pdf/VMware_paravirtualization.pdf

SSV-2

X86 Mimarisi, işletim sistemine erişim seviyesine gelen kadar 4 bölüm üzerinden geçer. Kullanıcı uygulamaları Ring3 üzerinde çalışır. İşletim sistemi memory ve donanıma direk erişmek istediğinde Ring 0’ı kullanır. İşletim sisteminin talepleri direk fiziksel sunucunun donanımı üzerinde gerçekleşir. Sanallaştırma, şekildeki OS ile “Host Computer System Hardware” yani sunucu arasında bir katman oluşturarak (Hypervisor), fiziksel sunucunun donanımını yönetir.

Hypervisorler iki tiptedir;

  1. Sunucu üzerine kurulan, sanal makineleri ve sunucu donanımları yöneten hypervisorler. (Vmware Esx, Hyper-V, XenServer)
  2. Uygulama olarak çalışan, kişisel bilgisayarlarda kurulan hypervisorler. (Vmware Workstation, VirtualBox, VirtualPC)

Hypervisorler, işlemciye erişimi, I/O (input/output) giriş çıkış isteklerini ve memory kaynaklarını kontrol eder ve yönetirler.

Memory Virtualization – Bellek Sanallaştırması

    

SSV-3

Bellek sanallaştırmasında, işletim sistemindeki bellek direk olarak sunucu üzerindeki belleğe erişim sağlayamaz. Sanal makinadaki şekil SSV-2’deki PA – Physical Memory aracılığı ile, işletim sistemdeki bellek sunucu üzerindeki belleğe erişim sağlamaktadır.

Sanallaştırmanın Getirdiği Faydalar:

  • Maliyet Avantajı: Sanallaştırmanın son yıllarda popüler olmasında en büyük etkendir. Tek bir sunucu üzerinde kaynakların paylaşımı sayesinde daha uygun maliyetli projeler çıkmaktadır. Sistem yönetimi ve lisans maliyetlerinde büyük faydalar sağlamaktadır. Doğru yapılandırılma yapılmadığı zaman ise, sanallaştırma performans kayıplarına yol açmaktadır, bu da getirdiği maliyet avantajını kaybettirmektedir.
  • Enerji Tasarrufu: Daha az sunucu ile sanallaştırmaya geçildiğinde, fiziksel sunucuların tükettiği elektrik ve soğutma maliyetleri azalacaktır.
  • Sistem Yönetimi: Fiziksel sunucuya oranla, işletim sistemi kurulumları ve yapılandırılmaları çok daha basittir. Bilgi Teknolojileri bölümlerine büyük kolaylıklar sağlamaktadır.
  • Felaket Kurtarma Senaryolarında Kolaylık: Sanal makinaların replikasyonu, fiziksel makinalara göre çok daha kolaydır. Sanal makinalar donanımdan bağımsız çalıştıkları için, yedekleme-geri yükleme gibi işlemler fiziksel makinalara göre daha basit olmaktadır.
  • Yüksek Erişebilirlik: Vmotion ve Migration özellikleri ile, çalışan bir sistemde, sistem aksamasına uğramadan yüksek erişebilirlik sunmaktadır.
  • BT’nin Masraf Merkezi İmajından Kurtulması: Çoğu yerde bilgi teknolojileri veya bilgi işlem bölümleri masraf merkezi olarak görülür. Sanallaştırmanın sağladığı maliyet ve yönetimsel avantajlar ile bu imaj artık geride kalmaktadır.

Sistem Uzmanı VS Veritabanı Uzmanı:

Sanallaştırma yapılmadan önce sanal makinaların ihtiyaçlarının önceden belirlenmesi gerekir. Mevcut fiziksel bir makinada çalışan Sql Server’ın performansı izlenerek, ne kadar işlemci kullanımı olduğu, ne kadar ram ihtiyacı ve disk alanın hesaplanması gerekmektedir.

    Sql Server’ın sanallaştırması iki türlü olmaktadır. Yeni bir sistem kurulumunda veya mevcut sistemin fizikselden sanala taşınma durumda. Bu iki durumda da sistem uzmanı ile veritabanı uzmanları (Dba) karşı karşıya gelmektedirler. Yapısında Dba olmayan kurumlarda ise, yazılımcılar veya yazılım firmaları ile sistem uzmanları Sql Server konusunda çatışma yaşamaktadırlar.

    Sistemci Sql Server’ı, fazla işlemci kullanmayan, işlemciden ziyade çok fazla ram ihtiyacı olan, ne kadar fazla ram olursa o kadar kullanır olarak gören ve çok fazla disk alanı isteyen bir sunucu olarak görür.

    Aslında olması gereken, tek bir işlemci üzerindeki tüm çekirdekleri atamak yerine, iki işlemcinin ihtiyaç kadar olan çekirdeklerini eşit olarak atamak en ideal olan işlemci yapılandırılmasıdır. Sql Server birçok işlemi memory üzerinde yaptığından, memory boyutunun fazla olması tabiki önemlidir ama esas performans açısından memory’lerinde hızlı olması gerekmektedir. Çok yüksek miktarda uygun maliyetli memoryler yerine çok daha hızlı düşük kapasiteli ideal boyuttaki memory’ler atamak önemlidir. Gereksiz yere büyük disklere ihtiyaç yoktur. I/O değerleri yüksek performanslı diskler Sql Server’ın ihtiyaç duyduğu donanımlardandır.

    Ufak gibi gözüken fakat dikkat edilmesi gereken diğer noktalar ise; Sql Server’ın kurulu olduğu sunucu üzerine başka bir uygulama kurulmamasıdır. Bu sunucunun bir application server gibi kullanılmaması gerekmektedir. Yapılan en büyük yanlışlardan biri de, sunucuya atanan memory’nin hiçbir ayar yapmadan hepsini Sql Server’un kullanımına sunmaktır. Bu gibi sunucularda sık sık hatalarla karşılaşılır. Örnek olarak 64gb’lık bir sunucunuz var, bunun 4gb’tını hpervisor için, %10’unu da Windows Server için ayırmalısınız. Sanalda bu makine için 60gb’lık ram oluşturulmalı ve Sql Server içinde de 54 gb’lık en fazla kullanacağı ram kapasitesi ayarlanmalıdır ki bu sunucu düzgün hizmet verebilsin.

Sanal Makine Kaynak Yapılandırılması:

İşlemci Yapılandırılması:

Sql Server’ın kurulacağı sanal makinanın işlemci sayısını belirlerken, ilk önce gereksinim neyi karşılıyor ise o kadar sanal işlemci (vCpu) atamak yeterli olacaktır. Fiziksel bir sunucudan aktarılan Sql Server’daki işlemci sayısı sanalda birebir aynı olduğunda, gerekli ihtiyacı karşılamayabilir. Sanal ortamda daha fazla, sanal işlemciye ihtiyaç duyabilmektedir.

Sanal ortamlarla ilk karşılaştığımızda, elimizdeki fiziksel işlemcilerden çok daha fazla sanal işlemci gördük. Ne kadar çok fazla sanal işlemci demek, o kadar çok sunucumuza iş yükü getirir. Sql Server’a bol bol sanal işlemci atadığınızda, çok daha hızlı bir Sql Server’ınız olacağı anlamına gelmez. Gereksiz yere atanan sanal işlemciler, sunucu (host) üzerinde aşırı yük getirir, bu da sunucunun isteklere yanıt vermesini geciktirir ve performansını düşürür.

    Sanallaştırma ortamında işlemcilerin paylaştırılması bazen sorunlara neden olabilir. Şekil SSV-4’te, Sql server soket1 işlemcisinden çalışıyor, Sql boşa geçtiği zaman application server ile iki fiziksel işlemci paylaştırıldığından, app. Server soket1 e istek gönderebilir. Aynı zamanda Sql server çalışmaya başladığında, fiziksel soket1 üzerinde hem sql hem app. Server çalışmış olur. Bu çalışmada performans kaybına neden olmaktadır. Cross NUMA (Non-Uniform Memory Access) diye adlandırılan problem ortaya çıkacaktır. Plan yapılmadan yapılan işlemci paylaşımlarında bu tarz durumlarla sıkça karşılaşılmaktadır.

SSV-4

    Sanallaştırmada sanal makinaların kapasite boyutlarını yapılandırırken, fiziksel işlemci soketi sayısı, işlemci başına düşen çekirdek sayıları ve memory yapılandırılmasına dikkat edilmelidir. Sanal makinaları ölçeklendirmede bazı hususlar vardır. Aşağıdaki örnekte, 2 adet fiziksel soket, her soket başına 6 çekirdek ve 96 gb toplam memory boyutumuz var. Sanal makinanımızın özellikleri de 4 çekirdek işlemciye ve 32 gb memory’e sahip bir makinadır.

    Sanal makinadaki 4 çekirdek, VM host’tun bir fiziksel soketinde bulunan çekirdek sayılarından az veya eşit olduğu zaman, tüm işlemleri tek bir soket üzerinden yapar. Diğer soket üzerinden çalışma ihtiyacı duymaz, bu atamalar Hypervisor kendisi otomatik olarak yapmaktadır. Hypervisor’un bu şekilde çalışması, sanal makinanın diğer sokete ihtiyaç duymayacağından, sanal makinanın daha performanslı çalışmasını sağlamaktadır. Böyle bir yapılandırma için yapılandırma ayarlarından bir değişiklik yapılmasına gerek yoktur, Hypervisor otomatik olarak algılayarak, arka planda yapılandırmayı kendisi yapmaktadır.

,

SSV – 5

    Eğer fiziksel soketteki çekirdeklerden daha fazla bir sanal makinamız var ise, 4 çekirdek değil de, 8 çekirdeğe sahip bir sanal makina için, yukarıda bahsettiğimiz durum gerçekleşmeyecektir. Bir fiziksel soketimizde 6 çekirdek olduğu için, sanal makina diğer 2. Fiziksel soketi de kullanacaktır. Fakat bu kullanım sırasında, hypervisor tarafında direkt olarak fiziksel sokete bir atama gerçekleşmeyecektir, sanal makina hangi CPU’ları kullanacağına karar veremez ve Co-Scheduling dediğimiz eş zamanlı CPU çalışması böyle bir yapıda bozulacaktır.

    Şekil SSV – 6’da olduğu gibi, fiziksel soketteki 6 çekirdek var, sanal makinadaki çekirdek sayısı 8 olduğundan, hypervisor işlemci atamasını direk fiziksel sokete verememektedir. Cross yani çapraz bir şekilde işlemciyi kullanacaktır, cross olarak Sql Server’ın çekirdekleri kullanması best practice olarak önerilmemektedir. Sanallaştırmada, işlemci yapılandırılmasında karşımıza çıkan olumsuz durumlardan biridir.

SSV – 6

    Virtual NUMA Yapılandırması

    NUMA (Non-Uniform Memory Access) Türkçe’ye çevirmeye çalıştığımızda, Tekdüzen Olmayan Bellek Erişimi olarak çevirebiliriz. NUMA, bazı bellek bölümlerinin daha uzun erişim gecikme sürelerine sahip olduğu çok işlemcili tasarımlar ile kullanılan bir bilgisayar sistemi mimarisidir. Bunun nedeni, sistem belleği ve işlemcilerin birbirlerine bağlanış şeklidir. Bazı bellek bölümleri, çeşitli bağlantı dokusu türleri aracılığıyla tüm işlemciler birbirine bağlı olacak şekilde doğrudan bir veya daha fazla işlemciye bağlanır. Büyük çok işlemcili sistemler için, bu düzenleme bellek çekişmelerinin azalmasını ve sistem performansının artmasını sağlar. Sanallaştırma platformları Vmware ve Hyper-V de NUMA yapılandırılmasını desteklemektedir.

    NUMA mimarisi, memory’i ve CPU’ları NUMA nodeları olarak adlandırılan gruplara böler. Sistemdeki tek işlemciler açısından, bu işlemci ile aynı NUMA nodedun da yer alan memory lokal olarak, başka bir NUMA nodedun da bulunan memory ise remote olarak bilinir. CPU’lar yerel memory’e daha hızlı erişebilir.

    Vmware’de, ESX 5 ve üzeri sistemlerde, sanal makinadaki vCpu (virtual CPU) sayısı, sunucu üzerindeki fiziksel çekirdek sayısını geçtiğinde, sanal makinanın NUMA yapılandırması optimize olamamaktadır.

    Vmware Esx 5 üzeri ve Hyper-V Server 2012 sistemleri, virtual NUMA nodelarının partition olarak çalıştırarak, hypervisor katmanında optimize edebilmektedir. Vmware üzerindeki sanal makinaya ait 8 vCPU veya sanal makinadaki vCPU sayısı, sunucu üzerindeki fiziksel çekirdekten daha fazla olduğu durumlarda bu optimizasyon yapılabilmektedir. Bu yapılandırmayı etkinleştirmek için konfigürasyon parametrelerine “numa.vcpu.min” ayarını eklememiz gerekmektedir.

    Bu yapılandırmadan sonra, vCPU ve memory ataması virtual node’lara bölünerek, 4 vCPU’nun Fiziksel Soket 0’dan, 4 vCPU’nun da Fiziksel Soket 1’den çalışmasını sağlayacaktır. Sql Server sanal makinasını Virtual node’lara böldüğünde, Virtual Node 0’da 32 gb ram ve 4 vCPU, Virtual Node 1’de 32 gb ram ve 4vCPU olduğunu görmekteyiz. Şekil – SSV – 7


SSV – 7

    Bu yapılandırmanın Esx üzerinde nasıl olduğuna bakalım, sanal makinanın Configuration Parametrelerine erişebilmemiz için, sanal makinanın kapalı olması gerekmektedir. Kapalı olan sanal makinamızın Edit Settings bölümünü açıyoruz.


SSV – 8

Options sekmesinde, General satırına tıklıyoruz. Configration Parameters bölümü sanal makinamız kapalı olduğu için aktif durumda.


SSV – 9

Add Row butonuna tıklayarak yeni bir satır ekliyoruz. Eklediğimiz satırın Name kısmına numa.vcpu.min, Value alanına da 2 yazıyoruz.


SSV – 10

Bu parametreyi girdikten sonra, SSV – 7’de gösterildiği gibi, sanal makinamızın vCPU’larını ve Memory atamalarını fiziksel soketlere ayrıştırmış olduk. Bu sayede, büyük yapıdaki sanal makinalara kurulu olan Sql Server’ların dar sanallaştırmadan kaynaklanan Cpu ve memory cross kullanımını engellemiş oluruz.

Vmware Cpu Reservation – Cpu Share

Sanal makinanız başladığı zaman, sanal makinaya ait kaynakların hepsi açıldığı gibi sanal makinaya atanmaz, ne kadar kaynak kullanacak ise, kaynak havuzundan ihtiyacı olan memory ve CPU’yu alır. Sql Server için bu yapı, istenmeyen bir yapıdır, Sql Server açıldığı andan itibaren, host üzerinden memory ve CPU’larının Sql Server sunucusuna atanması gerekmektedir.

Cpu rezervasyonu için, sanal makinanın kapalı olmasına gerek yoktur. Sanal makinanın Edit Settings’ten ayarlarına giriyoruz.


SSV-11

Resources sekmesinden CPU bölümüne geliyoruz, Reservation kısmından sunucuya ne kadar CPU rezerve edeceğimizi Mhz biriminden yazabilmekteyiz. Rezervasyonda komple çekirdek sayılarını rezerve etme gibi bir durum yerine, CPU hızlarını toplam mhz biriminden rezervasyon yapabilmekteyiz.


SSV-12

Turuncu üçgen ile gösterilen şekilde bize host üzerindeki tüm çekirdeklerin toplam hızlarını mhz biriminde göstermektedir, reservation’ı turuncu üçgene kadar getirdiğinizde, tüm CPU’ları sunucuya rezerve etmiş olursunuz, host üzerinde eğer başka sanal makinalar var ise, böyle bir yapıda çok yavaş çalışacaktır. Limit kısmından da sanal makinanın CPU hızına limit koyarak, diğer sanal makinaların CPU hızlarından kullanmamasını sağlayabilirsiniz.

Resource Allocation – Shares bölümü, eğer host üzerinde Sql Server dışında başka sunucular da var ise, bu bölümünden Sql Server işlemcilerine öncelik verebiliriz. Eğer Sql Server host üzerinde tek başına çalışıyor ise bu bölümü kullanmaya gerek yoktur. Sql Server olan bir host da, Sql Server için High share vermek daha doğru olur. CPU Shares ike Reservation’nın farkı, Reservation da Sql Server için CPU kullanımını ayırmaktadır, 8000 mhz olan bir reservation da Sql Server 8000 mhz’ini kendine ayırır. Shares de ise sanal makinaya yüksek veya düşük öncelikli CPU kullanımı verilmektedir, reservation tanımı yapılmadı ise CPU dinamik olarak sunucunun öncelik durumuna göre CPU kullanımını sağlar.

Memory Yapılandırması:

    İşlemci yapılandırmasında shares ve reservation yapılandırması, memory yapılandırması içinde geçerlidir. Memory reservation ve share ayarları için, Edit Settings – Resource sekmesindeki memory alanından düzenlemeleri yapabiliriz.


SSV-13

Vmware, host üzerinde bulunan toplam memory’nin daha fazlasını sanal makinalar için kullandırmaya izin vermektedir. Host üzerinde 64 gb memory olan bir senaryoda, 3 adet sanal makine için her sanal makinaya 24 gb memory atanabilmektedir. Böyle bir yapıda memory overcommit diye tabir edilen, atanan değerin üzerinde bir kullanıma sebep olacaktır. Bu yapılandırmanın başlıca sebebi, boşta memory olduğunda, diğer sanal makinaların boştaki memory kendisinin kullanabilmesidir. Sanal makinalarda tüm memory kullandığında ise ballooning diye tabir edilen, fiziksel memory fazlası kullanımı meydana gelecektir. Bu da memory hızlarında düşüşlere sebebiyet vermektedir.

    Vmware balloning işlemini, sanal makine kurulumundan hemen sonra kurduğumuz Vmware Tools ile birlikte, Vmware Balloon Driver’ı kurmaktadır. Bu driver sahte bir memory kaynağı oluşturarak, sanal makinaya sunucu üzerinde, yeteri kadar memory varmış gibi göstermektedir. Sql Server proseslerinin hata almasındaki en büyük sebeplerden biri de memory ballooning yaşanmasıdır. Sql Server yapı itibari ile hızlı ve stabil çalışan memorylere ihtiyaç duymaktadır.

    Vmware üzerinde çalışan Sql Server’ın önerilen konfigürasyonu özetle şu şekilde olmalıdır;

  • Host’un sahip olduğu memory’den daha fazla memory Sql Server sunucusuna verilmemelidir.
  • Host üzerinde birden çok sanal makine var ise, ve bu sanal makinalar için kullanılan memory değeri, host memory değerinden fazla olduğunda Sql Server sunucusu için memory reservation yapılmalıdır. Böylelikle Sql Server’ın kullanacağı memory ayrılmış olur, diğer sanal makinalar ile kaynak havuzundan memory’i paylaşmamış olur.
  • Sql Server özelliklerinde Lock Pages in Memory seçeneği kullanılmalıdır. Bir ballooning durumunda memory baskısı en aza indirgenmiş olur.
  • Sql Server’ın minimum ve maximum server memory değeri atanması halinde, buffer pool’u Sql Server yöneteceğinden bu ayar yapılmalıdır.
  • Host üzerinde fiziksel iki işlemci bulunduğunda, Sql Server’ın bu işlemcileri kullanırken cross numa olarak kullanmaması için numa.vcpu.min değeri ayarlanmalıdır.

Vmware Performans İzleme

    Sql Server yapılandırmasından sonra, Vmware üzerinde Sql Server’ın performansını izleyerek, Sql Server’ın host üzerindeki değerlerini gözlemleyebiliriz. İlk olarak SSH bağlantı ile Vmware’in konsoluna bağlanarak esxtop komutunu inceleyeceğiz.

    Vmware konsoluna bağlanabilmemiz için Puttu programını aşağıdaki linkten indiriyoruz.

http://www.putty.org/

Putty programını açmadan, Vmware host üzerinde SSH servisinin çalışıyor olması gerekiyor, öncelikle bu servis nasıl açılır buna bakalım.

Host’un Configuration sekmesine geliyoruz, buradan Software – Security Profile bölümünü açıyoruz. Security Profile bölümünün sağ üst köşesinde bulunan Properties’e giriyoruz.


SSV-14

SSH’ın üzerine tıkladıktan sonra aşağıdaki Option bölümüne giriyoruz. Servisi start diyerek başlatıyoruz.


SSV-15

    Bu ayarı tamamladıktan sonra indirdiğimiz Putty.exe programını açıyoruz. Putty programında, Host name kısmına Vmware hostun adı veya Ip adresini yazıyoruz. Connection type: SSH, Port: 22 varsayılan olarak gelmektedir.


SSV-16

Open ile SSH bağlantısını başlatıyoruz, karşımıza gelen komut satırında ilk olarak Login bilgisi sormakta, Esx hostumuzdaki kullanıcı adı ve şifreyi girerek hoşta login oluyoruz.


SSV-17

Komut satırına esxtop yazarak, Vmware’in host seviyesinde performans sayaçlarını görebilmekteyiz.


SSV-18

Bu ekranda, host üzerinde çalışan ve hypervisor işlemlerini de getirmektedir, biz sadece host üzerinde çalışan sanal makinalara bakacağımızdan SHIFT + V tuş kombinasyonuna tıklayarak, sanal makinaları ekrana getiriyoruz.


SSV-19

Esxtop değerlerini inceleyelim;

%RDY time– İşlemcinin aktif çalışma yüzdesini gösterir

%CSTP – Co-Scheduling olan işlemcilerin yüzdesel değerlerini gösterir, sanal makinalar arası işlemcilerin diğer sanal makinalar ile paylaştığı durumlarda buradaki yüzdesel değer artar.

%WAIT – %IDLE – Buradaki değerler yüksek olduğunda, CPU üzerindeki iş yüklerinin yoğun olmadığı anlamına gelir.

&MLMTD – Eğer burada bir değer yazıyor ise, sanal makine özelliklerinde CPU’ya limit verilmiştir demektir, verilen limit değerleri bu alanda çıkmaktadır.

Soru işaretine basarak ? diğer disk, memory gibi değerleri de görebiliriz.


SSV-20

Memory kullanımı


SSV-21

Klavye kısa yolları ile, d – m – c ye tıklayarak ekranlar arası geçiş yapılabilmektedir.

Sanallaştırmanın Getirdiği Kısıtlamalar

    Sql Server’ın sanallaştırma üzerinde çalışmasında, performans açısından bazı sıkıntılar olduğunu makalenin başında bahsetmiştik. Bu sıkıntılar nelerdir, Sql Server’ı sanal sistemler üzerine kurduğumuzda ne gibi zorluklarla karşılaşırız bunlara bakalım.

    Vmware ve Hyper-V’de sanal makinaların donanım özelliklerinde kısıtlamalar mevcuttur. Her yeni versiyonda bu değerler yükseltilsede, Sql Server iş yüklerinde belli bir limit getirmektedir. CPU ve memory atamalarında bu limitlerin dahilinde kalmak zorunda oluyoruz. Vmware Esx 6 ile bu limitler oldukça arttırılmıştır. VM başına 128 vCPU, 4 TB memory ve 62 TB disk kapasitesine izin vermektedir. Bu özelliklerden daha fazla donanım ihtiyacınız olduğunda sanallaştırma size uygun olmayacaktır.

    Failover cluster yapısında, Vmware’deki shared disk ayarlarından dolayı IO sıkıntısı yaşanmaktadır. Raw Device Mappings sadece fiber channel desteği bulunduğundan farklı bağlantılar için destek verememektedir.

    Vmware, storagelerde 1gb/s iSCSI kullanıldığından yoğun Sql Server iş yüklerinde dar boğaza sebebiyet verebilmektedir. Fiziksel sunucudaki direct-attached storage yapısı SAN’lere göre daha ucuz olduğundan tercih sebebi olabilmektedir.

    Bu teknik kısıtlamaların yanı sıra, Vmware gibi kendine özgü bir yapısı olan bir sistemi yönetmek, sistem ekibine ekstra yük getirecektir, Windows sunucuları yönetmenin yanında sanal sistemleri de yönetmek için yetkin personele ihtiyaç duyulmaktadır. Sanallaştırma çok yaygınlaşmış olsa da, günümüzde halen birçok Sql Server fiziksel sunucularda çalıştığını unutmamak gerekir.

    Bu makalede, Sql Server’ın sanal sistemlerdeki yapılandırılmasının nasıl olacağı, sanallaştırma yapılan Sql Server sunucularında yapılan yanlışlıkları anlatmaya çalıştım. Sıkça karşılaştığımız Sql Server’ın sanala geçişindeki performans kayıplarını minimize etmek açısından, Sql Server sunucularının sanallaştırmaya geçmeden önce kaynak planlamasının doğru bir şekilde yapılması gerekmektedir.