Udostępnij za pośrednictwem


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:

  1. Otwórz DAC (dedykowane połączenie administratora)

  2. Podejmij działania naprawcze

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.

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