Delen via


Problemen met onvoldoende geheugen oplossen

van toepassing op:SQL Server-

In-Memory OLTP gebruikt meer geheugen en op verschillende manieren dan SQL Server. Het is mogelijk dat de hoeveelheid geheugen die u hebt geïnstalleerd en toegewezen voor In-Memory OLTP ontoereikend wordt voor uw groeiende behoeften. Als dat het zo is, kunt u onvoldoende geheugen meer hebben. In dit onderwerp wordt beschreven hoe u herstelt van een OOM-situatie. Zie Bewaken en problemen met geheugengebruik oplossen voor hulp die u kan helpen bij het voorkomen van veel OOM-situaties.

Behandeld in dit onderwerp

Onderwerp Overzicht
Herstelfouten van de database oplossen vanwege OOM Wat u moet doen als u de foutmelding krijgt: 'Herstelbewerking is mislukt voor database '<databaseName>' vanwege onvoldoende geheugen in de resourcepool '<resourcePoolName>'.
Impact van lage geheugen- of OOM-omstandigheden op de werkbelasting oplossen Wat te doen als u merkt dat problemen met weinig geheugen de prestaties negatief beïnvloeden.
Problemen met paginatoewijzing oplossen vanwege onvoldoende geheugen wanneer er voldoende geheugen beschikbaar is Wat moet u doen als u de foutmelding krijgt: "Het verbieden van paginatoewijzingen voor database '<databaseName>' vanwege onvoldoende geheugen in de resource pool '<resourcePoolName>'?" ..." indien beschikbaar geheugen voldoende is voor de bewerking.
Aanbevolen procedures voor het gebruik van In-Memory OLTP in een VM-omgeving Houd rekening met het gebruik van In-Memory OLTP in een gevirtualiseerde omgeving.

Databaseherstelfouten oplossen als gevolg van een geheugenuitputting (OOM)

Wanneer u een database probeert te herstellen, wordt mogelijk het foutbericht weergegeven: 'Herstelbewerking is mislukt voor database'<databaseName>' vanwege onvoldoende geheugen in de resourcegroep'<resourcePoolName>'. Dit geeft aan dat de server onvoldoende geheugen heeft om de database te herstellen.

De server waarop u een database herstelt, moet voldoende geheugen hebben voor de tabellen die zijn geoptimaliseerd voor het geheugen in de databaseback-up, anders komt de database niet online en wordt deze gemarkeerd als verdacht.

Als de server voldoende fysiek geheugen heeft, maar deze fout nog steeds wordt weergegeven, kan het zijn dat andere processen te veel geheugen gebruiken of dat er onvoldoende geheugen beschikbaar is voor herstel. Gebruik voor deze klasse problemen de volgende metingen om meer geheugen beschikbaar te maken voor de herstelbewerking:

  • Actieve toepassingen tijdelijk sluiten.
    Als u een of meer actieve toepassingen sluit of services stopt die momenteel niet nodig zijn, maakt u het geheugen beschikbaar voor de herstelbewerking. U kunt ze opnieuw opstarten na de geslaagde herstelbewerking.

  • Verhoog de waarde van MAX_MEMORY_PERCENT.
    Als de database is gebonden aan een resourcegroep, wat de best practice is, wordt het geheugen dat beschikbaar is om te herstellen beheerd door MAX_MEMORY_PERCENT. Als de waarde te laag is, mislukt het herstellen. Dit codefragment verandert MAX_MEMORY_PERCENT voor de resourcegroep PoolHk in 70% van het geïnstalleerde geheugen.

    Belangrijk

    Als de server wordt uitgevoerd op een virtuele machine en niet is toegewezen, stelt u de waarde van MIN_MEMORY_PERCENT in op dezelfde waarde als MAX_MEMORY_PERCENT.
    Zie het onderwerp Aanbevolen procedures met behulp van In-Memory OLTP in een VM-omgeving voor meer informatie.

    -- 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  
    
    

    Zie de onderwerpsectie Percentage geheugen dat beschikbaar is voor tabellen en indexen die zijn geoptimaliseerd voor geheugen,voor meer informatie over maximumwaarden voor MAX_MEMORY_PERCENT.

  • Verhoog het maximale servergeheugen.
    Zie het onderwerp Server Memory Server Configuration Optionsvoor meer informatie over het configureren van maximum servergeheugen.

Gevolgen van lage geheugen- of OOM-omstandigheden voor de workload oplossen

Het is natuurlijk het beste om niet in een situatie met weinig geheugen of OOM (onvoldoende geheugen) te komen. Een goede planning en bewaking kan helpen bij het voorkomen van OOM-situaties. Toch voorziet de beste planning niet altijd wat er daadwerkelijk gebeurt en kan het zijn dat u te weinig geheugen of OOM krijgt. Er zijn twee stappen voor het herstellen van OOM:

  1. open een DAC- (Dedicated Administrator Connection)

  2. corrigerende maatregelen nemen

Een DAC openen (Dedicated Administrator Connection)

SQL Server biedt een toegewezen beheerdersverbinding (DAC). Met de DAC kan een beheerder toegang krijgen tot een actief exemplaar van SQL Server Database Engine om problemen op de server op te lossen, zelfs wanneer de server niet reageert op andere clientverbindingen. De DAC is beschikbaar via het hulpprogramma sqlcmd en SQL Server Management Studio.

Raadpleeg Diagnostische verbinding voor databasebeheerdersvoor hulp bij het gebruik van DAC via SSMS of sqlcmd.

Corrigerende actie ondernemen

Als u de OOM-voorwaarde wilt oplossen, moet u bestaand geheugen vrijmaken door het gebruik te verminderen of meer geheugen beschikbaar te maken voor uw in-memory tabellen.

Bestaand geheugen vrijmaken

Niet-essentiële rijen van geheugen-geoptimaliseerde tabellen verwijderen en wachten op de geheugenopruiming.

U kunt niet-essentiële rijen verwijderen uit een tabel die is geoptimaliseerd voor geheugen. De garbage collector geeft het geheugen dat door deze rijen wordt gebruikt weer terug aan het beschikbare geheugen. De In-memory OLTP-engine verzamelt onbruikbare rijen op agressieve wijze. Een langdurige transactie kan echter de garbagecollection voorkomen. Als u bijvoorbeeld een transactie hebt die vijf minuten duurt, kunnen rijversies die zijn aangemaakt door update- of verwijderbewerkingen terwijl de transactie actief was, niet worden opgeruimd.

Een of meer rijen verplaatsen naar een tabel op basis van een schijf

De volgende TechNet-artikelen bevatten richtlijnen voor het verplaatsen van rijen van een tabel die is geoptimaliseerd voor geheugen naar een tabel op basis van een schijf.

Het beschikbare geheugen vergroten

Verhoog de waarde van MAX_MEMORY_PERCENT in de bronpool

Als u geen benoemde resourcegroep hebt gemaakt voor uw in-memory tabellen, moet u dat doen en uw In-Memory OLTP-databases hieraan binden. Zie het onderwerp Een database verbinden met Memory-Optimized tabellen aan een resourcegroep voor hulp bij het maken en koppelen van uw In-Memory OLTP-databases aan een resourcegroep.

Als uw In-Memory OLTP-database is gebonden aan een hulpbronnenpool, kunt u mogelijk het percentage geheugen verhogen dat de pool kan benaderen. Zie het subonderwerp Wijzigen MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT in een bestaande pool voor hulp bij het wijzigen van de waarde van MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT voor een resourcegroep.

Verhoog de waarde van MAX_MEMORY_PERCENT.
Dit codefragment verandert MAX_MEMORY_PERCENT voor de resourcegroep PoolHk in 70% van het geïnstalleerde geheugen.

Belangrijk

Als de server wordt uitgevoerd op een virtuele machine en niet is toegewezen, stelt u de waarde van MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT in op dezelfde waarde.
Zie het onderwerp Aanbevolen procedures met behulp van In-Memory OLTP in een VM-omgeving voor meer informatie.

-- 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  

Zie de onderwerpsectie Percentage geheugen dat beschikbaar is voor tabellen en indexen die zijn geoptimaliseerd voor geheugen,voor meer informatie over maximumwaarden voor MAX_MEMORY_PERCENT.

Extra geheugen installeren

Uiteindelijk is de beste oplossing, indien mogelijk, het installeren van extra fysiek geheugen. Als u dit doet, moet u er rekening mee houden dat u waarschijnlijk ook de waarde van MAX_MEMORY_PERCENT kunt verhogen (zie het subonderwerp Wijzigen MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT in een bestaande pool) omdat SQL Server waarschijnlijk niet meer geheugen nodig heeft, zodat u het meeste kunt doen als niet al het nieuw geïnstalleerde geheugen beschikbaar is voor de resourcegroep.

Belangrijk

Als de server wordt uitgevoerd op een virtuele machine en niet is toegewezen, stelt u de waarde van MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT in op dezelfde waarde.
Zie het onderwerp Aanbevolen procedures met behulp van In-Memory OLTP in een VM-omgeving voor meer informatie.

Problemen met paginatoewijzing oplossen vanwege onvoldoende geheugen wanneer er voldoende geheugen beschikbaar is

Als u het foutbericht krijgt, 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. in het foutenlogboek wanneer het beschikbare fysieke geheugen voldoende is om de pagina toe te wijzen, kan dit worden veroorzaakt door een uitgeschakelde Resource Governor. Wanneer de Resource Governor is uitgeschakeld, zorgt MEMORYBROKER_FOR_RESERVE voor een kunstmatige belasting van het geheugen.

U kunt dit oplossen door de Resource Governor in te schakelen.

Zie Resource Governor inschakelen voor informatie over limieten en beperkingen, evenals richtlijnen voor het inschakelen van Resource Governor met behulp van Object Explorer, Eigenschappen van Resource Governor of Transact-SQL.

Aanbevolen procedures voor het gebruik van In-Memory OLTP in een VM-omgeving

Servervirtualisatie kan u helpen de IT-kapitaal- en operationele kosten te verlagen en meer IT-efficiëntie te bereiken met verbeterde inrichting van toepassingen, onderhoud, beschikbaarheid en back-up/herstelprocessen. Met recente technologische ontwikkelingen kunnen complexe databaseworkloads gemakkelijker worden geconsolideerd met behulp van virtualisatie. In dit onderwerp worden aanbevolen procedures behandeld voor het gebruik van SQL Server In-Memory OLTP in een gevirtualiseerde omgeving.

Vooraf toegewezen geheugen

Voor geheugen in een gevirtualiseerde omgeving zijn betere prestaties en verbeterde ondersteuning essentiële overwegingen. U moet snel geheugen kunnen toewijzen aan virtuele machines, afhankelijk van hun vereisten (piek- en dalbelastingen) en ervoor zorgen dat het geheugen niet verspild is. De functie Hyper-V dynamisch geheugen vergroot de flexibiliteit in de wijze waarop het geheugen wordt toegewezen en beheerd tussen virtuele machines die op een host worden uitgevoerd.

Sommige aanbevolen procedures voor het virtualiseren en beheren van SQL Server moeten worden gewijzigd bij het virtualiseren van een database met tabellen die zijn geoptimaliseerd voor geheugen. Zonder tabellen die zijn geoptimaliseerd voor geheugen, zijn twee van de aanbevolen procedures:

  • Als u min servergeheugen gebruikt, is het beter om alleen de hoeveelheid geheugen toe te wijzen die nodig is, zodat voldoende geheugen overblijft voor andere processen (waardoor paging wordt vermeden).
  • Stel de waarde voor vooraf toewijzen van geheugen niet te hoog in. Anders krijgen andere processen mogelijk onvoldoende geheugen op het moment dat ze dit nodig hebben. Dit kan leiden tot paging van geheugen.

Als u de bovenstaande praktijken volgt voor een database met geheugen-geoptimaliseerde tabellen, kan een poging om een database te herstellen ertoe leiden dat de database de status "Herstel in behandeling" heeft, zelfs als u voldoende geheugen hebt om de database te herstellen. De reden hiervoor is dat bij het opstarten In-Memory OLTP gegevens agressiever in het geheugen brengt dan dynamische geheugentoewijzing geheugen aan de database toewijst.

Resolutie

U kunt dit verhelpen door voldoende geheugen toe te wijzen aan de database om de database te herstellen of opnieuw op te starten, niet een minimumwaarde die afhankelijk is van dynamisch geheugen om het extra geheugen te bieden wanneer dat nodig is.

Zie ook

Geheugen beheren voor In-Memory OLTP-
Geheugengebruik bewaken en problemen oplossen met
een database met Memory-Optimized tabellen aan een resourcepool verbinden
Handleiding voor geheugenbeheerarchitectuur
Servergeheugen Serverconfiguratieopties