Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Szczegóły
[No changes needed]) | Wartość |
---|---|
Nazwa produktu | SQL Server |
Identyfikator zdarzenia | 8645 |
Źródło zdarzeń | MSSQLSERVER |
Składnik | SQLEngine |
Nazwa symboliczna | MEMTIMEDOUT_ERR |
Tekst wiadomości | Wystąpił limit czasu podczas oczekiwania na wykonanie zapytania w puli zasobów "%ls" (%ld). Uruchom ponownie zapytanie. |
Wyjaśnienie
Ten błąd jest zgłaszany, jeśli żądanie programu SQL Server czekało na przyznanie pamięci wykonywania zapytania (QE) przez dłuższy czas i pamięć nie była dostępna. Pamięć wykonywania zapytań jest używana głównie na potrzeby operacji sortowania, operacji skrótu, operacji kopiowania zbiorczego oraz tworzenia indeksu i populacji. Zapytanie, które wykonuje jedną z tych operacji, żąda udzielenia pamięci. Jeśli pamięć nie jest dostępna, zapytanie jest ustawione na oczekiwanie na RESOURCE_SEMAPHORE , aż pamięć stanie się dostępna.
Jeśli pamięć nie jest dostępna po okresie oczekiwania na limit czasu dynamicznie określany przez koszt zapytania szacowany przez optymalizator zapytań, program SQL Server kończy zapytanie z błędem 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'.
Wartość limitu czasu różni się nieznacznie między wersjami programu SQL Server, ale ma maksymalną wartość limitu czasu oczekiwania 24 godziny. Wartość limitu czasu ustawiona na poziomie timeout_sec
serwera jest widoczna w sys.dm_exec_query_memory_grants.
Aby uzyskać szczegółowy opis kroków rozwiązywania problemów, zapoznaj się z tematem Problemy z niską wydajnością lub małą ilością pamięci spowodowane przez przydziały pamięci w programie SQL Server.
Przyczyna
Ten błąd można zobaczyć w odniesieniu do przydziałów pamięci i długotrwałe oczekiwania na udostępnienie pamięci. Zazwyczaj po zakończeniu zapytania zwalnia ona pamięć wykonywania, z których korzysta. W związku z tym, jeśli widzisz ten błąd, oznacza to, że zapytanie przekroczenia limitu czasu czekało na ukończenie innych żądań poza limitem czasu. Może istnieć tylko jedno żądanie, które zużywało całą dostępną pamięć QE lub może istnieć wiele żądań i połączonych, ich przydziały pamięci wyczerpały pamięć QE. Jeśli masz takie długotrwałe żądania w obciążeniu, musisz podjąć działania, aby skrócić czas ich wykonywania i zmniejszyć ilość używanej pamięci QE.
Akcja użytkownika
Jeśli nie używasz zarządcy zasobów, aby ograniczyć pulę pamięci dla niektórych obciążeń, możesz zweryfikować ogólny stan serwera i obciążenie. Jeśli używasz zarządcy zasobów, sprawdź ustawienia puli zasobów lub grupy obciążeń.
Poniższa lista zawiera podsumowanie kroków opisanych w wyżej wymienionym artykule. Te kroki mogą pomóc w zmniejszeniu lub wyeliminowaniu błędów pamięci QE:
Określ, które żądania w programie SQL Server są dużym przydziałem pamięci lub odbiorcami pamięci QE. Aby uzyskać więcej informacji, zobacz How to identify waits for query execution memory (Jak identyfikować oczekiwania na pamięć wykonywania zapytania).
Ponowne zapisywanie zapytań w celu zminimalizowania lub uniknięcia operacji sortowania i skrótu.
Aktualizuj statystyki i regularnie je aktualizuj, aby zapewnić prawidłowe oszacowanie przydziału pamięci przez program SQL Server.
Utwórz odpowiednie indeksy dla zidentyfikowanych zapytań lub zapytań. Indeksy mogą zmniejszyć dużą liczbę przetworzonych wierszy, zmieniając algorytmy JOIN i zmniejszając rozmiar dotacji lub całkowicie je eliminując.
Użyj wskazówek OPTION (min_grant_percent = XX, max_grant_percent = XX) w zapytaniach tam, gdzie to możliwe.
Użyj zarządcy zasobów, aby ograniczyć wpływ użycia pamięci QE tylko na określone obciążenie.
Programy SQL Server 2017 i 2019 używają adaptacyjnego przetwarzania zapytań, dzięki czemu mechanizm przekazywania opinii o pamięci umożliwia dynamiczne dostosowywanie rozmiaru przydziału pamięci w czasie wykonywania. Ta funkcja może zapobiec problemom z udzielaniem pamięci w pierwszej kolejności.
Zwiększ pamięć programu SQL Server lub dostosuj istniejące ustawienia.
Sprawdź następujące parametry konfiguracji pamięci programu SQL Server:
- maksymalna ilość pamięci serwera — zwiększ w razie potrzeby
- minimalna pamięć serwera
- minimalna ilość pamięci na kwerendę
Zwróć uwagę na nietypowe ustawienia. Popraw je w razie potrzeby. Uwzględnij zwiększone wymagania dotyczące pamięci dla programu SQL Server. Domyślne i zalecane ustawienia są wyświetlane w opcjach konfiguracji pamięci serwera .
Zwiększ ilość pamięci na poziomie systemu operacyjnego (pamięć RAM fizyczna lub wirtualna).
Sprawdź, czy inne aplikacje lub usługi zużywają pamięć na tym serwerze. Skonfiguruj ponownie mniej krytyczne aplikacje lub usługi, aby zużywać mniej pamięci lub przenieść je na oddzielny serwer. Ta akcja może usunąć wykorzystanie pamięci zewnętrznej.
Uruchom następujące polecenia DBCC, aby zwolnić kilka pamięci podręcznych programu SQL Server — tymczasową miarę.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE