Dela via


Övervaka minnesanvändning

gäller för:SQL Server

Övervaka en instans av SQL Server regelbundet för att bekräfta att minnesanvändningen ligger inom vanliga intervall.

Konfigurera maximalt minne för SQL Server

Som standard kan en SQL Server-instans med tiden förbruka det mesta av det tillgängliga Windows-operativsystemets minne på servern. När minnet har hämtats frigörs det inte om inte det finns minnestryck. Detta är avsiktligt och tyder inte på någon minnesläcka i SQL Server-processen. Använd alternativet maximalt serverminne för att begränsa mängden minne som SQL Server tillåts hämta för de flesta av dess användningsområden. Mer information finns i Arkitekturguiden för minneshantering.

I SQL Server i Linux ange minnesgränsen med verktyget mssql-conf och inställningen memory.memorylimitmb.

Övervaka operativsystemminne

Om du vill övervaka ett lågminnesvillkor använder du följande Windows Server-räknare. Många minnesräknare för operativsystem kan efterfrågas via dynamiska hanteringsvyer sys.dm_os_process_memory och sys.dm_os_sys_memory.

  • Minne: Tillgängliga Byte
    Den här räknaren anger hur många byte minne som för närvarande är tillgängliga för användning av processer. Låga värden för tillgängliga byte räknaren kan tyda på en total brist på operativsystemminne. Det här värdet kan frågas via T-SQL med hjälp av sys.dm_os_sys_memory.available_physical_memory_kb.

  • minne: Sidor/sek
    Den här räknaren anger antalet sidor som antingen hämtades från disken på grund av fel på hårddisken eller skrivs till disk för att frigöra utrymme i arbetsuppsättningen på grund av sidfel. En hög nivå för sidor/sek räknarens hastighet kan tyda på överdriven växling.

  • Minne: Sidfel/sek Den här räknaren anger sidfelsfrekvensen för alla processer, inklusive systemprocesser. En låg men icke-noll hastighet för växling till disk (och därmed sidfel) är typisk, även om datorn har gott om tillgängligt minne. Microsoft Windows Virtual Memory Manager (VMM) tar sidor från SQL Server och andra processer när den trimmar arbetsuppsättningsstorlekarna för dessa processer. Den här VMM-aktiviteten tenderar att orsaka sidfel.

  • Process: Sidfel/sek Den här räknaren anger hastigheten för sidfel för en viss användarprocess. Övervaka -processen: Sidfel/sek för att avgöra om diskaktiviteten orsakas av minnesväxling som utförs av SQL Server. För att avgöra om SQL Server eller någon annan process är orsaken till överdriven växling övervakar du Process: Sidfel/sek räknaren för SQL Server-processinstansen.

Mer information om hur du löser överdriven paginering, se dokumentationen om operativsystemet.

Isolera minne som används av SQL Server

Om du vill övervaka SQL Server-minnesanvändningen använder du följande SQL Server-objekträknare. Många SQL Server-objekträknare kan efterfrågas via dynamiska hanteringsvyer sys.dm_os_performance_counters eller sys.dm_os_process_memory.

Som standard hanterar SQL Server sina minnesbehov dynamiskt, baserat på tillgängliga systemresurser. Om SQL Server behöver mer minne frågar det operativsystemet för att avgöra om ledigt fysiskt minne är tillgängligt och använder det tillgängliga minnet. Om det finns lågt med ledigt minne för operativsystemet, kommer SQL Server att släppa tillbaka minne till operativsystemet tills det låga minnestillståndet har lindrats, eller tills SQL Server når minsta serverminne gränsen. Du kan dock åsidosätta alternativet att dynamiskt använda minne med hjälp av minsta serverminneoch maximalt serverminne serverkonfigurationsalternativ. Mer information finns i serverminnesalternativ.

Om du vill övervaka mängden minne som SQL Server använder undersöker du följande prestandaräknare:

  • SQL Server: Minneshanteraren: Totalt serverminne (KB)
    Den här räknaren anger mängden av operativsystemets minne som minneshanteraren i SQL Server för närvarande har allokerat till SQL Server. Det här antalet förväntas öka efter behov av faktisk aktivitet och kommer att växa efter SQL Server-start. Fråga den här räknaren med hjälp av vyn sys.dm_os_sys_info dynamisk hantering och observera kolumnen committed_kb.

  • SQL Server: Minneshanteraren: Målserverns minne (KB)
    Den här räknaren anger en idealisk mängd minne som SQL Server kan använda, baserat på den senaste arbetsbelastningen. Jämför med totalt serverminne efter en period av typisk åtgärd för att avgöra om SQL Server har en önskad mängd minne allokerat. Efter en vanlig åtgärd bör Totalt serverminne och målserverminne vara liknande. Om totalt serverminne är betydligt lägre än målserverminnekan SQL Server-instansen uppleva minnesbelastning. Under en period efter att SQL Server har startats förväntas totala serverminnet vara lägre än målserverminneeftersom totalt serverminne växer. Fråga efter den här räknaren med hjälp av den dynamiska hanteringsvyn sys.dm_os_sys_info och övervaka kolumnen committed_target_kb. Mer information och metodtips för att konfigurera minne finns i konfigurationsalternativen för Server-minne.

  • Process: Arbetsset
    Den här räknaren anger hur mycket fysiskt minne som används av en process för närvarande, enligt operativsystemet. Observera sqlservr.exe-instansen av den här räknaren. Fråga den här räknaren med hjälp av den dynamiska hanteringsvyn sys.dm_os_process_memory och observera kolumnen physical_memory_in_use_kb.

  • Process: Privata Byte
    Den här räknaren anger mängden minne som en process har begärt för egen användning i operativsystemet. Observera sqlservr.exe-instansen av den här räknaren. Eftersom den här räknaren innehåller alla minnesallokeringar som begärs av sqlservr.exe, inklusive de som inte begränsas av alternativet för maximalt serverminne, kan den här räknaren rapportera värden som är större än alternativet för maximalt serverminne.

  • SQL Server: Buffer Manager: Databassidor
    Den här räknaren anger antalet sidor i buffertpoolen med databasinnehåll. Inkluderar inte annat minne för icke-bufferpooler i SQL Server-processen. Använd den dynamiska hanteringsvyn sys.dm_os_performance_counters för att fråga denna räknare.

  • SQL Server: Buffert Manager: Buffertcacheträffkvot
    Den här räknaren är specifik för SQL Server. Ett förhållande på 90 eller högre är önskvärt. Ett värde som är större än 90 anger att mer än 90 procent av alla begäranden om data uppfylldes från datacachen i minnet utan att behöva läsa från disken. Mer information om SQL Server Buffer Manager finns i SQL Server Buffer Manager-objektet. Fråga den här räknaren med hjälp av den dynamiska hanteringsvyn sys.dm_os_performance_counters.

  • SQL Server: Buffer Manager: Förväntad sidlivslängd
    Den här räknaren mäter hur lång tid i sekunder som den äldsta sidan finns kvar i buffertpoolen. För system som använder en NUMA-arkitektur är detta genomsnittet för alla NUMA-noder. Ett högre, växande värde är bäst. En plötslig nedgång indikerar en betydande dataomsättning in och ut ur buffertpoolen, vilket indikerar att arbetsbelastningen inte helt kunde dra nytta av data som redan finns i minnet. Varje NUMA-nod har en egen nod i buffertpoolen. På servrar med mer än en NUMA-nod visar du varje buffertpoolnods förväntade sidlivslängd med hjälp av SQL Server: Buffer Node: Förväntad sidlivslängd. Fråga den här räknaren med hjälp av vyn sys.dm_os_performance_counters dynamisk hantering.

Exempel

Fastställa aktuell minnesallokering

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

SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024)  AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

Fastställa aktuell minnesanvändning för SQL Server

Följande fråga returnerar information om aktuell minnesanvändning för SQL Server.

SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024)  AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;

Fastställa sidans förväntade livslängd

Följande fråga använder sys.dm_os_performance_counters för att observera aktuellt värde för sidlivslängd för SQL Server-instansen på den övergripande nivån för bufferthanteraren och på varje enskild NUMA-nodnivå.

SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters    
WHERE counter_name = 'Page life expectancy';