Jak dobrać max server memory?
Czy kiedykolwiek mieliście problemy z poprawnym ustawieniem max server memory? Jaka powinna być wartość parametru na maszynie z 32GB RAM z 4 procesorami i czy ta sama wartość może być na pudle z 32GB RAM i 8 procesorami? Okazuje się że jest dość prosty algorytm, który pozwala określić te wartości:
Poniższe wartości są dla “najgorszego możliwego przypadku” – czyli można ustawić więcej … algorytm wygląda następująco:
[max server memory] = [RAM] – [system operacyjny] – [wątki robocze SQL Server] – [linked servery itp] – [inne aplikacje]
- system operacyjny powinien dostać ok 2GB
- wątki robocze – każdy wątek w zależności od typu maszyny zabiera różną ilość pamięci (x32 – 0.5MB, x64 – 2MB, IA64 – 4MB); liczba wątków jest określana na podstawie tabeli (chyba że administrator zmodyfikował to przy pomocy sp_configure ‘max worker threads’):
CPU / 32bit / 64bit
1-4 / 256 / 512
4-8 / 288 / 576
8-16 / 352 / 704
16-32 / 480 / 960
- inne części MemToLeave – linked servery, xp, com – ok 1GB
- inne aplikacje – w zależności od potrzeb – zwykle nie potrzebują więcej niż 3GB (no chyba że jest to inna instancja SQL Server)
Przykład:
Maszyna A:
CPU: 8, RAM 32GB, x64
max server server memory = 32 – 2 – ~1,1 – 1 => ~28GB
Maszyna A:
CPU: 8, RAM 32GB, x32
max server server memory = 32 – 2 – 0,2 – 1 => ~29GB
Jak widać całość okazuje się dość prosta i zdecydowanie warto zastosować ten prosty schemat do naszych serwerów ;-)