MSSQLSERVER_17890

Van toepassing op:SQL Server

Details

Attribute Value
Productnaam SQL Server
Gebeurtenis-id 17890
Bron van gebeurtenis MSSQLSERVER
Onderdeel SQLEngine
Symbolische naam SRV_WS_TRIMMED
Berichttekst Een aanzienlijk deel van het SQL Server-procesgeheugen is uitgepagineerd. Dit kan leiden tot prestatieverslechtering. Duur: %d seconden. Werkset (KB): %I64d, doorgevoerd (KB): %I64d, geheugengebruik: %d%%.

Explanation

Je kunt het volgende foutbericht tegenkomen in het SQL Server foutlogboek of het Windows Application event log.

Een aanzienlijk deel van het SQL Server-procesgeheugen is uitgepagineerd. Dit kan leiden tot prestatieverslechtering. Duur: 0 seconden. Werkset (KB): 3383250, gecommitteerd (KB): 9112480, geheugengebruik: 37%.

Je kunt ook een plotselinge prestatievermindering merken bij de uitvoering van een query en alle andere bewerkingen op de SQL Server.

Oorzaak

SQL Server monitort de verschillende geheugengerelateerde informatie over het SQL Server-proces. In dit geval heeft het gedetecteerd dat de werkset van het proces minder dan 50% van het toegewijde procesgeheugen is. Als gevolg daarvan wordt deze waarschuwing afgedrukt. De gebruikelijke oorzaken van deze waarschuwing zijn:

  • Het besturingssysteem bladert grote delen van het geheugen dat de SQL Server heeft toegewezen uit aan het pagingbestand.
  • Dit kan te wijten zijn aan plotselinge toegenomen vraag naar geheugen van andere applicaties of de behoeften van het besturingssysteem.
  • Dit kan ook gebeuren wanneer bepaalde apparaatstuurprogramma's aaneengesloten geheugentoewijzingen aanvragen voor hun behoeften.

Gebruikersactie

Je kunt voorkomen dat het Windows-besturingssysteem het bufferpoolgeheugen van het SQL Server-proces uitpagineert door het geheugen dat voor de bufferpool is toegewezen in fysiek geheugen te vergrendelen. Je vergrendelt het geheugen door de Lock Pages in Memory gebruikersrecht toe te wijzen aan het gebruikersaccount dat als opstartaccount van de SQL Server-dienst wordt gebruikt. Maar voordat je deze oplossing implementeert, bekijk eerst de secties Wat veroorzaakt dat SQL Server-geheugen wordt uitgebladderd en Belangrijke overwegingen voordat je het gebruikersrecht "Pagina's in het geheugen vergrendelen" toewijst voor een instantie van SQL Server

Note

Door Lock Pages in Memory te gebruiken, zorgt het ervoor dat het geheugen dat door SQL Server wordt beheerd niet wordt uitgepaged. Threadstacks, de EXE en eventuele DLL-images, heapgeheugen en CLR-geheugen kunnen echter nog steeds door het besturingssysteem worden uitgepaged.

Vanaf SQL Server 2008 SP1 Cumulatieve Update 2 kunnen zowel SQL Server Standard als Enterprise edities gebruikmaken van de Lock-pagina's in het geheugen gebruikmakende gebruikersrechter. Voor meer informatie over ondersteuning voor vergrendelde pagina's, zie KB970070 - Ondersteuning voor vergrendelde pagina's op SQL Server Standard Edition (64-bit) systemen.

Om de Lock-pagina's in het geheugen toe te wijzen, volg je deze stappen:

  1. Klik op Start, klik op Run, typ gpedit.msc en klik dan op OK.
  2. Let op: Het groepsbeleid-venster verschijnt.
  3. Vouw de Computerconfiguratie uit en vervolgens de Windows-instellingen.
  4. Breid de beveiligingsinstellingen uit en vervolgens de lokale beleidslijnen.
  5. Klik op Gebruikersrechtentoewijzing en klik vervolgens dubbel op Pagina's vergrendelen in het geheugen.
  6. Klik in het dialoogvenster Lokale Beveiligingsbeleidinstellingen op Gebruiker of Groep toevoegen.
  7. Voeg in het venster Gebruikers of GroepenKiezen het account toe dat toestemming heeft om het Sqlservr.exe-bestand uit te voeren, en klik vervolgens op OK.
  8. Sluit het groepsbeleid-dialoogvenster .
  9. Start de SQL Server-service opnieuw.

Nadat je de Lock Pages in memory user right hebt toegewezen en de SQL Server-service opnieuw hebt gestart, wordt het Windows-besturingssysteem niet langer uit het bufferpoolgeheugen binnen het SQL Server-proces gepaged. Het Windows-besturingssysteem kan echter nog steeds het niet-buffer poolgeheugen binnen het SQL Server-proces uitschakelen.

Je kunt valideren dat het gebruikersrecht wordt gebruikt door de instantie van SQL Server door ervoor te zorgen dat het volgende bericht bij het opstarten in het SQL Server Error Log staat: "Locking pages gebruiken voor bufferpool"

Dit bericht geldt alleen voor SQL Server. Voor meer informatie over dit bericht in de ERRORLOG, bezoek het volgende: Moet ik de Lock-pagina's toewijzen voor geheugenprivileges in het lokale systeem

Wanneer het Windows-besturingssysteem het niet-buffer poolgeheugen verwijdert, kun je nog steeds prestatieproblemen ondervinden. De foutmeldingen die in de sectie "Uitleg" worden genoemd, worden echter niet geregistreerd in het SQL Server-foutlogboek.

Wat veroorzaakt dat SQL Server-geheugen wordt uitgepaged

Er zijn drie brede categorieën problemen die dit probleem kunnen veroorzaken:

  • Application-Related Problemen: Alle applicaties samen hebben het beschikbare fysieke geheugen uitgeput en het besturingssysteem moet wat geheugen vrijmaken voor nieuwe applicatieverzoeken voor resources. Meestal is de aanpak hier om te achterhalen welke applicaties het geheugen uitputten en de nodige stappen te nemen om het geheugen tussen hen in balans te brengen zonder dat het RAM uitput.
  • Problemen met apparaatdrivers: Apparaatdrivers kunnen het plaatsen van alle processen in een werkend set paging veroorzaken als de driver een geheugenallocatiefunctie verkeerd aanroept.
  • Problemen met het besturingssysteem

Hieronder vindt u informatie over elk van deze categorieën

  • Application-Related problemen: Applicaties samen kunnen al het RAM op het systeem verbruiken. Als er nieuwe geheugenverzoeken worden gedaan, probeert het besturingssysteem deze te bevredigen en als er geen vrij geheugen is, zal het de werkende set draaiende applicaties inkorten om aan de geheugenverzoeken te voldoen. In zulke gevallen kun je merken dat de werkset voor de meeste, zo niet alle, applicaties aanzienlijk afneemt. Om dit te observeren, verzamel je de volgende Performance Monitor-teller voor alle toepassingen op het systeem:

    • Prestatieobject: Proces
    • Tegenstander: Werkset

    Houd ook de volgende teller in de gaten om te correliteren hoeveel fysiek geheugen er op het systeem beschikbaar is.

    • Prestatieobject: Geheugen
    • Teller: Beschikbaar geheugen (MB)

    Het typische gedrag dat je kunt waarnemen is een vermindering van het beschikbare geheugen tot bijna 0 MB, terwijl tegelijkertijd een plotselinge daling van de Working Set tellers voor de meeste (alle) processen op het systeem plaatsvindt. Als je dergelijk gedrag waarneemt, moet je mogelijk stappen ondernemen om het geheugengebruik op het systeem te verminderen, wat bijvoorbeeld het verminderen van het maximale servergeheugen voor SQL Server inhoudt.

    Applicaties kunnen ook te veel gebruik maken van de systeemcache, wat een grote groei van de systeemcache kan veroorzaken. Om te reageren op de groei van de systeemcache, bladert het systeem uit de werkset van het SQL Server-proces of van andere applicaties. Als je dit probleem ervaart, kun je enkele geheugenbeheerfuncties in de applicatie gebruiken. Deze functies beheren de systeemcacheruimte die bestanden I/O-operaties in de applicatie kunnen gebruiken. Je kunt bijvoorbeeld de functie SetSystemFileCacheSize en de functie GetSystemFileCacheSize gebruiken om de systeemcacheruimte te beheren die bestanden I/O-operaties kunnen gebruiken.

    Je kunt het Memory performance object gebruiken om de waarden van verschillende tellers in dit object te bekijken om te bepalen of de systeemcache-werkset te veel geheugen gebruikt. Je kunt bijvoorbeeld de Cache Bytes- en System Cache Resident Bytes-tellers bekijken. Voor meer informatie over dit onderwerp, zie:

    Je kunt de "Microsoft Windows Dynamic Cache Service" downloaden en uitrollen om het geheugen te beheren dat door de systeemcache wordt verbruikt.

  • Problemen met apparaatstuurprogramma's: Als een apparaatstuurprogramma de MmAllocateContiguousMemory functie gebruikt en de waarde van de HighestAcceptableAddress-parameter op minder dan 4 gigabyte (GB) zet, kan het Windows-besturingssysteem de werkset van de processen op het systeem, inclusief het SQL Server-proces, uitpagesen. Om dit probleem op te lossen, neem contact op met de leverancier van het apparaatstuurprogramma voor stuurprogramma's.

    Wanneer een apparaatstuurprogramma probeert geheugen toe te wijzen, kan het Windows-besturingssysteem de werkset van andere applicaties uitschakelen. Deze Windows-hotfix laat je eventtracing gebruiken om de apparaatdriver te vinden die het probleem veroorzaakt. Voor meer informatie over de specifieke driver die het werkset-trimminggedrag veroorzaakt, zie Identifying Drivers That Allocate Memory.

  • Problemen met het besturingssysteem: Om de bekende problemen op te lossen die ervoor zorgen dat het Windows-besturingssysteem de werkset van het SQL Server-proces uitpaget, past u de hotfixes toe die in de volgende artikelen van de Microsoft Knowledge Base worden beschreven.

    Note

    Hotfixes zijn cumulatief. Een latere versie van een hotfix bevat de eerdere versies van die hotfix.

Belangrijke overwegingen voordat je het gebruikersrecht "Pagina's in het geheugen vergrendelen" toewijst

Je moet extra overwegingen maken voordat je het gebruikersrecht van de Lock-pagina's in het geheugen toewijst. Als je deze gebruiker direct toewijst aan systemen die verkeerd zijn geconfigureerd, kan het systeem instabiel worden of een prestatieverlies van het hele systeem ervaren. Daarnaast kan event ID 333 in het evenementenlogboek worden geregistreerd.

Als je voor deze problemen contact opneemt met Microsoft Customer Support Service (CSS), kunnen CSS-ingenieurs je vragen dit gebruikersrecht voor het gebruikersaccount dat als opstartaccount van de SQL Server-dienst wordt gebruikt, in te trekken. Deze stap kan nodig zijn om belangrijke prestatiegegevens te verzamelen die CSS-ingenieurs kunnen gebruiken voor de noodzakelijke configuratie van de verschillende opties voor SQL Server en voor andere applicaties die op het systeem draaien. Nadat CSS-ingenieurs de prestatiegegevens hebben verzameld, kun je de Lock Pages in Memory-gebruiker direct toewijzen aan het opstartaccount van de SQL Server-service.

Voordat je de Lock Pages in het geheugen toewijst, zorg ervoor dat je een Performance Monitor-log bijhoudt om de geheugenvereisten van verschillende applicaties en diensten die op het systeem zijn geïnstalleerd te bepalen. Deze toepassingen omvatten ook SQL Server. Om de geheugenvereisten te bepalen, verzamel je de volgende basisinformatie:

  • Zorg ervoor dat je de optie voor maximaal servergeheugen en de optie voor minimaal servergeheugen correct instelt. Deze opties weerspiegelen alleen de geheugenbehoefte van de bufferpool van het SQL Server-proces. Deze opties omvatten niet het geheugen dat is toegewezen aan andere componenten binnen het SQL Server-proces. Deze componenten omvatten de volgende:

    • De SQL Server worker-threads
    • Verschillende DLL's en componenten die de SQL Server verwerkt laden binnen de adresruimte van het SQL Server-proces
    • De back-up- en hersteloperaties
  • De DLL's en componenten omvatten diverse OLE DB-providers, uitgebreide opgeslagen procedures Microsoft COM-objecten die worden gebruikt voor de sp_OACreate stored procedure, gekoppelde servers en SQL Server CLR. Het geheugen dat voor deze componenten is toegewezen valt onder het niet-bufferpoolgebied van de adresruimte van het SQL Server-proces. Om idealiter de maximale hoeveelheid geheugen te bepalen die het hele SQL Server-proces kan gebruiken, moet je het geheugen dat is toegewezen aan componenten die de bufferpool niet gebruiken aftrekken van het totale geheugen dat je wilt dat het SQL Server-proces gebruikt. Vervolgens kun je de restwaarde gebruiken om de optie voor maximaal servergeheugen in te stellen. Voordat je de optie voor maximaal servergeheugen en de optie voor minimaal servergeheugen instelt, moet je zorgvuldig het onderwerp "Handmatig de geheugenopties instellen" in SQL Server Books Online doornemen.

  • Bepaal de geheugenbehoefte van andere applicaties en van de componenten van het Windows-besturingssysteem. Toepassingen kunnen andere SQL Server-componenten omvatten, bijvoorbeeld SQL Server Agent, SQL Server Replication Agents, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services en SQL Server Full Text Search. Applicaties die back-up- en bestandskopieeroperaties uitvoeren, kunnen veel geheugens gebruiken. Overweeg operaties zoals bulk copy en de Snapshot Agent die bestands-IO genereren. Je moet rekening houden met de geheugenbehoefte van al deze applicaties wanneer je de waarde bepaalt van de maximale servergeheugenoptie en de minimale servergeheugenoptie. Je kunt de Private Bytes-teller en de Working Set-teller onder het Proces-object voor elk proces gebruiken om de geheugenbehoefte voor een specifiek proces te bepalen.

  • Standaard zijn de Lock-pagina's in het geheugen al toegewezen aan het ingebouwde Local System-account. Voor meer informatie, bezoek de volgende Microsoft-website: Moet ik het Lock-pagina's in Memory-privilege toewijzen voor het lokale systeem?

  • Als je wereldwijd een Windows-gebruikersaccount gebruikt voor alle SQL Server-processen in een domein, bepaal dan de toegewezen gebruikersrechten door gebruik te maken van een groepsbeleidconfiguratie. Een 32-bits SQL Server-proces kan dit account als opstartaccount gebruiken. Dit account vereist echter dat de gebruikersrechten Lock pages in memory de (AWE)-functie inschakelen Address Windowing Extensions . Voor meer informatie, zie het onderwerp "Providing the most amount of memory to SQL Server" in SQL Server Books Online.

  • Voordat je de optie max servergeheugen en de minimale servergeheugenoptie voor meerdere SQL Server-instanties configureert, overweeg dan de geheugenvereisten van de nonbufferpool voor elke instantie van SQL Server. Configureer deze opties vervolgens voor elke instantie van SQL Server.

Idealiter verzamel je deze basisinformatie tijdens piekbelastingen. Daarom kun je de geheugenvereisten bepalen voor verschillende applicaties en componenten om de piekbelasting te ondersteunen. De geheugenvereisten verschillen van het ene systeem tot het andere, afhankelijk van de activiteiten en applicaties die op het systeem draaien. Je kunt de informatie die in de dynamische beheerweergave wordt geleverd sys.dm_os_process_memory opvragen om te begrijpen of het systeem te maken heeft met een laag geheugen. Voor meer informatie, zie sys.dm_os_process_memory (Transact-SQL).

Verbeteringen toegevoegd in de Windows Server 2008- en R2-versies

Windows Server 2008 en Windows Server 2008 R2 verbeteren het aaneengesloten geheugentoewijzingsmechanisme. Deze verbetering stelt Windows Server 2008 en Windows Server 2008 R2 in staat om tot op zekere hoogte de effecten van het uitschakelen van de werkende applicaties wanneer nieuwe geheugenverzoeken binnenkomen, tot op zekere hoogte te verminderen.

Hieronder volgt een uitleg van de verbeteringen uit het Microsoft-whitepaper "Advances in Memory Management in Windows":

In Windows Server 2008 is de toewijzing van fysiek aaneengesloten geheugen sterk verbeterd. Verzoeken om aaneengesloten geheugen toe te wijzen slagen veel vaker omdat de geheugenbeheerder nu pagina's dynamisch vervangt, meestal zonder de werkset te trimmen of I/O-operaties uit te voeren. Daarnaast zijn veel meer soorten pagina's—zoals kernelstacks en bestandssysteemmetadatapagina's, onder andere—nu kandidaten voor vervanging. Daardoor is er over het algemeen meer aaneengesloten geheugen beschikbaar op elk moment. Daarnaast zijn de kosten om dergelijke toewijzingen te verkrijgen sterk verminderd.

Voor meer informatie, bekijk SQL Server Working Set Trim Problems.

De producten van derden die in dit artikel worden besproken, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft geeft geen enkele garantie, expliciet of impliciet, met betrekking tot de prestaties of betrouwbaarheid van deze producten.