Dela via


Konfigurationsalternativ för serverminne

gäller för:SQL Server

Minnesanvändningen för SQL Server Database Engine begränsas av ett par konfigurationsinställningar min server memory (MB) och max server memory (MB). Med tiden och under normala omständigheter försöker SQL Server göra anspråk på minne upp till den gräns som anges av max server memory (MB).

Anmärkning

Kolumnlagringsindex: översikt och In-Memory OLTP-översikt och användningsscenarier har egna minnesförvaltare, vilket underlättar övervakningen av buffertpoolens användning. Mer information finns i sys.dm_os_memory_clerks.

I äldre versioner av SQL Server var minnesanvändningen praktiskt taget inte begränsad, vilket indikerar för SQL Server att allt systemminne var tillgängligt för användning. Vi rekommenderar att du konfigurerar en övre gräns för SQL Server-minnesanvändning i alla versioner av SQL Server genom att max server memory (MB)konfigurera .

  • Eftersom SQL Server 2019 (15.x) ger SQL-installationsprogrammet i Windows-servrar en rekommendation för en fristående SQL Server-instans baserat på en procentandel tillgängligt systemminne vid tidpunkten för max server memory (MB) installationen.
  • När som helst kan du konfigurera om gränserna för minne (i megabyte) för en SQL Server-process som används av en instans av SQL Server via konfigurationsalternativen min server memory (MB) och max server memory (MB) .

Anmärkning

Den här guiden refererar till SQL Server-instansen i Windows. Information om minneskonfiguration i Linux finns i Metodtips för prestanda och konfigurationsriktlinjer för SQL Server i Linux och inställningen memory.memorylimitmb.

Rekommendationer

Standardinställningarna och de lägsta tillåtna värdena för dessa alternativ är:

Alternativ Förinställning Minsta tillåtna Rekommenderat
min server memory (MB) 0 0 0
max server memory (MB) 2 147 483 647 MB 128 MB 75% av tillgängligt systemminne som inte förbrukas av andra processer, inklusive andra instanser. Mer detaljerade rekommendationer finns i maximalt serverminne.

Inom dessa gränser kan SQL Server ändra sina minnesbehov dynamiskt baserat på tillgängliga systemresurser. Mer information finns i dynamisk minneshantering.

  • Om värdet max server memory (MB) är för högt kan en enskild instans av SQL Server konkurrera om minne med andra SQL Server-instanser som finns på samma värd.
  • Att ställa in max server memory (MB) för lågt är dock en förlorad prestandamöjlighet och kan orsaka minnesbelastning och prestandaproblem i SQL Server-instansen.
  • Om du anger max server memory (MB) minimivärdet kan du till och med förhindra att SQL Server startar. Om du inte kan starta SQL Server när du har ändrat det här alternativet startar du det med startalternativet -f och återställer max server memory (MB) till dess tidigare värde. Mer information finns i startalternativ för Database Engine Service.
  • Vi rekommenderar inte att du anger max server memory (MB) och min server memory (MB) är samma värde eller nära samma värden.

Anmärkning

Alternativet maximalt serverminne begränsar bara storleken på SQL Server-buffertpoolen. Alternativet maximalt serverminne begränsar inte ett återstående oreserverat minnesområde som SQL Server lämnar för allokeringar av andra komponenter, till exempel utökade lagrade procedurer, COM-objekt, icke-delade DLL:er och EXE:er.

SQL Server kan använda minne dynamiskt. Du kan dock ange minnesalternativen manuellt och begränsa mängden minne som SQL Server kan komma åt. Innan du anger mängden minne för SQL Server ska du fastställa lämplig minnesinställning genom att subtrahera, från det totala fysiska minnet, det minne som krävs för operativsystemet (OS), minnesallokeringar som inte styrs av max server memory (MB) inställningen och andra instanser av SQL Server (och andra systemanvändningar, om servern är hemma för andra program som förbrukar minne, inklusive andra instanser av SQL Server). Den här skillnaden är den maximala mängden minne som du kan tilldela till den aktuella SQL Server-instansen.

Minne kan konfigureras upp till den virtuella adressutrymmesgränsen för processen i alla SQL Server-utgåvor. Mer information finns i Minnesgränser för Windows- och Windows Server-versioner.

Minsta serverminne

Använd min server memory (MB) för att garantera en minsta mängd minne som är tillgängligt för SQL Server Memory Manager.

  • SQL Server allokerar inte omedelbart mängden minne som anges vid min server memory (MB) start. Men när minnesanvändningen har nått det här värdet på grund av klientbelastningen kan SQL Server inte frigöra minne om inte värdet min server memory (MB) för minskas. När till exempel flera instanser av SQL Server installeras samtidigt på samma server kan du överväga att ställa in parametern min server memory (MB) för att reservera minne för en instans.

  • Att ange ett min server memory (MB) värde är viktigt i en virtualiserad miljö för att säkerställa att minnesbelastningen från den underliggande värden inte försöker frigöra minne från buffertpoolen på en virtuell gästdator (VM) utöver vad som krävs för acceptabel prestanda. Helst behöver inte instanser av SQL Server på en virtuell dator konkurrera med den virtuella värdens proaktiva processer för minnesallokering.

  • SQL Server är inte garanterat att allokera mängden minne som anges i min server memory (MB). Om belastningen på servern aldrig kräver allokering av mängden minne som anges i min server memory (MB)använder SQL Server mindre minne.

Maximalt serverminne

Använd max server memory (MB) för att garantera att operativsystemet och andra program inte upplever ett skadligt minnestryck från SQL Server.

  • Innan du ställer in konfigurationen max server memory (MB) övervakar du den totala minnesförbrukningen för servern som är värd för SQL Server-instansen, under normal drift, för att fastställa minnestillgänglighet och krav. För en första konfiguration eller när det inte fanns någon möjlighet att samla in SQL Server-processminnesanvändning över tid använder du följande generaliserade metodtips för att konfigurera max server memory (MB) för en enda instans:
    • Från det totala OS-minnet subtraherar du motsvarigheten till potentiella SQL Server-trådminnesallokeringar utanför max server memory (MB) kontrollen, vilket är stackstorleken1 multiplicerat med beräknade maxarbetstrådar2.
    • Subtrahera sedan 25% för andra minnesallokeringar utanför max server memory (MB) kontrollen, till exempel säkerhetskopieringsbuffertar, utökade lagrade procedur-DLL:er, objekt som skapas med hjälp av Automation-procedurer (sp_OA anrop) och allokeringar från länkade serverleverantörer. Det här är en allmän uppskattning och din körsträcka kan variera.
    • Det som återstår bör vara inställningen max server memory (MB) för en enda instanskonfiguration.

1 Se arkitekturguiden för minneshantering för information om trådstackens storlekar per arkitektur.

2 Mer information om de beräknade standardarbetstrådar för ett visst antal tilldelade CPU:er i den aktuella värdenheten finns i Serverkonfiguration: maximalt antal arbetstrådar.

Ange alternativ manuellt

Serveralternativen min server memory (MB) och max server memory (MB) kan ställas in för att sträcka sig över ett intervall med minnesvärden. Den här metoden är användbar för system- eller databasadministratörer att konfigurera en instans av SQL Server med minneskraven för andra program eller andra instanser av SQL Server som körs på samma värd.

Använd Transact-SQL

Alternativen min server memory (MB) och max server memory (MB) är avancerade alternativ. När du använder den sp_configure system lagrade proceduren för att ändra de här inställningarna kan du bara ändra dem när visa avancerade alternativ är inställt på 1. De här inställningarna börjar gälla omedelbart utan omstart av servern. Mer information finns i sp_configure.

I följande exempel anges alternativet max server memory (MB) till 12 288 MB eller 12 GB. Även om sp_configure anger namnet på alternativet som max server memory (MB), kan du utelämna (MB).

EXECUTE sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 12288;
GO

RECONFIGURE;
GO

Följande fråga returnerar information om de för närvarande konfigurerade värdena och det värde som används för närvarande. Den här frågan returnerar resultat oavsett om sp_configure alternativet "visa avancerade alternativ" är aktiverat.

SELECT [name],
       [value],
       [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
      OR [name] = 'min server memory (MB)';

Använda SQL Server Management Studio

Använd min server memory (MB) och max server memory (MB) för att konfigurera om mängden minne (i megabyte) som hanteras av SQL Server Memory Manager för en instans av SQL Server.

  1. Högerklicka på en server i Object Explorer och välj Egenskaper.

  2. Välj sidan Minne i fönstret Serveregenskaper . De aktuella värdena för Minsta serverminne och Maximalt serverminne visas.

  3. I Alternativ för serverminne anger du önskade nummer för Minsta serverminne och Maximalt serverminne. För rekommendationer, se minsta serverminne (MB) och maximalt serverminne (MB) i denna artikel.

Följande skärmbild visar alla tre stegen:

Skärmbild av alternativen för minneskonfiguration i SSMS.

Låsa sidor i minnet (LPIM)

Windows-baserade program kan använda API:er för Windows-adressfönstertillägg (AWE) för att allokera och mappa fysiskt minne till processadressutrymmet. LPIM Windows-principen avgör vilka konton som kan komma åt API:et för att lagra data i fysiskt minne, vilket hindrar systemet från att växla data till virtuellt minne på disken. Det minne som allokeras med AWE är låst tills programmet uttryckligen frigör det eller avslutas. Användning av AWE-API:er för minneshantering i 64-bitars SQL Server kallas också ofta låsta sidor. Att låsa sidor i minnet kan hålla servern responsiv vid paging till disk. Alternativet Lås sidor i minnet är aktiverat i instanser av SQL Server Standard Edition och högre när kontot med behörighet att köra sqlservr.exe har beviljats användarbehörighet för Windows Lock pages in memory (LPIM).

Om du vill inaktivera alternativet Lås sidor i minnet för SQL Server, tar du bort rättigheten att låsa sidor i minnet för det konto som har behörighet att köra sqlservr.exe (startkontot för SQL Server).

Användning av LPIM påverkar inte dynamisk minneshantering i SQL Server, vilket gör att den kan expanderas eller krympa på begäran av andra minnesbiträden. När du använder låssidorna till höger om minnesanvändare rekommenderar vi starkt att du anger en övre gräns för max server memory (MB). Mer information finns i maximalt serverminne (MB).

LPIM bör användas när det finns tecken på att sqlservr processen är utspätt. I det här fallet rapporteras fel 17890 i felloggen, som liknar exemplet nedan:

A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

Användning av LPIM med en felaktigt konfigurerad max server memory (MB) inställning som inte tar hänsyn till andra minneskonsumenter i systemet kan orsaka instabilitet, beroende på mängden minne som krävs av andra processer eller SQL Server-minneskraven utanför omfånget max server memory (MB)för . Mer information finns i maximalt serverminne. Om behörigheten Lås sidor i minnet (LPIM) beviljas (på 32-bitars- eller 64-bitarssystem) rekommenderar vi starkt att du anger max server memory (MB) ett specifikt värde i stället för att lämna standardvärdet 2 147 483 647 MB (MB).

Anmärkning

Från och med SQL Server 2012 (11.x) behövs inte spårningsflagga 845 för att Standard Edition ska kunna använda låsta sidor.

Aktivera Lås sidor i minnet

När du har övervägt den tidigare informationen, aktivera alternativet Lås sidor i minnet för SQL Server-instansen genom att ge behörigheten till tjänstkontot. Se Aktivera alternativet Lås sidor i minnet (Windows) för mer information.

Information om hur du fastställer tjänstekontot för SQL Server-instansen finns i SQL Server Configuration Manager eller genom att göra en förfrågan på service_account från sys.dm_server_services. Mer information finns i sys.dm_server_services.

Visa Lås sidor i minnet status

Använd följande fråga för att avgöra om privilegiet Låsa sidor i minnet har beviljats tjänstkontot för instansen av SQL Server. Den här frågan stöds i SQL Server 2016 (13.x) SP1 och senare.

SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;

Följande värden sql_memory_model_desc anger status för LPIM:

  • CONVENTIONAL. Rättigheten att låsa sidor i minnet har inte beviljats.
  • LOCK_PAGES. Rätten att låsa sidor i minnet är beviljad.
  • LARGE_PAGES. Behörigheten att låsa sidor i minnet beviljas i Enterprise-läge med spårningsflagga 834 aktiverad. Det här är en avancerad konfiguration och rekommenderas inte för de flesta miljöer. Mer information och viktiga varningar finns i spårningsflagga 834.

Använd följande metoder för att avgöra om SQL Server-instansen använder låsta sidor:

  • Utdata från följande Transact-SQL fråga anger icke-nollvärden för locked_page_allocations_kb:

    SELECT osn.node_id,
           osn.memory_node_id,
           osn.node_state_desc,
           omn.locked_page_allocations_kb
    FROM sys.dm_os_memory_nodes AS omn
         INNER JOIN sys.dm_os_nodes AS osn
             ON (omn.memory_node_id = osn.memory_node_id)
    WHERE osn.node_state_desc <> 'ONLINE DAC';
    
  • Den aktuella SQL Server-felloggen rapporterar meddelandet Using locked pages in the memory manager under serverstarten.

  • Avsnittet Memory Manager i DBCC MEMORYSTATUS-utdata visar ett värde som inte är noll för AWE Allocated objektet.

Flera instanser av SQL Server

När du kör flera instanser av databasmotorn finns det olika metoder som du kan använda för att hantera minne:

  • Använd max server memory (MB) i varje instans för att styra minnesanvändningen, enligt beskrivningen tidigare. Upprätta maximala inställningar för varje instans, var försiktig så att den totala ersättningen inte är mer än det totala fysiska minnet på datorn. Du kanske vill ge varje instansminne proportionellt mot den förväntade arbetsbelastningen eller databasstorleken. Den här metoden har fördelen att när nya processer eller instanser startas blir ledigt minne tillgängligt för dem omedelbart. Nackdelen är att om du inte kör alla instanser kommer ingen av de instanser som körs att kunna använda det återstående lediga minnet.

  • Använd min server memory (MB) i varje instans för att styra minnesanvändningen, enligt beskrivningen tidigare. Upprätta minimiinställningar för varje instans så att summan av dessa minimum är 1–2 GB mindre än det totala fysiska minnet på datorn. Återigen kan du fastställa dessa miniminivåer proportionellt till den förväntade belastningen för den instansen. Den här metoden har fördelen att om inte alla instanser körs samtidigt kan de aktiva använda det återstående lediga minnesutrymme. Den här metoden är också användbar när det finns en annan minnesintensiv process på datorn, eftersom det skulle säkerställa att SQL Server åtminstone skulle få en rimlig mängd minne. Nackdelen är att när en ny instans (eller någon annan process) startar kan det ta lite tid för de instanser som körs att frigöra minne, särskilt om de måste skriva ändrade sidor tillbaka till sina databaser för att göra det.

  • Använd både max server memory (MB) och min server memory (MB) i varje instans för att styra minnesanvändningen, observera och justera varje instans maximal användning och minsta minnesskydd inom en mängd olika möjliga minnesanvändningsnivåer.

  • Gör ingenting (rekommenderas inte). De första instanserna som presenteras med en arbetsbelastning tenderar att allokera allt minne. Inaktiva instanser, eller instanser som startas senare, kan sluta köras med endast en minimal mängd minne tillgängligt. SQL Server gör inga försök att balansera minnesanvändningen mellan instanser. Alla instanser svarar dock på Windows minnesaviseringar för att justera sina minnesfotavtryck. Windows balanserar inte minne mellan program med API:et för minnesmeddelanden. Det ger bara global feedback om tillgängligheten av minne i systemet.

Du kan ändra de här inställningarna utan att starta om instanserna, så att du enkelt kan experimentera för att hitta de bästa inställningarna för ditt användningsmönster.

Exempel

A. Ange alternativet för maximalt serverminne till 4 GB

I följande exempel anges max server memory (MB) alternativet till 4 096 MB eller 4 GB. Även om sp_configure anger namnet på alternativet som max server memory (MB), kan du utelämna (MB).

EXECUTE sp_configure 'show advanced options', 1;
GO

RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 4096;
GO

RECONFIGURE;
GO

Detta matar ut en instruktion som liknar Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. Den nya minnesgränsen börjar gälla omedelbart efter körningen av RECONFIGURE. Mer information finns i sp_configure.

B. Fastställa aktuell minnesallokering

Följande fråga returnerar information om för närvarande allokerat minne.

SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
       large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
       locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
       virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
       virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
       virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
       page_fault_count AS sql_page_fault_count,
       memory_utilization_percentage AS sql_memory_utilization_percentage,
       process_physical_memory_low AS sql_process_physical_memory_low,
       process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

C. Visa värdet för max server memory (MB)

Följande fråga returnerar information om det för närvarande konfigurerade värdet och det värde som används. Den här frågan returnerar resultat oavsett om sp_configure alternativet "visa avancerade alternativ" är aktiverat.

SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';