Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Detaljer
Attribut | Värde |
---|---|
Produktnamn | SQL Server |
Händelse-ID | 8645 |
Händelsekälla | MSSQLSERVER |
Komponent | SQLEngine |
Symboliskt namn | MEMTIMEDOUT_ERR |
Meddelandetext | En timeout uppstod i väntan på att minnesresurser skulle köra frågan i resurspoolen%ls(%ld). Kör frågan igen. |
Förklaring
Det här felet utlöses om en SQL Server-begäran har väntat på ett frågekörningsminnesbidrag (QE) under en längre tid och minnet inte var tillgängligt. Frågekörningsminnet används främst för sorteringsåtgärder, hashåtgärder, masskopieringsåtgärder samt skapande och population av index. En fråga som utför en av dessa åtgärder begär ett minnesbidrag. Om inget minne är tillgängligt är frågan inställd på att vänta på en RESOURCE_SEMAPHORE tills minnet blir tillgängligt.
Om minnet inte är tillgängligt efter att ha väntat på en tidsgräns som dynamiskt bestäms av frågekostnaden som uppskattas av frågeoptimeraren, avslutar SQL Server frågan med fel 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'.
Tidsgränsvärdet varierar något mellan versioner av SQL Server, men har ett maximalt timeout-värde på 24 timmar. Du kan se det timeout-värde som angetts på servernivå genom att titta på timeout_sec
i sys.dm_exec_query_memory_grants.
En detaljerad förklaring av felsökningsstegen finns i Problem med långsamma prestanda eller lågt minne som orsakas av minnesbidrag i SQL Server.
Orsak
Det här felet kan ses i förhållande till minnesbidrag och långa väntetider för att minnet ska bli tillgängligt. När en fråga slutförs frigörs vanligtvis det körningsminne som den använder. Om du ser det här felet innebär det därför att tidsgränsfrågan har väntat på att andra begäranden ska slutföras efter tidsgränsen. Det kan bara finnas en enda begäran som förbrukade allt tillgängligt QE-minne eller så kan det finnas många begäranden och kombinerat, deras minnesbidrag har förbrukat QE-minnet. Om du har sådana tidskrävande begäranden i arbetsbelastningen måste du vidta åtgärder för att förbättra körningstiden och minska mängden QE-minne som de använder.
Användaråtgärd
Om du inte använder Resource Governor för att begränsa minnespoolen för vissa arbetsbelastningar kan du kontrollera det övergripande servertillståndet och arbetsbelastningen. Om du använder Resource Governor kontrollerar du inställningarna för resurspoolen eller arbetsbelastningsgruppen.
I följande lista sammanfattas de steg som beskrivs i den ovan nämnda artikeln. De här stegen kan hjälpa dig att minska eller eliminera QE-minnesfel:
Identifiera vilka begäranden i SQL Server som är de stora minnesbidragen eller QE-minneskonsumenterna. Mer information finns i Så här identifierar du väntetider för frågekörningsminne.
Skriv om frågor för att minimera eller undvika sorterings- och hashåtgärder.
Uppdatera statistik och håll dem uppdaterade regelbundet för att säkerställa att SQL Server uppskattar minnesbeviljande korrekt.
Skapa lämpliga index för den eller de frågor som identifieras. Index kan minska det stora antalet rader som bearbetas, vilket ändrar JOIN-algoritmerna och minskar storleken på bidrag eller helt eliminerar dem.
Använd tipset ALTERNATIV (min_grant_percent = XX, max_grant_percent = XX) i dina frågor där det är möjligt.
Använd Resource Governor för att begränsa effekten av QE-minnesanvändning endast till en viss arbetsbelastning.
SQL Server 2017 och 2019 använder anpassningsbar frågebearbetning, vilket gör att mekanismen för minnestillviljande feedback kan justera storleken på minnestillviljan dynamiskt vid körning. Den här funktionen kan förhindra problem med minnesanvändning.
Öka SQL Server-minnet eller justera befintliga inställningar.
Kontrollera följande parametrar för SQL Server-minneskonfiguration:
- maximalt serverminne – öka om det behövs
- min serverminne
- min minne per fråga
Observera ovanliga inställningar. Korrigera dem efter behov. Ta hänsyn till ökade minneskrav för SQL Server. Standardinställningar och rekommenderade inställningar visas i Konfigurationsalternativ för serverminne .
Öka minnet på OS-nivå (fysiskt eller virtuellt RAM-minne).
Kontrollera om andra program eller tjänster förbrukar minne på den här servern. Konfigurera om mindre kritiska program eller tjänster för att förbruka mindre minne eller flytta dem till en separat server. Den här åtgärden kan ta bort externt minnestryck.
Kör följande DBCC-kommandon för att frigöra flera SQL Server-minnescacheminnen – ett tillfälligt mått.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE