Dela via


Lösa problem med slut på minne

gäller för:SQL Server

In-Memory OLTP använder mer minne och på olika sätt än SQL Server. Det är möjligt att mängden minne som du har installerat och allokerat för In-Memory OLTP blir otillräckligt för dina växande behov. I så fall kan minnet ta slut. Det här avsnittet beskriver hur du återställer från en OOM-situation. Se Övervaka och felsöka minnesanvändning för vägledning som kan hjälpa dig att undvika många OOM-situationer.

Beskrivs i det här avsnittet

Ämne Överblick
Lös databasåterställningsfel på grund av OOM Vad du ska göra om du får felmeddelandet "Återställningsåtgärden misslyckades för databasen "<databaseName>" på grund av otillräckligt minne i resurspoolen<resourcePoolName>"."
Lösa påverkan av låg minneskapacitet eller minnesbrist (OOM) på arbetslasten Vad du ska göra om du upptäcker att problem med lågt minne påverkar prestanda negativt.
Lösa sidallokeringsfel på grund av otillräckligt minne när tillräckligt med minne är tillgängligt Vad du ska göra om du får felmeddelandet "Tillåt inte sidallokeringar för databasen "<databaseName>" på grund av otillräckligt minne i resurspoolen "<resourcePoolName>". ..." när tillgängligt minne räcker för åtgärden.
Bästa praxis för användning av In-Memory OLTP i en VM-miljö Vad du bör tänka på när du använder In-Memory OLTP i en virtualiserad miljö.

Lösa fel vid databasåterställning på grund av OOM

När du försöker återställa en databas kan felmeddelandet visas: "Återställningsåtgärden misslyckades för databasen<databaseName>på grund av otillräckligt minne i resurspoolen "<resourcePoolName>"." Detta indikerar att servern inte har tillräckligt med ledigt minne för att återställa databasen.

Servern som du återställer en databas till måste ha tillräckligt med ledigt minne för de minnesoptimerade tabellerna i databassäkerhetskopian, annars kommer databasen inte att vara online och markeras som misstänkt.

Om servern har tillräckligt med fysiskt minne, men du fortfarande ser det här felet, kan det bero på att andra processer använder för mycket minne eller att ett konfigurationsproblem gör att det inte finns tillräckligt med minne för återställning. För den här klassen av problem använder du följande mått för att göra mer minne tillgängligt för återställningsåtgärden:

  • Stäng program som körs tillfälligt.
    Genom att stänga ett eller flera program som körs eller stoppa tjänster som inte behövs just nu gör du det minne som de använde tillgängligt för återställningsåtgärden. Du kan starta om dem efter den lyckade återställningen.

  • Öka värdet för MAX_MEMORY_PERCENT.
    Om databasen är bunden till en resurspool, vilket är bästa praxis, styrs det minne som är tillgängligt för återställning av MAX_MEMORY_PERCENT. Om värdet är för lågt misslyckas återställningen. Det här kodfragmentet ändras MAX_MEMORY_PERCENT för resurspoolen PoolHk till 70% installerat minne.

    Viktig

    Om servern körs på en virtuell dator och inte är dedikerad anger du värdet för MIN_MEMORY_PERCENT till samma värde som MAX_MEMORY_PERCENT.
    Mer information finns i avsnittet Metodtips med hjälp av In-Memory OLTP i en VM-miljö.

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

    Information om maximala värden för MAX_MEMORY_PERCENT finns i avsnittet Procent av tillgängligt minne för minnesoptimerade tabeller och index.

  • Öka serverminnets maximala minne.
    Information om hur du konfigurerar maximalt serverminne se avsnittet Konfigurationsalternativ för serverminnesserver.

Lösa effekten av låg minnesanvändning eller OOM-villkor på arbetsbelastningen

Självklart är det bäst att inte komma in i en låg minnes- eller OOM-situation (slut på minne). Bra planering och övervakning kan hjälpa dig att undvika OOM-situationer. Ändå förutser inte ens den bästa planeringen alltid vad som faktiskt händer, och du kan hamna med ont om minne eller OOM (Out of Memory). Det finns två steg för att återställa från OOM:

  1. Öppna en DAC(dedikerad administratörsanslutning)

  2. Vidta korrigerande åtgärder

Öppna en DAC (dedikerad administratörsanslutning)

SQL Server tillhandahåller en dedikerad administratörsanslutning (DAC). Med DAC kan en administratör komma åt en instans av SQL Server Database Engine som körs för att felsöka problem på servern även när servern inte svarar på andra klientanslutningar. DAC är tillgängligt via verktyget sqlcmd och SQL Server Management Studio.

Vägledning om hur du använder DAC via SSMS eller sqlcmdfinns i Diagnostikanslutning för databasadministratörer.

Vidta korrigerande åtgärder

För att lösa OOM-villkoret måste du antingen frigöra befintligt minne genom att minska användningen eller göra mer minne tillgängligt för dina minnesinterna tabeller.

Frigör befintligt minne

Ta bort icke-nödvändiga minnesoptimerade tabellrader och vänta på skräpinsamling

Du kan ta bort icke-väsentliga rader från en minnesoptimerad tabell. Skräpinsamlaren returnerar det minne som används av dessa rader till tillgängligt minne. Minnesintern OLTP-motor samlar in skräprader aggressivt. En tidskrävande transaktion kan dock förhindra skräpinsamling. Om du till exempel har en transaktion som körs i 5 minuter kan alla radversioner som skapats på grund av uppdaterings-/borttagningsåtgärder medan transaktionen var aktiv inte vara skräpinsamling.

Flytta en eller flera rader till en diskbaserad tabell

Följande TechNet-artiklar ger vägledning om hur du flyttar rader från en minnesoptimerad tabell till en diskbaserad tabell.

Öka tillgängligt minne

Öka värdet för MAX_MEMORY_PERCENT i resurspoolen

Om du inte har skapat en namngiven resurspool för dina minnesinterna tabeller bör du göra det och binda dina In-Memory OLTP-databaser till den. Se avsnittet Binda en databas med Memory-Optimized-tabeller till en resurspool för vägledning om hur du skapar och binder dina In-Memory OLTP-databaser till en resurspool.

Om din In-Memory OLTP-databas är bunden till en resurspool kanske du kan öka den procentandel av minnet som poolen kan komma åt. Se underavsnittet Ändra MIN_MEMORY_PERCENT och MAX_MEMORY_PERCENT i en befintlig pool för vägledning om hur du ändrar värdet för MIN_MEMORY_PERCENT och MAX_MEMORY_PERCENT för en resurspool.

Öka värdet för MAX_MEMORY_PERCENT.
Det här kodfragmentet ändras MAX_MEMORY_PERCENT för resurspoolen PoolHk till 70% installerat minne.

Viktig

Om servern körs på en virtuell dator och inte är dedikerad anger du värdet för MIN_MEMORY_PERCENT och MAX_MEMORY_PERCENT till samma värde.
Mer information finns i avsnittet Metodtips med hjälp av In-Memory OLTP i en VM-miljö.

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

Information om maximala värden för MAX_MEMORY_PERCENT finns i avsnittet Procent av tillgängligt minne för minnesoptimerade tabeller och index.

Installera ytterligare minne

I slutändan är den bästa lösningen, om möjligt, att installera ytterligare fysiskt minne. Om du gör det kommer du förmodligen också att kunna öka värdet för MAX_MEMORY_PERCENT (se underavsnittet Ändra MIN_MEMORY_PERCENT och MAX_MEMORY_PERCENT på en befintlig pool) eftersom SQL Server sannolikt inte behöver mer minne, så att du kan göra det mesta om inte allt nyligen installerat minne tillgängligt för resurspoolen.

Viktig

Om servern körs på en virtuell dator och inte är dedikerad anger du värdet för MIN_MEMORY_PERCENT och MAX_MEMORY_PERCENT till samma värde.
Mer information finns i avsnittet Metodtips med hjälp av In-Memory OLTP i en VM-miljö.

Lösa sidallokeringsfel på grund av otillräckligt minne när tillräckligt med minne är tillgängligt

Om du får felmeddelandet 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. i felloggen när det tillgängliga fysiska minnet räcker för att allokera sidan kan det bero på en inaktiverad Resursguvernör. När resursguvernören är inaktiverad inducerar MEMORYBROKER_FOR_RESERVE ett artificiellt minnestryck.

För att lösa detta måste du aktivera resursguvernören.

Se Aktivera Resource Governor- för information om gränser och begränsningar samt vägledning om hur du aktiverar Resource Governor med hjälp av Object Explorer, Resource Governor-egenskaper eller Transact-SQL.

Metodtips med In-Memory OLTP i en VM-miljö

Servervirtualisering kan hjälpa dig att sänka IT-kapital och driftskostnader och uppnå större IT-effektivitet med förbättrad programetablering, underhåll, tillgänglighet och säkerhetskopiering/återställningsprocesser. Med de senaste tekniska framstegen kan komplexa databasarbetsbelastningar enklare konsolideras med hjälp av virtualisering. Det här avsnittet beskriver metodtips för användning av SQL Server In-Memory OLTP i en virtualiserad miljö.

Förallokering av minne

För minne i en virtualiserad miljö är bättre prestanda och förbättrat stöd viktiga överväganden. Du måste kunna både snabbt allokera minne till virtuella datorer beroende på deras krav (belastningar med hög belastning och låg belastning) och se till att minnet inte slösas bort. Funktionen Hyper-V dynamiskt minne ökar flexibiliteten i hur minnet allokeras och hanteras mellan virtuella datorer som körs på en värd.

Vissa metodtips för virtualisering och hantering av SQL Server måste ändras när du virtualiserar en databas med minnesoptimerade tabeller. Utan minnesoptimerade tabeller är två av de bästa metoderna:

  • Om du använder minimalt serverminne är det bättre att bara tilldela den mängd minne som krävs så att tillräckligt med minne finns kvar för andra processer (vilket undviker växling).
  • Ange inte förallokeringsvärdet för minnet för högt. Annars kanske andra processer inte får tillräckligt med minne vid den tidpunkt då de behöver det, vilket kan leda till minnesväxling.

Om du följer ovanstående metoder för en databas med minnesoptimerade tabeller kan ett försök att återställa en databas leda till att databasen är i tillståndet "Väntar på återställning", även om du har tillräckligt med minne för att återställa databasen. Anledningen till detta är att In-Memory OLTP vid start laddar data i minnet mer aggressivt än vad dynamisk minnesallokering tilldelar minne till databasen.

Upplösning

Minimera detta genom att i förväg allokera tillräckligt med minne till databasen för att återställa eller starta om databasen, inte ett minsta värde som förlitar sig på dynamiskt minne för att tillhandahålla ytterligare minne när det behövs.

Se även

Hantera minne för In-Memory OLTP-
Övervaka och felsöka minnesanvändning
binda en databas med Memory-Optimized tabeller till en resurspool
arkitekturguide för minneshantering
Konfigurationsalternativ för serverminne