Rozwiąż problemy z brakiem pamięci
Dotyczy:programu SQL Server
In-Memory OLTP używa więcej pamięci i w inny sposób niż program SQL Server. Istnieje możliwość, że ilość zainstalowanej i przydzielonej pamięci dla In-Memory OLTP staje się niewystarczająca dla rosnących potrzeb. Jeśli tak, może zabraknąć ci pamięci. W tym temacie opisano sposób odzyskiwania po sytuacji OOM. Zobacz Monitorowanie i rozwiązywanie problemów z użyciem pamięci, aby uzyskać wskazówki, które mogą pomóc uniknąć wielu sytuacji dotyczących systemu OOM.
Omówione w tym temacie
Temat | Przegląd |
---|---|
Rozwiązywanie błędów przywracania bazy danych z powodu braku pamięci (OOM) | Co zrobić, jeśli zostanie wyświetlony komunikat o błędzie "Operacja przywracania nie powiodła się dla bazy danych "<databaseName>" z powodu niewystarczającej ilości pamięci w puli zasobów "<resourcePoolName>". |
Rozwiązywanie skutków warunków niskiej pamięci lub OOM na obciążenia | Co zrobić, jeśli zauważysz, że problemy z małą ilością pamięci negatywnie wpływają na wydajność. |
Rozwiązywanie problemów z alokacją strony z powodu niewystarczającej ilości pamięci, gdy wystarczająca ilość pamięci jest dostępna | Co zrobić, jeśli zostanie wyświetlony komunikat o błędzie "Brak zezwalania na alokacje stron dla bazy danych "<databaseName>" z powodu niewystarczającej ilości pamięci w puli zasobów "<resourcePoolName>". ..." gdy dostępna pamięć jest wystarczająca do wykonania operacji. |
najlepsze rozwiązania dotyczące używania In-Memory OLTP w środowisku maszyny wirtualnej | Co należy pamiętać podczas używania In-Memory OLTP w środowisku zwirtualizowanym. |
Rozwiązywanie problemów z błędami przywracania bazy danych z powodu OOM
Podczas próby przywrócenia bazy danych może zostać wyświetlony komunikat o błędzie: "Operacja przywracania nie powiodła się dla bazy danych "<databaseName>" z powodu niewystarczającej ilości pamięci w puli zasobów "<resourcePoolName>". Oznacza to, że serwer nie ma wystarczającej ilości dostępnej pamięci do przywrócenia bazy danych.
Serwer, na którym przywracasz bazę danych, musi mieć wystarczającą ilość dostępnej pamięci dla tabel zoptymalizowanych pod kątem pamięci w kopii zapasowej bazy danych. W przeciwnym razie baza danych nie będzie dostępna w trybie online i zostanie oznaczona jako podejrzany.
Jeśli serwer ma wystarczającą ilość pamięci fizycznej, ale nadal występuje ten błąd, może to oznaczać, że inne procesy używają zbyt dużej ilości pamięci lub problem z konfiguracją powoduje niedostępną ilość pamięci do przywrócenia. W przypadku tej klasy problemów użyj następujących miar, aby zwiększyć ilość pamięci dostępnej dla operacji przywracania:
Tymczasowo zamknij uruchomione aplikacje.
Zamykając co najmniej jedną uruchomioną aplikację lub zatrzymując usługi, które nie są potrzebne w tej chwili, należy udostępnić pamięć używaną do operacji przywracania. Można je ponownie uruchomić po pomyślnym przywróceniu.Zwiększ wartość MAX_MEMORY_PERCENT.
Jeśli baza danych jest powiązana z pulą zasobów, co jest najlepszym rozwiązaniem, pamięć dostępna do przywrócenia podlega MAX_MEMORY_PERCENT. Jeśli wartość jest za mała, przywracanie zakończy się niepowodzeniem. Ten fragment kodu zmienia się MAX_MEMORY_PERCENT dla puli zasobówHk na 70% zainstalowanej pamięci.Ważny
Jeśli serwer jest uruchomiony na maszynie wirtualnej i nie jest dedykowany, ustaw wartość MIN_MEMORY_PERCENT na tę samą wartość co MAX_MEMORY_PERCENT.
Aby uzyskać więcej informacji, zobacz temat Najlepsze rozwiązania dotyczące używania In-Memory OLTP w środowisku maszyny wirtualnej.-- disable resource governor ALTER RESOURCE GOVERNOR DISABLE -- change the value of MAX_MEMORY_PERCENT ALTER RESOURCE POOL PoolHk WITH ( MAX_MEMORY_PERCENT = 70 ) GO -- reconfigure the Resource Governor -- RECONFIGURE enables resource governor ALTER RESOURCE GOVERNOR RECONFIGURE GO
Aby uzyskać informacje o maksymalnych wartościach MAX_MEMORY_PERCENT zobacz sekcję tematu Procent pamięci dostępnej dla tabel i indeksów zoptymalizowanych pod kątem pamięci.
Zwiększ maksymalną pamięć serwera.
Aby uzyskać informacje na temat konfigurowania maksymalnej pamięci serwera, zobacz temat Opcje konfiguracji pamięci serwera.
Rozwiązać wpływ małej ilości pamięci lub warunków OOM na obciążenie robocze
Oczywiście, najlepiej unikać sytuacji, w której występuje mała ilość pamięci lub brak pamięci (OOM - Out of Memory). Dobre planowanie i monitorowanie może pomóc uniknąć sytuacji OOM. Mimo to, nawet najlepsze planowanie nie zawsze przewiduje, co faktycznie się dzieje i możesz skończyć z małą ilością pamięci albo problemem z jej brakiem (OOM). Są dwa kroki do odzyskania po OOM:
Otwórz DAC (dedykowane połączenie administratora)
Otwórz usługę DAC (dedykowane połączenie administratora)
Program SQL Server zapewnia dedykowane połączenie administratora (DAC). Usługa DAC umożliwia administratorowi dostęp do działającego wystąpienia silnika bazy danych SQL Server w celu rozwiązywania problemów na serwerze, nawet wtedy, gdy serwer nie odpowiada innym połączeniom klienckim. DAC jest dostępny za pośrednictwem narzędzia sqlcmd
i programu SQL Server Management Studio.
Aby uzyskać wskazówki dotyczące korzystania z funkcji DAC za pośrednictwem programu SSMS lub sqlcmd
, zapoznaj się z tematem "Połączenie diagnostyczne dla administratorów baz danych".
Podejmowanie akcji naprawczej
Aby rozwiązać problem z pamięcią typu OOM, należy albo zwolnić istniejącą pamięć poprzez zmniejszenie zużycia, albo udostępnić więcej pamięci dla tabel przechowywanych w pamięci.
Zwolnij istniejącą pamięć
Usuń nieistotne wiersze tabel zoptymalizowanych pod kątem pamięci i poczekaj na zbieranie śmieci
Z tabeli zoptymalizowanej pod kątem pamięci można usunąć wiersze inne niż podstawowe. Moduł odśmiecający pamięć zwraca pamięć używaną przez te wiersze do dostępnych zasobów pamięci. Aparat OLTP w pamięci zbiera wiersze bezużyteczne agresywnie. Jednak długotrwała transakcja może uniemożliwić zbieranie śmieci. Jeśli na przykład masz transakcję, która trwa przez 5 minut, wszystkie wersje wierszy utworzone z powodu operacji aktualizacji/usuwania, gdy transakcja była aktywna, nie mogą zostać usunięte.
Przenoszenie co najmniej jednego wiersza do tabeli opartej na dysku
Poniższe artykuły w witrynie TechNet zawierają wskazówki dotyczące przenoszenia wierszy z tabeli zoptymalizowanej pod kątem pamięci do tabeli opartej na dyskach.
Wzorzec aplikacji na potrzeby partycjonowania tabel Memory-Optimized
Zwiększ ilość dostępnej pamięci
Zwiększ wartość MAX_MEMORY_PERCENT w puli zasobów
Jeśli nie utworzyłeś nazwanej puli zasobów dla swoich tabel w pamięci, powinieneś to zrobić i powiązać z nią swoje bazy danych OLTP In-Memory. Zobacz temat Wiązanie bazy danych z tabelami Memory-Optimized z pulą zasobów, aby uzyskać wskazówki dotyczące tworzenia i wiązania baz danych OLTP In-Memory z pulą zasobów.
Jeśli baza danych OLTP In-Memory jest powiązana z pulą zasobów, może być możliwe zwiększenie procentu pamięci, do której może uzyskać dostęp pula. Aby uzyskać wskazówki dotyczące zmieniania wartości MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT dla puli zasobów, zobacz temat podrzędny Zmiana MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT w istniejącej puli.
Zwiększ wartość MAX_MEMORY_PERCENT.
Ten fragment kodu zmienia MAX_MEMORY_PERCENT dla puli zasobów Hk na 70% pamięci zainstalowanej.
Ważny
Jeśli serwer jest uruchomiony na maszynie wirtualnej i nie jest dedykowany, ustaw wartość MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT na tę samą wartość.
Aby uzyskać więcej informacji, zobacz temat Najlepsze rozwiązania dotyczące używania In-Memory OLTP w środowisku maszyny wirtualnej.
-- disable resource governor
ALTER RESOURCE GOVERNOR DISABLE
-- change the value of MAX_MEMORY_PERCENT
ALTER RESOURCE POOL PoolHk
WITH
( MAX_MEMORY_PERCENT = 70 )
GO
-- reconfigure the Resource Governor to enabled it
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Aby uzyskać informacje o maksymalnych wartościach MAX_MEMORY_PERCENT zobacz sekcję tematu Procent pamięci dostępnej dla tabel i indeksów zoptymalizowanych pod kątem pamięci.
Instalowanie dodatkowej pamięci
Ostatecznie najlepszym rozwiązaniem, jeśli to możliwe, jest zainstalowanie dodatkowej pamięci fizycznej. Jeśli to zrobisz, należy pamiętać, że prawdopodobnie będzie można również zwiększyć wartość MAX_MEMORY_PERCENT (zobacz temat podrzędny Zmień MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT w istniejącej puli), ponieważ program SQL Server prawdopodobnie nie będzie potrzebować więcej pamięci, co pozwoli na maksymalne wykorzystanie, jeśli nie wszystkie nowo zainstalowane pamięci dostępne dla puli zasobów.
Ważny
Jeśli serwer jest uruchomiony na maszynie wirtualnej i nie jest dedykowany, ustaw wartość MIN_MEMORY_PERCENT i MAX_MEMORY_PERCENT na tę samą wartość.
Aby uzyskać więcej informacji, zobacz temat Najlepsze rozwiązania dotyczące używania In-Memory OLTP w środowisku maszyny wirtualnej.
Rozwiązywanie problemów z błędami alokacji stron z powodu niewystarczającej ilości pamięci, gdy jest dostępna wystarczająca ilość pamięci
Jeśli zostanie wyświetlony komunikat o błędzie Disallowing page allocations for database '*\<databaseName>*' due to insufficient memory in the resource pool '*\<resourcePoolName>*'. See 'https://go.microsoft.com/fwlink/?LinkId=330673' for more information.
w dzienniku błędów, gdy dostępna pamięć fizyczna jest wystarczająca do przydzielenia strony, może być to spowodowane wyłączonym Zarządcą Zasobów. Gdy zarządca zasobów jest wyłączony, MEMORYBROKER_FOR_RESERVE wywołuje sztuczne obciążenie pamięci.
Aby rozwiązać ten problem, musisz włączyć zarządcę zasobów.
Zobacz Enable Resource Governor , aby uzyskać informacje na temat limitów i ograniczeń, a także wskazówki dotyczące włączania zarządcy zasobów przy użyciu Eksploratora obiektów, właściwości zarządcy zasobów lub języka Transact-SQL.
Najlepsze rozwiązania dotyczące używania In-Memory OLTP w środowisku maszyny wirtualnej
Wirtualizacja serwera może pomóc obniżyć koszty kapitałowe i operacyjne IT oraz zwiększyć wydajność IT dzięki ulepszonej aprowizacji, konserwacji, dostępności i procesom tworzenia kopii zapasowych/odzyskiwania. Dzięki ostatnim postępom technologicznym złożone obciążenia baz danych można łatwiej skonsolidować przy użyciu wirtualizacji. W tym temacie opisano najlepsze rozwiązania dotyczące korzystania z programu SQL Server In-Memory OLTP w środowisku zwirtualizowanym.
Wstępne przydzielanie pamięci
W przypadku pamięci w środowisku zwirtualizowanym istotna jest lepsza wydajność i ulepszona obsługa. Musisz mieć możliwość szybkiego przydzielenia pamięci do maszyn wirtualnych w zależności od ich wymagań (szczytowych i poza szczytowych obciążeń) oraz zapewnienia, że pamięć nie jest marnowana. Funkcja pamięci dynamicznej Hyper-V zwiększa elastyczność przydzielania pamięci i zarządzania nimi między maszynami wirtualnymi uruchomionymi na hoście.
Niektóre najlepsze rozwiązania dotyczące wirtualizacji i zarządzania programem SQL Server należy zmodyfikować podczas wirtualizacji bazy danych przy użyciu tabel zoptymalizowanych pod kątem pamięci. Bez tabel zoptymalizowanych pod kątem pamięci najlepsze rozwiązania to:
- Jeśli używasz minimalnej pamięci serwera, lepiej jest przypisać tylko wymaganą ilość pamięci, aby wystarczająca ilość pamięci pozostała dla innych procesów (unikając stronicowania).
- Nie należy ustawiać wartości przed alokacją pamięci zbyt dużej. W przeciwnym razie inne procesy mogą nie uzyskać wystarczającej ilości pamięci w czasie, gdy tego wymagają, i może to spowodować stronicowanie pamięci.
Jeśli zastosujesz powyższe rozwiązania dotyczące bazy danych z tabelami zoptymalizowanymi pod kątem pamięci, próba przywrócenia i odzyskania bazy danych może spowodować wystąpienie bazy danych w stanie "Oczekiwanie na odzyskiwanie", nawet jeśli masz wystarczającą ilość pamięci do odzyskania bazy danych. Przyczyną tego jest to, że podczas uruchamiania In-Memory OLTP ładuje dane do pamięci bardziej agresywnie, niż dynamiczna alokacja pamięci przydziela ją do bazy danych.
Rezolucja
Aby temu zapobiec, należy wstępnie przydzielić wystarczającą ilość pamięci do bazy danych w celu odzyskania lub ponownego uruchomienia bazy danych, a nie minimalnej wartości uzależnionej od pamięci dynamicznej w celu zapewnienia dodatkowej pamięci w razie potrzeby.
Zobacz też
Zarządzanie pamięcią dla In-Memory OLTP
Monitorowanie i rozwiązywanie problemów z użyciem pamięci
powiązanie bazy danych z tabelami Memory-Optimized z pulą zasobów
Przewodnik po architekturze zarządzania pamięcią
Opcje konfiguracji pamięci serwera