Jak zrównoważyć pamięć SQL Server z pamięcią SQL Server Analysis Services

11

Mamy wiele systemów o tej samej konfiguracji

  • Jeden serwer (wirtualny lub fizyczny)
  • Uruchamianie programu SQL Server (SQL) i SQL Server Analysis Server (AS)
  • wiele rdzeni
  • 16 GB pamięci RAM

Każdej nocy SQL Server wykona około 2-3 godzin przetwarzania, a następnie 2-3 godziny przetwarzania AS. Następnie w ciągu dnia odpytuje się tylko AS.

Zakładając, że jest to serwer dedykowany i żadne inne aplikacje nie są niepokojące oraz że oba zestawy przetwarzania są całkowicie synchroniczne - bez nakładania się zawsze jeden po drugim - jak najlepiej ustawić limity pamięci serwera SQL i AS.

Powodem pytania jest to, że jeśli nie ustawię limitu SQL, zajmie on całą dostępną pamięć. Jednak - rozumiem, że SQL szczęśliwie zrzeknie się tej pamięci, jeśli:

  • Nie używa go i

  • Żąda tego inna usługa / program.

Z logicznego punktu widzenia uważam, że zezwól SQLowi na zabranie tyle, ile potrzebuje, ale nie jestem pewien co do AS TotalMemoryLimit. Nie jestem pewien, czy AS zrezygnuje ze swojej pamięci. W rzeczywistości czytanie więcej prowadzi mnie do przekonania, że ​​błędem jest pozwolić, aby to wszystko zabrało.

Czy to oznacza, że ​​muszę ustawić limity dla obu? Jestem zdezorientowany co do najlepszych praktyk i tego, co musimy zmierzyć, biorąc pod uwagę, że procesy się nie pokrywają.

Mam nadzieję, że to ma sens.

Preet Sangha
źródło

Odpowiedzi:

9

Myślę, że można zmusić ręce obu służb do wykonania zaplanowanego zadania lub usługi, które:

(a) przed nocnym przetwarzaniem programu SQL Server zamyka usługę SSAS i zwiększa pamięć przydzieloną do programu SQL Server

(b) po zakończeniu przetwarzania programu SQL Server zmniejsza maksymalną pamięć serwera i ponownie uruchamia program SQL Server

(c) uruchamia SSAS

Zakłada się, że SSAS nie musi być online podczas przetwarzania programu SQL Server. W przeciwnym razie zmień (a) z „zamyka” na „uruchamia się ponownie” ... dopóki SSAS nie aktywnie nic robi podczas przetwarzania programu SQL Server, nie powinno być obawy, że odzyska pamięć.

Zakłada się również, że chcesz, aby każda usługa nakładała się na zużycie pamięci i używała tej samej pamięci w różnych momentach - jestem pewien, że istnieją sposoby z powinowactwem / NUMA itp., Aby całkowicie oddzielić przestrzeń operacyjną lub, w najgorszym przypadku, hostować je na różnych maszynach.

Aaron Bertrand
źródło
Myślę, że być może powinniśmy zrestartować SQL również po przetwarzaniu SASS - ponieważ wykonuje on duży odczyt (hurtownia danych).
Preet Sangha,
Właściwie o tym myśląc - czy ponowne uruchomienie serwera SQL nie wpłynie na całe przetwarzanie SQL?
Preet Sangha
1
@ Preet tak, czy nie o to chodzi?
Aaron Bertrand
7

Czy SQL i SSAS muszą kiedykolwiek działać w tym samym czasie? Jeśli nie, czy jesteś w 100% pewien?

Chciałbym sprawdzić ustawienie pamięci dla SQL i SSAS, aby zobaczyć, czy mogą ze sobą współpracować.

Będziemy musieli zostawić trochę pamięci na system operacyjny, inne procesy i alokacje wielostronicowe. Być może 4G?

Spróbuj czegoś takiego ...

Po stronie SQL ustaw Max Memory Server na 12G, a Min Server Memory na 6G.

Po stronie SSAS ustaw TotalMemoryLimit na 12G, a LowMemoryLimit na 6G.

Nie włączaj także opcji Blokuj strony w pamięci.

Wypróbuj kilka iteracji, zwiększając lub zmniejszając te liczby.

Jeśli to po prostu nie działa, a wiesz na pewno, że SQL i SSAS nie muszą działać w tym samym czasie, to spróbuję zasugerować Aaronowi planowanie zadań w celu wyłączenia i włączenia usług.

Steven
źródło