Wirtualizacja baz danych a Dynamic Memory Cezary Ołtuszyk coltuszyk.wordpress.com
Plan spotkania I. Wprowadzenie do tematu II. III. IV. Problem 1: Spadek wydajności maszyny wirtualnej Problem 2: SQL Server nie pobiera RAM Podsumowanie
Wprowadzenie do tematu Jednym z podstawowych założeń związanych z przenoszeniem fizycznej infrastruktury informatycznej do środowisk wirtualnych jest maksymalne wykorzystanie dostępnych zasobów. Dzięki posadowieniu wielu serwerów (gości) na jednej maszynie hostującej możemy zaoszczędzić pieniądze związane nie tylko z zakupem sprzętu komputerowego lecz także licencji. Wraz z postępem technologicznym ilość skonsolidowanych w ten sposób serwerów rośnie
Wprowadzenie do tematu Dynamic Memory jest opcją, która pomaga nam skonsolidować więcej maszyn wirtualnych na pojedynczym hoście hyper-v. Jej działanie polega komunikowaniu się maszyny wirtualnej z systemem operacyjnym hosta w celu dynamicznego alokowania jej pamięci RAM. Dzięki temu zabiegowi maszyny wirualne nie pobierają więcej pamięci operacyjnej niż jest im aktualnie potrzebne.
Wprowadzenie do tematu SQL Server od wersji 2005 wspiera funkcjonalność zwaną hot add memory, która pozwala na dodanie pamięci RAM do fizycznego serwera baz restartu usługi SQL. Opcja ta działa równie dobrze w środowisku wirtualnym. Podczas dynamicznej alokacji RAM, SQL Server może od razu z tej pamięci skorzystać. Do niedawna była ona zarezerwowana jedynie dla wersji Enterprise. Wraz z ukazaniem się SQL Server 2012 jest ona obecna także w wersji Standard, pod warunkiem, że usługa ta została zwirtualizowana
Problem 1: Spadek wydajności maszyny wirtualnej Przenosząc fizyczne serwery do środowisk wirtualnych zazwyczaj konsolidujemy je. Podczas planowania zasobów wirtualnych maszyn należy przeanalizować w jaki sposób jedna maszyna będzie miała wpływ na inne znajdujące się na tym samym hoście. Dynamic memory jest opcją, która z założenia zależy od konfiguracji pozostałych (hostowanych) maszyn. SQL Server jest usługą pamięciożerną, a zwirtualizowanie jej i użycie dynamic memory może spowodować ryzyko zewnętrznej presji na RAM oraz utratę wydajności.
Problem 1: Spadek wydajności maszyny wirtualnej Aby zaprezentować tego typu problem wykonałem następujący test: 1. Zainstalowałem usługę HYPER-V na hoście z 16GB RAM i WINDOWS 2008R2 SP1 2. Stworzyłem maszynę wirtualną z zainstalowanym WINDOWS 2008R2 SP1 i SQL Server 2008R2 3. Zadeklarowałem jej pamięć jako dynamiczną w zakresie 2000-14000MB 4. Wykonałem pamięciożerne zapytanie i zmierzyłem jego czas 5. Włączyłem drugą maszynę, która na sztywno pobiera 8000MB 6. Ponownie wykonałem zapytanie na maszynie pierwszej 7. Zmniejszyłem ilość pamięci RAM dla SQL Server 8. Wykonałem zapytanie po raz trzeci
Problem 1: Spadek wydajności maszyny wirtualnej Zapytanie 1 Zapytanie 2 Zapytanie 3 Startup RAM 2000MB 2000MB 2000MB Maximum RAM 14000MB 14000MB 6500MB* Zużyta pamięć 12438MB 7378MB 7392MB Czas wykonania 3 min 18sek 4 min 16 sek 3 min 31 sek Włączona dodatkowa maszyna Nie Tak Tak * Pamięć okrojona po stronie SQL Server-a Włączenie dodatkowej maszyny gościa miało negatywny wpływ na wydajność SQL Server. W momencie gdy zmniejszymy maksymalną ilość RAM używaną przez usługę wydajność wraca do normy.
Problem 1: Spadek wydajności maszyny wirtualnej Po włączeniu drugiej wirtualej maszyny opcja dynamic memory zaczęła działać i host hyper-v zabrał część RAM pierwszej z maszyn. Niestety usługa SQL nie lubi oddawać zaalokowanej pamięci i nadal zużywa około 10GB. System operacyjny zrzucił problematyczny naddatek do pliku wymiany.
Problem 1: Spadek wydajności maszyny wirtualnej
Problem 2: SQL Server nie pobiera RAM Drugim problemem jaki możemy napotkać wirtualizując nasze środowisko jest sytuacja w której SQL Server nie chce pobrać dodatkowej pamięci RAM. Aby ten problem zaprezentować wykorzystałem użytą wcześniej maszynę wirtualną z SQL Server 2008R2 oraz sprawdzone w boju zapytanie. Maszyna ma zmienione ustawienia, tak aby startup memory wynosiło 500MB. Dodatkowo w zapytaniu usunąłem klauzulę TOP, tak aby maksymalnie obciążyć serwer SQL.
Problem 2: SQL Server nie pobiera RAM Włączenie maszyny Odpalenie zapytania Po 10 minutach Hot add memory w SQL Server ma pewne ograniczenie: 16 x Startup RAM Po 30 minutach
Podsumowanie Dynamic memory jest opcją pozwalającą na większą konsolidację wirtualnych serwerów SQL Server posiada funkcję hot add memory, która współgra z dynamiczną alokacją pamięci Planując użycie dynamic memory powinniśmy zwrócić uwagę na interakcję pomiędzy maszynami (presja na pamieć) Używajmy lock pages in memory Pamiętajmy o limicie 16 x Startup RAM