Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Bijzonderheden
Kenmerk | Waarde |
---|---|
Productnaam | SQL Server |
Gebeurtenis-id | 8645 |
Bron van gebeurtenis | MSSQLSERVER |
Onderdeel | SQLEngine |
Symbolische naam | MEMTIMEDOUT_ERR |
Berichttekst | Er is een time-out opgetreden tijdens het wachten op het uitvoeren van de query in de resourcegroep '%ls' (%ld). Voer de query opnieuw uit. |
Uitleg
Deze fout treedt op als een SQL Server-aanvraag heeft gewacht op een QE-geheugentoekenning (Query Execution) gedurende een langere periode en er geen geheugen beschikbaar was. Geheugen voor het uitvoeren van query's wordt voornamelijk gebruikt voor sorteerbewerkingen, hashbewerkingen, bulkkopiebewerkingen en het maken en populatie van indexen. Een query die een van deze bewerkingen uitvoert, vraagt een geheugentoe kennen. Als er geen geheugen beschikbaar is, wordt de query ingesteld om te wachten op een RESOURCE_SEMAPHORE totdat het geheugen beschikbaar is.
Als het geheugen niet beschikbaar is nadat u hebt gewacht op een time-outperiode die dynamisch is bepaald door de querykosten zoals geschat door de queryoptimalisatie, beëindigt SQL Server de query met fout 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'.
De time-outwaarde varieert enigszins tussen versies van SQL Server, maar heeft een maximale time-outwaarde van 24 uur. U kunt de time-outwaarde zien die is ingesteld op serverniveau door in sys.dm_exec_query_memory_grants te kijkentimeout_sec
.
Voor een gedetailleerde uitleg met stappen voor probleemoplossing raadpleegt u Trage prestaties of problemen met weinig geheugen die worden veroorzaakt door geheugentoelagen in SQL Server.
Oorzaak
Deze fout kan worden weergegeven in relatie tot geheugentoekenningen en langdurige wachttijden totdat geheugen beschikbaar is. Wanneer een query is voltooid, wordt meestal het uitvoeringsgeheugen vrijgegeven dat wordt gebruikt. Als u deze fout ziet, betekent dit dat de time-outquery heeft gewacht totdat andere aanvragen na de time-outperiode zijn voltooid. Er kan slechts één aanvraag zijn die alle beschikbare QE-geheugen verbruikt of dat er veel aanvragen zijn en gecombineerd, hun geheugentoekenning heeft het QE-geheugen uitgeput. Als u dergelijke langlopende aanvragen in uw workload hebt, moet u maatregelen nemen om de uitvoeringsduur te verbeteren en de hoeveelheid QE-geheugen te verlagen die ze gebruiken.
Gebruikersactie
Als u Resource Governor niet gebruikt om de groep geheugen voor bepaalde werkbelastingen te beperken, kunt u de algehele serverstatus en workload controleren. Als u Resource Governor gebruikt, controleert u de instellingen van de resourcegroep of workloadgroep.
De volgende lijst bevat een overzicht van de stappen die in het bovengenoemde artikel worden beschreven. Deze stappen kunnen helpen bij het verminderen of elimineren van QE-geheugenfouten:
Bepaal welke aanvragen in SQL Server de grote geheugentoe kennen of QE-geheugengebruikers zijn. Zie Wachttijden identificeren voor het geheugen voor queryuitvoering voor meer informatie.
Herschrijf query's om sorteer- en hashbewerkingen te minimaliseren of te voorkomen.
Werk statistieken bij en houd ze regelmatig bijgewerkt om ervoor te zorgen dat de geheugentoekenningen van SQL Server correct worden toegekend.
Maak de juiste indexen voor de geïdentificeerde query of query's. Indexen kunnen het grote aantal verwerkte rijen verminderen, waardoor de JOIN-algoritmen worden gewijzigd en de grootte van subsidies wordt verkleind of volledig worden geëlimineerd.
Gebruik waar mogelijk de hint OPTION (min_grant_percent = XX, max_grant_percent = XX) in uw query's.
Gebruik Resource Governor om het effect van QE-geheugengebruik alleen te beperken tot een bepaalde workload.
SQL Server 2017 en 2019 maken gebruik van adaptieve queryverwerking, zodat het feedbackmechanisme voor geheugentoedeling dynamisch kan worden aangepast tijdens runtime. Deze functie kan problemen met geheugentoekenning in de eerste plaats voorkomen.
Vergroot het SQL Server-geheugen of pas bestaande instellingen aan.
Controleer de volgende sql Server-geheugenconfiguratieparameters:
- maximaal servergeheugen - verhogen indien nodig
- minimale servergeheugen
- minimumgeheugen per query
U ziet ongebruikelijke instellingen. Corrigeer ze indien nodig. Account voor verhoogde geheugenvereisten voor SQL Server. De standaard- en aanbevolen instellingen worden vermeld in de configuratieopties voor servergeheugen .
Vergroot het geheugen op besturingssysteemniveau (fysiek of virtueel RAM-geheugen).
Controleer of andere toepassingen of services geheugen op deze server verbruiken. Configureer minder kritieke toepassingen of services opnieuw om minder geheugen te verbruiken of om ze naar een afzonderlijke server te verplaatsen. Met deze actie kan externe geheugenbelasting worden verwijderd.
Voer de volgende DBCC-opdrachten uit om verschillende SQL Server-geheugencaches vrij te maken: een tijdelijke meting.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE