Delen via


Geheugengebruik bewaken

van toepassing op:SQL Server-

Bewaak periodiek een exemplaar van SQL Server om te controleren of het geheugengebruik zich binnen normale bereiken bevindt.

Maximaal geheugen voor SQL Server configureren

Standaard kan een SQL Server-exemplaar in de loop van de tijd het grootste deel van het beschikbare Windows-besturingssysteemgeheugen op de server verbruiken. Zodra het geheugen is verkregen, wordt het niet vrijgegeven, tenzij geheugendruk wordt gedetecteerd. Dit is standaard en geeft geen geheugenlek aan in het SQL Server-proces. Gebruik de optie maximaal servergeheugen om de hoeveelheid geheugen te beperken die SQL Server voor het grootste deel van het gebruik mag verkrijgen. Zie de architectuurhandleiding voor geheugenbeheervoor meer informatie.

In SQL Server op Linux de geheugenlimiet instellen met het hulpprogramma mssql-conf en de instelling memory.memorylimitmb.

Besturingssysteemgeheugen bewaken

Als u wilt controleren op een voorwaarde met weinig geheugen, gebruikt u de volgende Windows-servertellers. Veel geheugenmeteritems van het besturingssysteem kunnen worden opgevraagd via de dynamische beheerweergaven sys.dm_os_process_memory en sys.dm_os_sys_memory.

  • geheugen: beschikbare bytes
    Deze teller geeft aan hoeveel bytes geheugen er momenteel beschikbaar zijn voor gebruik door processen. Lage waarden voor de teller Beschikbare bytes kunnen duiden op een algemeen tekort aan geheugen van het besturingssysteem. Deze waarde kan worden opgevraagd via T-SQL met behulp van sys.dm_os_sys_memory.available_physical_memory_kb.

  • geheugen: pagina's per seconde
    Deze teller geeft het aantal pagina's aan dat vanwege harde paginafouten van de schijf is opgehaald of naar de schijf is geschreven om ruimte vrij te maken in de werkset vanwege paginafouten. Een hoog tarief voor de Pagina's per seconde teller kan duiden op overmatige paging.

  • geheugen: Paginafouten per seconde Deze teller geeft de snelheid aan van paginafouten voor alle processen, inclusief systeemprocessen. Een lage maar niet-nulsnelheid van paging naar schijf (en dus paginafouten) is typisch, zelfs als de computer voldoende geheugen heeft. Microsoft Windows Virtual Memory Manager (VMM) neemt pagina's weg van SQL Server en andere processen terwijl het de werksetgroottes van die processen verkleint. Deze VMM-activiteit veroorzaakt meestal paginafouten.

  • proces: Paginafouten per seconde Deze teller geeft de snelheid aan van paginafouten voor een bepaald gebruikersproces. Controleer proces: paginafouten per seconde om te bepalen of schijfactiviteit wordt veroorzaakt door paging door SQL Server. Als u wilt bepalen of SQL Server of een ander proces de oorzaak is van overmatige paging, monitort u de teller proces: paginafouten/sec voor het SQL Server-procesexemplaar.

Zie de documentatie van het besturingssysteem voor meer informatie over het oplossen van overmatige paging.

Geheugen isoleren dat wordt gebruikt door SQL Server

Als u het geheugengebruik van SQL Server wilt bewaken, gebruikt u de volgende SQL Server-objecttellers. Veel SQL Server-objecttellers kunnen worden opgevraagd via de dynamische beheerweergaven sys.dm_os_performance_counters of sys.dm_os_process_memory.

SQL Server beheert standaard dynamisch de geheugenvereisten op basis van beschikbare systeembronnen. Als SQL Server meer geheugen nodig heeft, wordt het besturingssysteem opgevraagd om te bepalen of er vrij fysiek geheugen beschikbaar is en het beschikbare geheugen wordt gebruikt. Als er weinig geheugen beschikbaar is voor het besturingssysteem, brengt SQL Server geheugen terug naar het besturingssysteem totdat de lage geheugenvoorwaarde wordt verholpen of totdat SQL Server de minimale servergeheugen limiet bereikt. U kunt de optie voor dynamisch gebruik van geheugen echter overschrijven met behulp van de min servergeheugenen maximale servergeheugen serverconfiguratieopties. Zie servergeheugenoptiesvoor meer informatie.

Bekijk de volgende prestatiemeteritems om de hoeveelheid geheugen te controleren die door SQL Server wordt gebruikt:

  • SQL Server: Geheugenbeheerder: Totale Servergeheugen (KB)
    Deze teller geeft de hoeveelheid besturingssysteemgeheugen aan die de SQL Server-geheugenbeheerder momenteel heeft toegewezen aan SQL Server. Dit aantal wordt naar verwachting vergroot volgens de werkelijke activiteit en zal toenemen na het opstarten van SQL Server. Voer een query uit op deze teller met behulp van de sys.dm_os_sys_info dynamische beheerweergave, waarbij de kolom committed_kb wordt waargenomen.

  • SQL Server: Memory Manager: Target Server Memory (KB)
    Deze teller geeft een ideale hoeveelheid geheugen aan die SQL Server kan verbruiken, op basis van recente werkbelasting. Vergelijk met Totale servergeheugen na een bepaalde periode van een normale bewerking om te bepalen of SQL Server een gewenste hoeveelheid geheugen heeft toegewezen. Na een typische bewerking moet Total Server Memory en Target Server Memory vergelijkbaar zijn. Als totaal servergeheugen aanzienlijk lager is dan doelservergeheugen, ondervindt het SQL Server-exemplaar mogelijk geheugenbelasting. Tijdens een periode nadat SQL Server is gestart, wordt totaal servergeheugen naar verwachting lager dan doelservergeheugenterwijl totaal servergeheugen toeneemt. Voer een query uit op deze teller met behulp van de sys.dm_os_sys_info dynamische beheerweergave, waarbij de kolom committed_target_kb wordt waargenomen. Zie de Server-geheugenconfiguratieoptiesvoor meer informatie en aanbevolen procedures voor het configureren van geheugen.

  • proces: werkset
    Deze teller geeft de hoeveelheid fysiek geheugen aan die momenteel wordt gebruikt door een proces, volgens het besturingssysteem. Bekijk het sqlservr.exe exemplaar van deze teller. Voer een query uit op deze teller met behulp van de sys.dm_os_process_memory dynamische beheerweergave, waarbij de kolom physical_memory_in_use_kb wordt waargenomen.

  • proces: privébytes
    Deze teller geeft de hoeveelheid geheugen aan die een proces heeft aangevraagd voor eigen gebruik voor het besturingssysteem. Bekijk het sqlservr.exe exemplaar van deze teller. Omdat deze teller alle geheugentoewijzingen bevat die zijn aangevraagd door sqlservr.exe, inclusief de toewijzingen die niet zijn beperkt door de optie voor maximaal servergeheugen, kan deze teller waarden rapporteren die groter zijn dan de optie voor maximaal servergeheugen.

  • SQL Server: Bufferbeheer: Databasepagina's
    Deze teller geeft het aantal pagina's in de buffergroep aan met database-inhoud. Bevat geen ander geheugen voor niet-buffergroepen binnen het SQL Server-proces. Voer een query uit op deze teller met behulp van de sys.dm_os_performance_counters dynamische beheerweergave.

  • SQL Server: Bufferbeheer: buffercachetrefferverhouding
    Deze teller is specifiek voor SQL Server. Een verhouding van 90 of hoger is wenselijk. Een waarde groter dan 90 geeft aan dat meer dan 90 procent van alle aanvragen voor gegevens is voldaan vanuit de gegevenscache in het geheugen zonder dat ze van schijf moeten worden gelezen. Zie het SQL Server Buffer Manager-objectvoor meer informatie over SQL Server Buffer Manager. Voer een query uit op deze teller met behulp van de sys.dm_os_performance_counters dynamische beheerweergave.

  • SQL Server: Bufferbeheer: levensverwachting van pagina's
    Deze teller meet de hoeveelheid tijd in seconden dat de oudste pagina in de buffergroep blijft. Voor systemen die een NUMA-architectuur gebruiken, is dit het gemiddelde voor alle NUMA-knooppunten. Een hogere, groeiende waarde is het beste. Een plotselinge dip wijst op aanzienlijke wisselingen van gegevens in en uit de buffer pool, wat aangeeft dat de workload niet volledig kan profiteren van gegevens die al in het geheugen staan. Elk NUMA-knooppunt heeft een eigen knooppunt van de buffergroep. Op servers met meer dan één NUMA-knooppunt bekijkt u de levensverwachting van elk buffergroepknooppunt met behulp van SQL Server: Bufferknooppunt: levensverwachting van pagina's. Voer een query uit op deze teller met behulp van de sys.dm_os_performance_counters dynamische beheerweergave.

Voorbeelden

Huidige geheugentoewijzing bepalen

De volgende query's retourneren informatie over momenteel toegewezen geheugen.

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;  

Actueel geheugengebruik van SQL Server bepalen

De volgende query retourneert informatie over het huidige GEHEUGENgebruik van 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;

Levensverwachting van pagina bepalen

In de volgende query wordt sys.dm_os_performance_counters gebruikt om de huidige levensverwachting van de pagina van het SQL Server-exemplaar te observeren waarde op het niveau van de algehele bufferbeheer en op elk NUMA-knooppuntniveau.

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