Natknąłem się na dziwny problem polegający na tym, że 64-bitowy program SQL Server 2016 Standard Edition ograniczył się dokładnie do połowy przydzielonej mu pamięci (64 GB z 128 GB).
Dane wyjściowe @@VERSION
to:
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 22 grudnia 2017 11:25:00 Prawa autorskie (c) Microsoft Corporation Standard Edition (64-bit) w systemie Windows Server 2012 R2 Datacenter 6.3 ( Kompilacja 9600:) (Hypervisor)
Dane wyjściowe sys.dm_os_process_memory
to:
Kiedy pytam sys.dm_os_performance_counters
, widzę, że Target Server Memory (KB)
jest o 131072000
i Total Server Memory (KB)
jest prawie o połowę niższa o 65308016
. W większości scenariuszy zrozumiałbym to jako normalne zachowanie, ponieważ SQL Server nie określił jeszcze, że musi przydzielić sobie dodatkową pamięć.
Jednak już od ponad 2 miesięcy „utknął” na poziomie ~ 64 GB. W tym czasie wykonaliśmy znaczną ilość operacji wymagających dużej ilości pamięci na niektórych bazach danych i dodaliśmy do instancji prawie 40 kolejnych baz danych. Łącznie siedzimy na 292 bazach danych, każda z wstępnie przydzielonymi plikami danych o wielkości 4 GB z 256 MB szybkością wzrostu i 2 GB plików dziennika z szybkością wzrostu 128 MB. Pełną kopię zapasową wykonuję co noc o godzinie 00:00, a kopie zapasowe dziennika transakcji rozpoczynam od poniedziałku do piątku od godziny 6:00 do 20:00 w odstępach co 15 minut. Te bazy danych mają stosunkowo niską ogólną przepustowość, ale jestem sceptyczny, że coś jest nie tak, biorąc pod uwagę, że SQL Server nie wkradł się w kierunkuTarget Server Memory
naturalnie poprzez nowe dodatki do bazy danych, normalne wykonywanie zapytań, a także uruchomione potoki ETL zajmujące dużo pamięci.
Sama instancja programu SQL Server znajduje się na zwirtualizowanym (VMware) serwerze Windows Server 2012R2 z 12 procesorami, 144 GB pamięci (128 GB na SQL Server, 16 GB zarezerwowane dla systemu Windows) i 4 wszystkimi dyskami wirtualnymi, które znajdują się na szczycie sieci vSAN z 15K dyskami SAS . System Windows znajduje się naturalnie na dysku C: 64 GB z plikiem strony o wielkości 32 GB. Pliki danych znajdują się na dysku D: 2 TB, pliki dziennika znajdują się na dysku L: 2 TB, a tempdb na dysku T: 256 GB z plikami 8x16 GB bez automatycznego wzrostu.
Zweryfikowałem, że na serwerze nie ma innych wystąpień SQL Server MSSQLSERVER
.
Ten serwer jest w całości poświęcony tylko wystąpieniu SQL Server, więc nie mamy na nim uruchomionych żadnych innych aplikacji ani usług, które mogłyby zużywać pamięć.
Używam RedGate SQL Monitor do analizy, a poniżej znajduje się historia ostatnich 18 dni Total Server Memory
. Jak widać, wykorzystanie pamięci pozostało całkowicie w zastoju, poza pojedynczym wzrostem ~ 300 MB na początku kwietnia.
Co może być tego przyczyną? Na co mogę przyjrzeć się bliżej, aby ustalić, dlaczego SQL Server nie chce używać dodatkowych 64 GB + przydzielonej pamięci?
Wynik działania sp_Blitz
:
sp_Blitz @OutputType = 'markdown', @CheckServerInfo = 1;
Priorytet 50: Wydajność :
Harmonogramy procesorów offline - niektóre rdzenie procesorów nie są dostępne dla programu SQL Server z powodu maskowania koligacji lub problemów z licencjonowaniem.
Węzły pamięci offline - ze względu na problemy z maskowaniem koligacji lub licencjonowaniem część pamięci może być niedostępna.
Priorytet 50: Niezawodność :
- Zdalny DAC wyłączony - Zdalny dostęp do dedykowanego połączenia administracyjnego (DAC) nie jest włączony. DAC może znacznie ułatwić zdalne rozwiązywanie problemów, gdy SQL Server nie odpowiada.
Priorytet 100: Wydajność :
Wiele planów dla jednej kwerendy - 300 planów dla pojedynczego zapytania w pamięci podręcznej planu - co oznacza, że prawdopodobnie mamy problemy z parametryzacją.
Server Triggers Enabled
Trigger serwera [RG_SQLLighthouse_DDLTrigger] jest włączony. Upewnij się, że rozumiesz, co robi ten wyzwalacz - im mniej pracy, tym lepiej.
Trigger serwera [SSMSRemoteBlock] jest włączony. Upewnij się, że rozumiesz, co robi ten wyzwalacz - im mniej pracy, tym lepiej.
Priorytet 150: Wydajność :
Zapytania wymuszające wskazówki dotyczące dołączania - od ponownego uruchomienia zarejestrowano 1480 instancji podpowiedzi dotyczących dołączania. Oznacza to, że zapytania kierują optymalizatorem SQL Server, a jeśli nie wiedzą, co robią, może to spowodować więcej szkody niż pożytku. To może również wyjaśniać, dlaczego wysiłki związane z dostrajaniem DBA nie działają.
Zapytania wymuszające wskazówki dotyczące zamówienia - od ponownego uruchomienia zarejestrowano 2153 przypadków podpowiedzi dotyczących zamówień. Oznacza to, że zapytania kierują optymalizatorem SQL Server, a jeśli nie wiedzą, co robią, może to spowodować więcej szkody niż pożytku. To może również wyjaśniać, dlaczego wysiłki związane z dostrajaniem DBA nie działają.
Priorytet 170: Konfiguracja pliku :
Systemowa baza danych na dysku C.
master - główna baza danych ma plik na dysku C. Umieszczenie systemowych baz danych na dysku C grozi awarią serwera, gdy zabraknie miejsca.
model - baza danych modelu ma plik na dysku C. Umieszczenie systemowych baz danych na dysku C grozi awarią serwera, gdy zabraknie miejsca.
msdb - baza danych msdb ma plik na dysku C. Umieszczenie systemowych baz danych na dysku C grozi awarią serwera, gdy zabraknie miejsca.
Priorytet 200: Informacyjny :
Zadania agenta uruchamiane jednocześnie - Wiele zadań agenta programu SQL Server jest skonfigurowanych do jednoczesnego uruchamiania. Aby uzyskać szczegółowe informacje o harmonogramie, zobacz zapytanie w adresie URL.
Tabele w głównym wzorcowej bazie danych - Tabela CommandLog w głównej bazie danych została utworzona przez użytkowników końcowych w dniu 30 lipca 2017 17:22. Tabele w głównej bazie danych mogą nie zostać przywrócone w przypadku awarii.
TraceFlag On
Flaga śledzenia 1118 jest włączona globalnie.
Flaga śledzenia 1222 jest włączona globalnie.
Flaga śledzenia 2371 jest włączona globalnie.
Priorytet 200: Domyślna konfiguracja serwera :
Agent XPs - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 1.
domyślna suma kontrolna kopii zapasowej - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 1.
domyślna kompresja kopii zapasowej - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 1.
próg kosztu dla równoległości - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 5 i została ustawiona na 48.
maksymalny stopień równoległości - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 12.
maksymalna pamięć serwera (MB) - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 2147483647 i została ustawiona na 128000.
optymalizuj pod kątem obciążeń ad hoc - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 1.
pokaż zaawansowane opcje - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 1.
xp_cmdshell - Ta opcja sp_configure została zmieniona. Jego domyślna wartość to 0 i została ustawiona na 1.
Priorytet 200: Niezawodność :
Rozszerzone procedury składowane w systemie głównym
master - rozszerzona procedura składowana [sqbdata] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura składowana [sqbdir] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura przechowywana [sqbmemory] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura składowana [sqbstatus] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - rozszerzona procedura składowana [sqbtest] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura składowana [sqbtestcancel] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura składowana [sqbteststatus] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura składowana [sqbutility] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
master - Rozszerzona procedura składowana [sqlbackup] znajduje się w głównej bazie danych. CLR może być w użyciu, a główna baza danych musi być teraz częścią planu tworzenia kopii zapasowych / odzyskiwania.
Priorytet 210: Domyślna konfiguracja bazy danych :
Czytaj zatwierdzone izolowanie migawek włączone - To ustawienie bazy danych nie jest domyślne.
RedGate
RedGateMonitor
Snapshot Isolation Enabled - To ustawienie bazy danych nie jest domyślne.
RedGate
RedGateMonitor
Priorytet 240: Statystyki czekania :
- 1 - SOS_SCHEDULER_YIELD - 1770,8 godzin oczekiwania, średni czas oczekiwania 115,9 minut na godzinę, oczekiwanie sygnału 100,0%, 1419212079 zadań oczekiwania, średni czas oczekiwania 4,5 ms.
Priorytet 250: Informacyjny :
- SQL Server działa na koncie NT Service - pracuję jako NT Service \ MSSQLSERVER. Chciałbym mieć zamiast tego konto usługi Active Directory.
Priorytet 250: Informacje o serwerze :
Domyślna zawartość śledzenia - Domyślny ślad zawiera 36 godzin danych między 14 kwietnia 2018 23:21 a 16 kwietnia 2018 11:13. Domyślne pliki śledzenia znajdują się w: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.MSSQLSERVER \ MSSQL \ Log
Dysk C Space - 196816.00 MB bezpłatnie na dysku C.
Dysk D Space - 894823.00 MB bezpłatnie na dysku E.
Dysk L Space - 1361367.00 MB bezpłatnie na dysku F.
Dysk T Space - 114441.00 MB bezpłatnie na dysku G.
Sprzęt - procesory logiczne: 12. Pamięć fizyczna: 144 GB.
Sprzęt - Konfiguracja NUMA
Węzeł: 0 Stan: ONLINE Plany online: 4 Plany offline: 2 Grupa procesorów: 0 Węzeł pamięci: 0 Zarezerwowany VAS pamięci GB: 186
Węzeł: 1 Stan: OFFLINE Plany online: 0 Plany offline: 6 Grupa procesorów: 0 Węzeł pamięci: 0 Zarezerwowany VAS pamięci GB: 186
Natychmiastowa inicjalizacja pliku włączona - konto usługi ma uprawnienia do wykonywania zadań konserwacji woluminu.
Plan zasilania - Twój serwer ma procesory 2,60 GHz i jest w zrównoważonym trybie zasilania - Uch ... chcesz, aby twoje procesory działały z pełną prędkością, prawda?
Ostatnie uruchomienie serwera - 9 marca 2018 07:27
Nazwa serwera - [zredagowany]
Usługi
Usługa: SQL Server (MSSQLSERVER) działa na koncie usługi NT Service \ MSSQLSERVER. Czas ostatniego uruchomienia: 9 marca 2018 07:27. Typ uruchomienia: Automatyczny, obecnie uruchomiony.
Usługa: SQL Server Agent (MSSQLSERVER) działa pod kontem usługi LocalSystem. Czas ostatniego uruchomienia: nie pokazano. Typ uruchomienia: Automatyczny, obecnie uruchomiony.
Ostatnie uruchomienie programu SQL Server - 9 marca 2018 06:27
Usługa SQL Server - wersja: 13.0.4466.4. Poziom łatki: SP1. Aktualizacja zbiorcza: CU7. Edycja: edycja standardowa (wersja 64-bitowa). Grupy dostępności włączone: 0. Status menedżera grup dostępności: 2
Serwer wirtualny - Typ: (HYPERVISOR)
Wersja systemu Windows - korzystasz z całkiem nowoczesnej wersji systemu Windows: era Server 2012R2, wersja 6.3
Priorytet 254: Podsumowanie :
- Dziennik kapitana: spóźnij się i coś ...
select @@version
i select * from sys.dm_os_process_memory
do pytania. Czy próbowałeś spojrzeć na wartość Total Server Memory (KB)
z licznika perfmon?
Total Server Memory (KB)
został dostarczony z sys.dm_os_performance_counters
.