Udostępnij za pośrednictwem


Troubleshooting Resource Governor

W tym temacie przedstawiono wskazówki dotyczące rozwiązywania problemów dla warunków, które mogą wystąpić w przypadku korzystanie z narzędzia zasób Governor.Wśród tych wskazówek jest podzielony na następujące kategorie:

  • Błędy

  • Nieoczekiwane wyniki.

  • Problemów związanych z wydajnością i błędy

Błędy Governor zasób

Komunikaty o błędach Governor zasób obejmuje wszystkie czynności związane z konfigurowaniem i korzystanie z narzędzia zasób Governor.

W poniższej tabela przedstawiono przykłady zasób Governor komunikatów o błędach i zawiera wskazówki dotyczące rozwiązania problemu opisanego w komunikacie o błędzie.

Numer błędu

Komunikat o błędzie

Rozwiązanie

8645

Przekroczono limit czasu podczas oczekiwania na zasoby pamięci wykonać kwerendę w puli zasób "myTestPool" (257).Uruchom ponownie kwerendę.

Należy albo skonfigurować wartość limitu czasu może być wyższa lub zmniejszyć obciążenie kwerendy do serwera.

8651

Nie można wykonać operacji, ponieważ przyznanie żądanej pamięci nie jest dostępna w puli zasób "myTestPool" (257).Uruchom ponownie kwerendę, zmniejszenia obciążenia kwerendy lub Sprawdź ustawienia konfiguracja zasób Governor.

Później, uruchom ponownie kwerendę.Zmniejszenie obciążenia kwerendy na serwerze.Skorzystaj z administratorem, aby sprawdzić, czy ustawienia konfiguracja zasób Governor.

8657

Nie można uzyskać przyznanie 1024 KB pamięci, ponieważ osiągnął limit maksymalnej konfiguracja w grupie obciążenia "myTestGroup" (267) i puli zasób "myTestPool" (257).Skontaktuj się z administratorem serwera, aby zwiększyć limit użycia pamięci.

Należy zmodyfikować kwerendę tak, aby zmniejszyć pamięci używające operacji, takich jak sortowanie i mieszania łączyć.Poproś administrator systemu zezwalająca na wyższy limit użycia pamięci.

Administrator może dostosować jedną lub obie z następujących parametrów:

  • max_memory_percent w puli zasób, który określa maksymalną pojemność pamięci fizycznej przyznawać miejsca na wszystkie kwerendy.

  • request_max_memory_grant_percent obciążenia do grup, który pozwala na kwerendy limit.

Administrator może uzyskać dostęp do rzeczywistych fizycznych limitu z max_target_memory_kb kolumna z sys.dm_exec_query_resource_semaphores.

Na kwerendy limit, można obliczyć przez max_target_memory_kb * request_max_memory_grant_percent.

NoteNote:
Administrator musi upewnić się, że wymagana ilość pamięci podana w komunikacie o błędzie jest mniejsza niż na kwerendy limit obliczania powyżej.Jednak należy zauważyć że zwiększenie request_max_memory_grant_percent ma efektem ubocznym zmniejszenia współbieżność duże kwerendy.Na przykład użytkownicy mogą oczekiwać na uruchamianie trzy duże kwerendy z domyślnym ustawieniem 25 procent, ale tylko dwie kwerendy dużych z ustawieniem 40 procent.

10900

Nie można skonfigurować zasób Governor podczas uruchamiania systemu.Należy sprawdzić dziennik błędów programu SQL Server, komunikaty o błędach określone lub sprawdzić spójność wzorzec bazy danych uruchamiając CHECKCATALOG('master') DBCC.

Spróbuj uruchomić "DBCC CHECKCATALOG('master')".

10901

Użytkownik nie ma uprawnień do zmiany konfiguracja zasób Governor.

Udziel uprawnienia umożliwiają zmianę konfiguracja zasób Governor i spróbuj ponownie.

10902

funkcja zdefiniowanej przez użytkownika "dbo.rgclassifier_v1" nie istnieje w głównej bazie danych, lub użytkownik nie ma uprawnień dostępu.

Tworzenie funkcja zdefiniowanej przez użytkownika klasyfikatora (UDF) w wzorzec lub udzielanie wymaganych uprawnień do istniejących klasyfikatora UDF.

10903

Nazwa określonego schematu „ dbo' dla funkcja zdefiniowanej przez użytkownika klasyfikatora albo nie istnieje lub użytkownik nie ma uprawnienia do korzystania z niego.

Spróbuj użyć innej nazwy schematu lub uzyskać odpowiednie uprawnienia dla tego schematu.

10904

Konfigurowanie Governor zasób nie powiodło się.W grupach obciążenie pracą jest usunięty lub przeniesiony do innego zasób pule są aktywne sesje.Rozłącz wszystkich aktywnych sesjach w grupach obciążenia, których dotyczy problem i spróbuj ponownie.

Rozłącz wszystkich aktywnych sesjach w usterce grupy i spróbuj ponownie.

NoteNote:
W tej wersji zasób Governor programu nie umożliwia przenoszenia grup między pulami, gdy istnieją otwarte sesje w nich.

10905

Nie można ukończyć konfiguracja zasób Governor, ponieważ jest za mało pamięci.Zmniejszyć obciążenie serwera lub spróbuj wykonać operację na połączenie dedykowane administratora.

Zmniejszyć obciążenie serwera lub spróbuj wykonać operację skonfiguruj przy połączeniu administrator dedykowany.

10906

Obiekt 'dbo'. 'rgclassifier_v1' nie jest prawidłowym zasób Governor klasyfikatora zdefiniowanej przez użytkownika funkcją.Prawidłowe klasyfikatora funkcja zdefiniowanej przez użytkownika musi być związanych ze schematem, zwracają nazwa_systemu i mieć nie parametrów.

Podaj prawidłowy klasyfikatora UDF.Prawidłowe klasyfikatora UDF musi:

  • Zwraca nazwa_systemu.

  • Mieć żadnych parametrów.

  • Można utworzyć przy użyciu opcji SCHEMABINDING.

10907

Atrybut 'MIN_CPU_PERCENT' o wartości 50 jest większa niż atrybut 'MAX_CPU_PERCENT' o wartości równej 40.

Zapewnia minimalną wartość, która jest mniejsza niż lub równa wartości maksymalnej.

10908

Atrybut 'MAX_MEMORY_PERCENT' o wartości równej 40 jest mniejsza niż atrybut 'MIN_MEMORY_PERCENT' o wartości 60.

Zapewnia maksymalną wartość, która jest większa niż lub równa wartości minimalnej atrybut.

10909

Nie można utworzyć pulę zasób.Maksymalna liczba pul zasób nie może przekraczać bieżącego limit 20, łącznie z puli zasób wstępnie zdefiniowane.

Usuwanie puli zasób, które nie są już potrzebne.

10910

Nie można ukończyć tej operacji.Określona wartość "MIN_CPU_PERCENT", 25, powoduje, że suma minimalne wymagania pozycji na wszystkie pule zasób może przekroczyć 100 procent.Zmniejszenia wartości lub zmodyfikuj inne pule zasób, tak aby sumy jest mniejsza niż 100.

Zmniejszenia wartości dla MIN_CPU_PERCENT.

10911

Nie można wykonać żądanej operacji, ponieważ puli zasób "myTestPool2" nie istnieje.

Kwerendy widoku wykazu sys.resource_governor_resource_pools, aby zobaczyć, jakie pule zasób są aktualnie zdefiniowane.Wybierz istniejącej puli lub utworzyć nową pulę.

10912

Nie można ukończyć tej operacji.We wstępnie zdefiniowanych grupa obciążenia nie jest dozwolone.

Wybierz opcję użytkownik utworzył grupa obciążenia mają być umieszczane.

10913

Użytkownicy nie będą mogli usunąć grupa obciążenia "wewnętrzną" w puli zasób "wewnętrzną".

Tworzenie grupa obciążenia w puli utworzonej przez użytkownika lub domyślnej puli.

10914

Nazwa grupa obciążenia '#mygroup' nie może zaczynać się od # ##.

Nie należy używać # lub ## when tworzenia grupy lub w puli.

10915

Nie można ukończyć tej operacji.Zmienianie "wewnętrzną" grupa obciążenia jest niedozwolone.

Wybierz puli utworzonej przez użytkownika lub grupę do zmiany.

Uwaga   Zmiana konfiguracja domyślnej puli grupę lub zasób jest dozwolone.

10916

Nie można usunąć puli zasób 'myTestPool', ponieważ zawiera on grupa obciążenia „ myTestGroup".Usuwanie lub usuń wszystkie grupy obciążenia przed upuszczając go za pomocą tej puli zasób.

Usunąć lub przenieść się do wszystkich grup obciążenie, które używają tej puli, a następnie upuść puli.

10917

ALTER GROUP obciążenia nie powiodło się.Klauzula "Z" lub "USING" musi być określona.

W instrukcja ALTER GROUP obciążenia za pomocą "Z" lub klauzulę "USING".

10918

Nie można utworzyć pulę zasób 'myTestPool', ponieważ już istnieje.

Wybierz nazwę puli innego zasób.

10919

Wystąpił błąd podczas odczytu konfiguracja zasób Governor z wzorzec bazy danych.Sprawdzanie spójności bazy danych lub skontaktuj się z administrator systemu.

Spróbuj uruchomić "DBCC CHECKCATALOG('master')".

10920

Nie można usunąć funkcja zdefiniowanej przez użytkownika "dbo.myclassifer".Jest on używany jako zasób Governor klasyfikatora.

Brak.

10921

Grupa obciążenia "domyślny" nie można przenieść z puli zasób "domyślny".

Nie dotyczy.

10981

Ponowna konfiguracja zasób Governor zakończyło się pomyślnie.

Ten komunikat jest zapisywany w dzienniku zdarzeń programu SQL Server.

10982

Nie można uruchomić zasób Governor klasyfikatora funkcja zdefiniowanej przez użytkownika.Zobacz poprzednie błędy dziennik błędów programu SQL Server z sesja ID 58, aby uzyskać szczegółowe informacje.Czas upływający klasyfikatora: 800 ms.

Ten komunikat jest zapisywany dziennik błędów programu SQL Server.

Uwaga   Wcześniejsze wiadomości dziennik błędów programu SQL Server z tego samego identyfikatora procesu serwera (SPID) może dostarczyć przyczyn awarii specyficznych.Klasyfikator długim może spowodować, że limit czasu logowania użytkownika.Sprawdź, jeśli czas klasyfikatora przekracza limit czasu logowania klient.

10983

Ponowna konfiguracja Governor zasób została anulowana przez użytkownika.

Nie dotyczy.

10984

Ponowna konfiguracja Governor zasób nie powiodło się.

Nie dotyczy.

Nieoczekiwane wyniki.

Nieoczekiwane wyniki opisano sytuacje, w których działają różne elementy zasób Governor programu, ale wyniki są inne niż oczekiwano.Na przykład klasyfikacji sesja nie wydaje się działać poprawnie lub występują problemy związane z upuszczając lub tworząc grupy obciążenia pracą.

Klasyfikacja sesja

Sesje zostaną wysłane do domyślnej grupy obciążenia, gdy następujące warunki:

  • Format UDF klasyfikatora nie istnieje lub nie jest włączone.

  • Klasyfikator UDF umieść je, co oznacza błąd logiki funkcja.

Rozwiązywanie podstawowych problemów

Jeśli nie klasyfikatora UDF dostępne dla klasyfikacji następnie wszystkie sesje automatycznie przejdzie do domyślnej grupa obciążenia.Po utworzeniu klasyfikatora UDF, należy sprawdzić, czy jest zarejestrowany z zasób Governor i aktualizacji konfiguracja w pamięci.

Tworzenie, rejestrowanie i Włączanie klasyfikatora UDF jest trzech etapów:

  • Po pierwsze należy utworzyć funkcja.

    CREATE FUNCTION function_name() RETURNS <something> 
    WITH SCHEMABINDING
    
  • Po drugie należy zarejestrować zasób Governor z tej funkcja.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION=schema_name.function_name)
    
  • Po trzecie musisz zaktualizować konfiguracja zasób Governor w pamięci.

    ALTER RESOURCE GOVERNOR RECONFIGURE
    

Po pierwsze należy wykonać podczas rozwiązywania problemów z klasyfikacji jest sprawdzić, czy funkcja, które utworzono jest zarejestrowany z zasób Governor i konfiguracja zostały zaktualizowane.Użyj następującej kwerendy w celu uzyskania nazwy schematu (schema_name) i nazwę funkcja klasyfikatora (nazwa_funkcji) klasyfikatora, którego używa obecnie zasób Governor UDF.

USE master
SELECT 
      object_schema_name(classifier_function_id) AS [schema_name],
      object_name(classifier_function_id) AS [function_name]
FROM sys.dm_resource_governor_configuration

Poprzedni podejście umożliwia rozwiązywanie problemów z scenariusza, w których zmieniono klasyfikatora UDF, ale zasób Governor nadal używa poprzednich logiki funkcja do klasyfikowania sesji.Takie zachowanie wskazuje wprowadzonych zmian nie zostały zastosowane do konfiguracja w pamięci.

Zaawansowane rozwiązywanie problemów

Można utworzyć funkcja bardzo skomplikowane klasyfikatora, który nie daje oczekiwanych wyniki, lub intensywne zasób.Jeśli zostało to wykonane podstawowych procedur rozwiązywania problemów, należy następnie sprawdź, czy logika funkcja dźwięku.Najgorsza-przypadek scenariusz jest jeden, w którym kodowania luka powoduje nieskończoną pętlę lub wyczerpanie kwerendy.

Do rozwiązywania problemów z niewłaściwie napisanych funkcja klasyfikatora, ponieważ DAC nie podlega klasyfikacji i mogą być używane w czasie, gdy zasób Governor jest uruchomiony i klasyfikowania przychodzących sesji, można użyć dedykowany połączenia administratora (DAC).Aby uzyskać więcej informacji zobaczUsing a Dedicated Administrator Connection.

Uwaga

Jeśli DAC nie jest dostępny do rozwiązywania problemów, można ponownie uruchomić system w trybie pojedynczego użytkownika.Chociaż w trybie pojedynczego użytkownika nie są uzależnione od klasyfikacji, nie może zdiagnozować zasób Governor klasyfikacji, jest uruchomiona.

Aby uzyskać informacje dotyczące funkcja klasyfikatora, za pomocą kwerend wysyłanych do następujących:

  • sys.dm_exec_query_stats.(nie zawiera informacji o instrukcja, ale nie rzeczywiste funkcja)

  • sys.dm_exec_sql_text (używać w połączeniu z sql_handle uzyskane z sys.dm_exec_query_stats)

  • PreConnect: uruchamianie klas zdarzeń (zawiera identyfikator i nazwę funkcja klasyfikatora)

Zmień konfigurację błąd

Governor zasobu przechowuje oddzielnych uruchamianie sesji, dopóki nie zakończy instrukcja ALTER ponownie SKONFIGUROWAĆ regulator zasób zmiany metadane.ALTER ponownie SKONFIGUROWAĆ regulator zasób zawiedzie, jeżeli próbujesz usunąć grupę, która zawiera sesji aktywnych lub otwarte lub podczas próby upuść puli zasobów, który zawiera grupy obciążenia pracą.

Aby uzyskać konfiguracja w pamięci i przechowywane, wykonaj kwerendę sys.dm_resource_governor_configuration i sys.resource_governor_configuration.Wartość 1 dla is_reconfiguration_pending (sys.dm_resource_governor_configuration) wskazuje, że konfiguracja sesja nie został zaktualizowany.Jeśli tak jest, dostępne opcje są następujące:

  • Poczekaj na zakończenie lub upuszczania ich połączenia sesji.

  • Przerwać sesja aktywnych lub usuwanie połączenia sesja.

  • Utwórz grupę lub puli, która zostanie usunięta, dostosować jego ustawienia i uruchom ponownie SKONFIGUROWAĆ zasób regulator ALTER.

Problemy i poprawianie błędów związanych z wydajnością

Jeśli wydaje się być problemy z wydajnością, korzystając z zasób Governor, trzeba określić, czy przyczyną problemu jest konfiguracja zasób Governor.Wytyczne dotyczące rozwiązywania problemów zawarte w tej sekcji jest podzielone na dwie kategorie:

  • Klasyfikacja sesja

  • Wykonywanie kwerendy

Klasyfikacja sesja

Długo wykonujące logowania wyzwalacza lub klasyfikatora zdefiniowanej przez użytkownika funkcja (UDF) mogą mieć wpływ na wydajność serwera.Jeśli wyzwalacz logowania lub klasyfikatora UDF trwa zbyt długo do wykonania, limit czas połączenia.Wyzwalacz lub funkcja, nadal uruchamiać i korzystanie z zasobów serwera.

Jeśli podejrzewasz, że jest uruchomiony w stanie pre-connected sesji, zaloguj się przy użyciu połączenia dedykowane administratora i sprawdź PreConnect:Starting Event Class Aby zobaczyć, jeśli istnieje wiele żądań lub sesji, które zostały rozpoczęte, ale nie ukończone.

Aby rozwiązać ten problem i uniemożliwić dzieje ponownie:

  • Zatrzymanie sesji

  • Identyfikowanie przyczyn prawdopodobna długo działających wyzwalacza funkcja lub logowania

  • Usuń i Zastąp wyzwalacza lub funkcja, która powoduje problem

Wykonanie kwerendy

Po niejawnych i wykonywanie kwerendy, go może pozornie przestać odpowiadać (zawiesić się) lub się nie powieść.Podejrzewasz, że bieżące ustawienia zasób Governor może być przyczyną.Należy sprawdzić następujące aspekty konfiguracja zasób Governor:

  • Żądanie ograniczanie liczby

  • Maksymalny limit wykorzystania zasobów PROCESORA

  • Ograniczanie przepustowości PROCESORA

  • Rozmiar pamięci dotacji

  • Błąd limitu czasu przyznanie pamięci

  • Z błędem pamięci

  • Plan kwerend suboptimal

Liczba żądań, ograniczanie

W takim przypadku użytkownik zgłasza obniżenie wydajności i podejrzewasz, że licznik żądania jest ograniczona.

Po pierwsze, co trzeba zrobić to sprawdzić, czy ograniczanie liczby żądań jawnie jest skonfigurowany do grupy, do której użytkownik jest.W tym celu należy do sprawdzania członkostwa grupy użytkownika, aby sprawdzić, czy jest włączone ustawienie GROUP_MAX_REQUESTS.Jeśli nie włączono GROUP_MAX_REQUESTS, jest licznik nie jawnego żądania ograniczanie przepustowości.Należy zanalizować przyczyny zjawiska dalsze, wykonując następujące czynności.

  • Kwerendy sys.dm_os_waiting_tasks, aby dowiedzieć się, jeśli wszystkie żądania oczekuje na RESMGR_THROTTLED typu oczekiwania.Obecność tego typu oczekiwania wskazuje ograniczania liczby żądań.

  • Uruchom Monitor wydajności i zbierania danych przy użyciu Żądań w kolejce and Aktywne żądania liczniki.Różna od zera Żądania w kolejce liczba wskazuje ograniczanie żądania.

  • Sprawdź, czy Aktywne żądania wartość odpowiada ustawienie GROUP_MAX_REQUESTS.Jeśli Aktywne żądania wartość jest wyższa niż ustawienie GROUP_MAX_REQUESTS, grupa może mieć żądań, które nie może być ograniczona (na przykład, transakcje otwarte).

  • Jeśli Żądań w kolejce wynosi zero, należy sprawdzić Aktywne żądania grup obciążenia współużytkowanie tej samej puli zasób, ponieważ puli może mieć już przeciążony ze zbyt wielu żądań.

Maksymalny limit CPU

Jeśli zasada która jest prowadzony przez zasób Governor generowania zdarzeń można użyć zdarzenie, który jest generowany po osiągnięciu maksymalnego limitu procesora CPU.

W takim przypadku należy ustalić, czy maksymalny limit wykorzystania zasobów PROCESORA (REQUEST_MAX_CPU_TIME_SEC), skonfigurowane do wykrywania kwerendy zawierającej zbyt dużo PROCESORA jest zbyt niska.

Następujące akcje pomaga sprawdzić ustawienie limitu procesora CPU.

  • Rozpocznij sesja śledzenia SQL i zebrać Został przekroczony próg PROCESORA zdarzenie.Kiedy żądanie użytkownika osiągnie maksymalny limit wykorzystania PROCESORA, serwer automatycznie generuje zdarzeń śledzenia SQL.Jeśli ustawienie jest zbyt niska, duża liczba tych zdarzeń zostanie wygenerowane.

Uwaga

Zdarzenie to również jest ujawniona jako powiadamianie o zdarzeniach serwera, dzięki czemu można napisać skrypt, który reaguje na zdarzenia.

  • Uruchom Monitor wydajności i zbierania danych przy użyciu Żądanie maksymalny czas cpu (ms) licznika.Wartość tego licznika jako przewodnik służy do ustawiania limitu właściwe dla grupa obciążenia.

Ograniczanie przepustowości PROCESORA

W takim przypadku można podejrzewać, że przepustowość PROCESORA jest ograniczona, ponieważ % Użycia CPU licznika jest równa lub niemal równa ustawienie zasób Governor MAX_CPU_PERCENT.Następująca kwerenda zwraca wartość % wykorzystania PROCESORA dla wszystkich grup obciążenia pracą i pule zasób dla wystąpienie programu SQL Server.

select * from sys.dm_os_performance_counters where counter_name = 'cpu usage %'

Aby uzyskać więcej informacji zobaczsys.dm_os_performance_counters (języka Transact-SQL).

Można określić, czy przepustowość PROCESORA jest ograniczona, wykonując następujące testy w systemie.

  • Sprawdź, czy serwer całkowite wykorzystanie PROCESORA.Obciążenie innej niż SQL Server jest obecnie aktywne, mogą wpływać na kwerendę, która w przypadku rozwiązywania problemu z.

  • Sprawdź, czy rozkład użycia PROCESORA między pule zasób.Może być ograniczono puli zasób, ponieważ innej puli ma wysoka wartość minimalna skonfigurowany do użycia PROCESORA.Porównaj liczniki dla oczekiwanego (obliczeniowej PROCESORA wykorzystania) przed rzeczywistym wykorzystanie PROCESORA.

  • Sprawdź, czy grupy obciążenia, przypisane w puli zasób.Ładowanie z innych grup obciążenie pracą może mieć wpływ na użytkowników, którzy współużytkują tej samej puli.

  • Sprawdź, czy rozkładu obciążenia PROCESORA poprzez pracownikom.Kwerendy, która zostanie są badanie może znajdować się na harmonogram, zawierający kwerendach o długim.W takim wypadku kwerenda może się wydawać być ograniczona, ale rzeczywistym zagadnieniem jest nierówne rozkład obciążenia między pracownikom.

  • Sprawdź, czy możliwych przypadków, gdy obciążenie pracą jest uzyskiwanie zablokowane przez innych sesji, a nie jest ograniczona przez ustawienia zasób Governor.

  • Sprawdź liczbę sesji aktualnie działające kwerendy w systemie.Liczba żądań wykonującego porządek w rosnącej programu SQL Server próbuje upewnij się, że wszystkie z nich odbiera przynajmniej ilość czas PROCESORA, aby uniknąć zablokowania PROCESORA.

Rozmiar Udziel pamięci

W takim przypadku można podejrzewać, że rozmiar pamięci przyznania jest przyczyną kwerendy działanie.

Governor zasób wymusza kwerendy maksymalny limit pamięci przez zmniejszenie pamięci przyznania tak dużej kwerendy można zmieścić w granicach.Jeśli kwerenda pobiera mniej niż 100 % przyznania pamięci, może okazać się konieczne spill dane tymczasowe i zapisuje je na dysku, który może być zauważalne wpływ na wydajność.

Należy określić wartość procentową dużej kwerendy, aby ustawić odpowiednią kwerendę maksymalny limit rozmiaru.Następujące akcje pomogą określić najlepsze ustawienia:

  • Kwerendy sys.dm_exec_query_memory_grants, aby wyświetlić bieżący stan dotacji pamięci.The ideal_memory_kb kolumna shows the ideal amount based on the cardinality estimate.The requested_memory_kb kolumna shows the asking amount which could have been reduced after reaching the maximum query limit.Jeśli requested_memory_kb jest znacznie niższa niż ideal_memory_kb, a następnie kwerenda może się to zakończyć przypadkowym przechodzeniu często (zakładając, że szacowanie Kardynalność jest poprawna).

  • Uruchom Monitor wydajności i zbierania danych przy użyciu Obniżone dotacji/s licznika.Wartość tego licznika reprezentuje stawki pamięci przyznania liczba mniejsza niż kwota idealne otrzymanych po naciśnięcie żądanie maksymalny limit rozmiaru.Duże kwerendy może działać znacznie wolniej niż te z idealne kwoty, ponieważ muszą one spill na dysku, aby pozostać w ramach limitów pamięci.

Aby złagodzić pamięci udzielić problemu, może zajść potrzeba zwiększenia limitu rozmiaru puli lub maksymalny rozmiar maksymalny pamięci.

Uwaga

Jeśli tylko zwiększony rozmiar maksymalny pamięci, może to prowadzić do ograniczonej współbieżność dużych kwerend.

Błąd limitu czasu Udziel pamięci

W tym scenariuszu kwerendy kończy się niepowodzeniem z powodu błędu limitu czasu przyznanie pamięci.

Oba całkowitej liczby aktywnych pamięci udzielić żądania i limity pamięci na grupa obciążenia i definicje puli zasób mogą pełnić rolę w pamięci przyznania przekroczenia limitu czasu.Pula pojedynczy zasób jest współużytkowany przez wielu grup zasobów, liczba kwerend współbieżnych w innych grupach mogą również na wygląd limity czasu przyznanie pamięci.

Następujące czynności pomoże ustalić najlepszy ustawienia puli zasób:

  • Kwerendy sys.dm_exec_query_memory_grants, aby wyświetlić liczbę dotacji pamięci i kwerendy oczekujących na tę grupę i puli.

  • Kwerendy sys.dm_exec_query_resource_semaphores, aby zobaczyć udzielone całkowitej pamięci i elementów docelowych.

Jeśli przyznanie użycie pamięci jest większa niż miejsce dostępnej pamięci, następnie można rozważyć zwiększenie limitu rozmiaru puli zasób.

Z pamięci, błędy

Kwerenda nie powiedzie się z out błąd pamięci.

Rozwiązywanie podstawowych problemów

Następujące akcje pomogą określić najlepsze ustawienia grupa obciążenia:

  • Kwerendy sys.dm_os_memory_brokers do sprawdzania pamięci względną rozkładu i trendów w puli zasób.Zbyt wielu żądań w zbyt małym obszarze pamięci może prowadzić do przeciążone grupa obciążenia / pulę zasób i przyczyną z błędów pamięci.

  • Uruchom Monitor wydajności i zbierania danych przy użyciu liczników puli zasób związanych z pamięcią uzyskać miejsce docelowe i bieżące użycie pamięci dotacji pamięci, pamięci podręcznej i kompilacji/optymalizacji pamięci.Jeśli bieżące wartości jest większa od wartości miejsce docelowe, oznacza to, że nadmiernie puli zasób.Należy rozważyć zmianę limitu pamięci puli.

  • Uruchom Monitor wydajności i zbierania danych przy użyciu żądanie udzielenia maksymalnej pamięci licznika.Jeśli wartość licznika przekracza wartość określona przez ustawienie REQUEST_MAX_MEMORY_GRANT_PERCENT w grupie obciążenia, nie będzie prawdopodobnie kwerendy.Należy rozważyć zmianę limitu grupa obciążenia.

Zaawansowane rozwiązywanie problemów

Limit pamięci (701) błędu jest błąd rodzajowy zwracane zadań próbuje przydzielić blok pamięci od Menedżera pamięci i próba nie powiedzie się.Aby uzyskać więcej informacji zobaczMSSQLSERVER_701.

Następujące warunki mogą być przyczyną tego błędu:

  • Puli pamięci osiągnie swój limit całkowitej.

Uwaga

Governor zasób nie może być jedynym przyczynę tego warunku.Mogą istnieć inne aplikacje uruchomione na serwerze, których wymagania pamięci, które przyczyniają się do tego warunku.

  • Multi-strona lub alokację miejsca do adresów wirtualnych nie powiedzie się, ponieważ wirtualnej przestrzeni adresowej nie ma wystarczająco duży dla rezerwacji wymaganej blok wolnego.Jest to najbardziej prawdopodobne na architekturze 32-bitowych i mało prawdopodobne na architekturze 64-bitowych.

  • Alokację miejsca do wielostronicowych lub wirtualnego adresu nie powiodło się, ponieważ całkowita zobowiązanie osiągnie limit zatwierdzanie.Dotyczy to zarówno 32-bitowych i 64-bitowej architekturze.

Gdy pojawi się błędu pamięci, dziennik błędów jest punktem początkowym najlepiej dla badanie błędu.Dziennik zawiera dane wyjściowe podobne do następującego:

2006-01-28 04:27:15.43 spid51 nie można przydzielić stron: FAIL_PAGE_ALLOCATION 1

Możliwe błędy, rejestrowane dziennik błędów są:

  • FAIL_PAGE_ALLOCATION i numer strony, które zostały podjęto próbę alokacji

  • FAIL_VIRTUAL_RESERVE następuje liczba bajtów, które zostały podjęto próbę zarezerwowania

  • FAIL_VIRTUAL_COMMIT następuje liczba bajtów, które były próby zatwierdzanie

Ważne jest zadanie, które poza błędu pamięci jest często nie zadania, który spowodował błąd.O ile nie nastąpiło wykorzystał zadania, limit pamięci jest zazwyczaj culmination wielu uruchomionych zadań.W rezultacie za pomocą często wielkość błędu FAIL_PAGE_ALLOCATION, postępowania z musi mieć szerszych widoku działania systemu.

Następny fragment cennych informacji dziennik błędów są kierowane stanu pamięci.W zależności od awarii zostanie powinna wyglądać na jednej stronie wielostronicowym, wirtualny zarezerwowanych lub zadeklarowanej numerów clerks poszczególnych pamięci.Identyfikowanie największych konsumentów pamięci jest krokiem klucz w kontynuuje badanie błędu.Zazwyczaj największym konsumentów pamięci są następujące typy:

  • MEMORYCLERK_ * oznacza, że konfiguracja serwera lub obciążenia wymaga alokacji pamięci.To odpowiadających clerks pamięci dla składników programu SQL Server, a poszczególne składniki mogą mieć kilka clerks pamięci.Aby uzyskać więcej informacji zobaczsys.dm_os_memory_clerks (Transact-SQL).Czasami można określić obciążenie, przyczyną problemu z clerks pamięci, ale jest bardziej prawdopodobne, należy zbadać obiektów pamięci, skojarzonych z clerks, aby dowiedzieć się, co spowodowało dużej ilości pamięci.

  • CACHESTORE_ *, USERSTORE_ * OBJECTSTORE_ * są rodzaje pamięci podręcznej.Zużycie pamięci wysokiej w pamięci podręcznej może oznaczać, że:

    • Pamięć jest przydzielany z pamięci podręcznej, ale jeszcze nie jest wstawiany jako wpis, który może być usunięty.To jest bardzo podobne do powyżej przypadek MEMORYCLERK.

    • Wszystkie wpisy pamięci podręcznej są używane, tak że nie można wykluczyć.Może być potwierdzona przez przejrzenie sys.dm_os_memory_cache_counters i porównywania wartości kolumna entries_count i entries_in_use_count kolumna.

  • MEMORYCLERK_SQLQERESERVATIONS pokazuje ilość pamięci został zarezerwowany przez wykonanie kwerendy (zapytań) do uruchamiania kwerendy za pomocą sortuje/sprzężeń.An out błędu pamięci, który występuje, gdy rezerwacje są wysokie zazwyczaj wskazuje błąd na serwerze.

Dane wyjściowe stanu pamięci dziennik błędów zostaną wyświetlone również puli pamięci, która zostanie wyczerpana.Pamięć brokerzy dla każdej puli dystrybucji pamięci między skradzionych (Kompilacja) w pamięci podręcznej, a zarezerwowane (przyznane) pamięci.Numery dla trzech brokerzy odpowiadają poprzednie obiekty pamięci skojarzone z clerks pamięci.Można sprawdzić ilość pamięci przydzielony dla zestawu z danym clerk lub obiektu pamięci przez wyodrębnianie informacji z przy użyciu skryptu niestandardowego i dynamiczny widok zarządzania sys.dm_os_memory_cache_entries, w którym pool_id wskazuje, że każdy wpis jest skojarzony z pełnego automatyczna kopia zapasowa.

Jeśli musisz skontaktować się z działu obsługi technicznej, należy zebrać następujące informacje dotyczące naszego personelu pomocy technicznej:

  • Dziennik błędów, pokazujący poza błąd pamięci i stan pamięci, dane wyjściowe w czasie błędu.

  • Dane wyjściowe z następujących instrukcji:

    dbcc memorystatus
    dbcc sqlperf(spinlockstats)
    select * from sys.dm_os_memory_clerks
    select * from sys.dm_os_wait_stats order by wait_type
    select * from sys.dm_os_waiting_tasks
    select * from sys.dm_os_ring_buffers where ring_buffer_type='RING_BUFFER_OOM'
    select * from sys.dm_os_ring_buffers where ring_buffer_type='RING_BUFFER_RESOURCE_MONITOR'
    select * from sys.dm_os_ring_buffers where ring_buffer_type='RING_BUFFER_MEMORY_BROKER'
    select * from sys.dm_os_memory_cache_clock_hands
    
  • Opcjonalnie out automatyczna kopia zapasowa pamięci pobrane z T8004.To minizrzutu będzie miał cenne informacje, takie jak bufory pierścień i statystyka spinlock/wait.Można zresetować licznik automatyczna kopia zapasowa T8004, bez ponownego uruchamiania serwera, włączając T8004 wylogowywania się i ponownego.

Suboptimal plan kwerend

W takim przypadku można podejrzewać, że kwerendy działa powoli z powodu plan kwerend suboptimal.optymalizator kwerendy może generować planu suboptimal kwerendy, jeśli nie uzyskuje wystarczająco dużo pamięci z powodu braku pamięci limit dla puli zasób.

Następujące czynności pomoże ustalić najlepszy ustawienia puli zasób:

  • Pobrane dane Optymalizacje typu kwerendy na sekundę licznika czy grupa obciążenia ma dużą liczbę kwerendy kompiluje.

  • Pobrane dane Plany suboptimal/s licznik, aby zobaczyć, jeśli optymalizator kwerendy często są zakładane suboptimal planów.

Jeśli jeden z poprzednim warunków, należy rozważyć możliwość zwiększenia limitu pamięci puli zasób.