Hur du minskar växlingsfilens buffertpoolminne i SQL Server

Sammanfattning

Microsoft SQL Server utför dynamisk minneshantering baserat på minneskraven för aktuell belastning och aktiviteter i systemet. I Windows kan SQL Server använda minnet anmälan mekanismer som tillhandahålls av QueryMemoryResourceNotification Windows API. Baserat på den här informationen från QueryMemoryResourceNotification Windows API eller från minnes beräkningen, svarar SQL Server på den aktuella minnes situationen på ett visst system. Detta ger följande fördelar:

  • Systemet sidan inte ut arbetsmängden för SQL Server-processen.

  • De nödvändiga databas sidorna finns tillgängliga i minnet för att minska de fysiska I/O-behoven.

Mer information finns i avsnittet "dynamisk minneshantering" och "alternativ för server minne" i SQL Server Books Online.

Symptom

Överväg följande problem som kan uppstå i SQL Server:

  • Prestanda för SQL Server minskar plötsligt.

  • En dator som kör SQL Server slutar svara under en kort tid.

  • En timeout inträffar för program som ansluter till SQL Server.

  • Problem uppstår när du kör även enkla kommandon eller använda program på systemet.

Ett av följande felmeddelanden kan loggas i felloggen för SQL Server när dessa problem uppstår:

Felmeddelande 1

Datetime spid1s en betydande del av SQL Server-processminne har växats ut. Detta kan resultera i en prestandaförsämring. Varaktighet: 0 sekunder. Arbetsminne (KB): 1086400, bekräftad (KB): 2160928, minnesanvändning: 50%.

Felmeddelande 2

Datetime spid1s en betydande del av SQL Server-processminne har växats ut. Detta kan resultera i en prestandaförsämring. Varaktighet: 315 sekunder. Arbetsminne (KB): 410156, bekräftad (KB): 2201296, minnesanvändning: 18%.

Felmeddelande 3

Datetime spid1s en betydande del av SQL Server-processminne har växats ut. Detta kan resultera i en prestandaförsämring. Varaktighet: 646 sekunder. Arbetsminne (KB): 901904, bekräftad (KB): 2215752, minnesanvändning: 40%.

Supportteamet för Microsoft SQL Server har också observerat ytterligare felmeddelanden eller varningar som registreras i felloggen för SQL Server eller i händelseloggarna i Windows. Dessa meddelanden likna följande:

            DateTime Server      Resource Monitor (0x13c43) Worker 0x0412C1E8 appears to be non-yielding on Node 0. Memory freed: 34152 KB. Approx CPU Used: kernel 171 ms, user 140 ms, Interval: 125093.

DateTime Server      * *******************************************************************************
DateTime Server      * BEGIN STACK DUMP:
DateTime Server      *   DateTime spid 0
DateTime Server      * Non-yielding Resource Monitor
DateTime Server      * *******************************************************************************

DateTime Server      * *******************************************************************************
DateTime Server      * BEGIN STACK DUMP:
DateTime Server      *   DateTime spid 0
DateTime Server      * Non-yielding IOCP Listener
DateTime Server      * *******************************************************************************

DateTime spid2s      LazyWriter: warning, no free buffers found.

DateTime spid4s      AppDomain xx (SQLCLR.dbo[runtime].xx) is marked for unload due to memory pressure.
DateTime spid4s      AppDomain xx (SQLCLR.dbo[runtime].xx) unloaded.

DateTime Logon       Error: 17189, Severity: 16, State: 1.
DateTime Logon       SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems. [CLIENT: xx.xxx.xx.xx]

Event Type:Error
Event Source:SQLBrowser
Event ID:8
Description: The SQLBrowser service was unable to process a client request. 
 

Dessa ytterligare felmeddelanden eller varningar kan visas tillsammans med "en betydande del av SQL Server processminne har växats ut" felmeddelande. I flera fall visades inte dessa ytterligare felmeddelanden eller varningar tillsammans med felmeddelandet. Om du märker något av dessa felmeddelanden eller varningar, Överväg att SQL Server arbetar ange växlingsfilen som beskrivs i den här artikeln som en möjlig orsak men inte som enda orsak. Dessa ytterligare felmeddelanden eller varningar kan loggas på grund av olika andra villkor eller orsaker.

Lösning

Innan du försöker lösa problemet genom att utföra stegen i avsnittet "så här felsöker du problemet" för att åtgärda problemet. Om problemet kvarstår kan du förhindra att Windows-operativsystemet från att söka ut buffertpoolminnet i SQL Server-processen genom att låsa det minne som allokeras för buffertpool i fysiskt minne. Du låser minnet genom att tilldela användarrättigheten låsa sidor i minnet till det användarkonto som används som start konto för SQL Server-tjänsten.

Notera Med hjälp av lås sidor i minnet Kontrollera att minnet som hanteras av SQL Server inte har växats ut. Men tråd stackar, EXE och alla DLL-bilder, heap minne, CLR minne kan fortfarande vara växlingsbart ut av OS. Notera Eftersom SQL Server 2008 SP1 kumulativ uppdatering 2 både SQL Server standard och Enterprise Edition kan använda användarrättigheten låsa sidor i minnet . Om du vill veta mer om stöd för låsta sidor klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

970070 stöd för låsta sidor på sql Server 2005 Standard Edition och sql Server 2008 Standard EditionSå här tilldelar du användarrättigheten Lås sidor i minnet :

  1. Klicka på Start, klicka på Kör, Skriv gpedit. mscoch klicka sedan på OK. Notera Den Dialogrutan Grupprincip visas.

  2. Expandera Datorkonfigurationoch expandera sedan Windows-inställningar.

  3. Expandera säkerhetsinställningaroch expandera sedan Lokala principer.

  4. Klicka på tilldelning av användarrättigheteroch dubbelklicka sedan på Lås sidor i minnet.

  5. Klicka på Lägg till användare eller gruppi dialogrutan lokal Säkerhetsprincipinställning.

  6. I dialogrutan Välj användare eller grupper lägger du till det konto som har behörighet att köra filen Sqlservr. exe och klickar sedan på OK.

  7. Stäng dialogrutan Grupprincip .

  8. Starta om SQL Server-tjänsten.

När du tilldelar användarrättigheten låsa sidor i minnet och du startar om tjänsten SQL Server, Windows operativsystem inte längre sidor ut buffertpoolminnet i SQL Server-processen. Windows-operativsystemet kan dock fortfarande sida ut minnet poolminne pool i SQL Server-processen. Du kan verifiera att användarrättigheten används av instansen av SQL Server genom att se till att följande meddelande skrivs i felloggen för SQL Server vid start:

"Använda låsta sidor för buffertpool"Det här meddelandet gäller bara för SQL Server. Mer information om det här meddelandet i ERRORLOG finns på följande:

Måste jag tilldela privilegiet lås sidor för minne i lokalt systemNär Windows operativsystem sidor ut poolminne pool minne, kan du fortfarande stöta på prestandaproblem. Felmeddelanden som nämns i avsnittet "Symptom" loggas dock inte i felloggen för SQL Server.

Mer information

Hur du felsöker det här problemet

Det finns tre stora kategorier av problem som kan orsaka problemet:

  1. Programrelaterade problem: alla program tillsammans har förbrukat det tillgängliga fysiska minnet och operativsystemet måste frigöra minne för nya programbegäranden för resurser. Typiskt, tillvägagångssättet här är att hitta vilka program är utmattande minnet och vidta nödvändiga åtgärder för att balansera minnet bland dem utan att leda till RAM utmattning.

  2. Problem med drivrutinen: drivrutiner kan orsaka arbetsminnet sidväxling av alla processer om drivrutinen anropar en minnesallokering funktion felaktigt.

  3. Problem med operativsystemet

Gör så här om du vill felsöka problemet:

  1. Programrelaterade problem:

    Program tillsammans kan förbruka allt RAM-minne på systemet. Om nya begäranden om minne görs, operativsystemet måste tillfredsställa dem och om det inte finns något ledigt minne, det kommer att trimma arbetsminnet för att köra program för att tillfredsställa minnes förfrågningar. I sådana fall kan du observera att arbetsgruppen för de flesta om inte alla program sjunker avsevärt. För att observera detta samla följande räknare för Prestandaövervakaren för alla program på systemet:

    Prestandaobjekt: process Räknare: arbets uppsättning

    Övervaka också följande räknare för att korrelera hur mycket fysiskt minne som är tillgängligt på systemet.

    Prestandaobjekt: minne Räknare: tillgängligt minne (MB)

    Det typiska beteendet som du kan observera är minskning av tillgängligt minne nära 0 MB, samtidigt som en plötslig nedgång av arbetsminnet räknare för de flesta (alla) processer på systemet. Om du observerar sådant beteende, kan du behöva vidta åtgärder för att minska minnesanvändningen på systemet, vilket inkluderar till exempel minska Max serverminne för SQL Server.

    Program kan också använda systemets cacheminne för mycket och kan orsaka en stor ökning av systemets cacheminne. För att svara på tillväxten av systemets cacheminne, systemet sidor ut arbetsminnet för SQL Server-processen eller andra program. Om det här problemet uppstår kan du använda vissa funktioner för minneshantering i programmet. Dessa funktioner styrsystemets cache-utrymme som fil I/O-åtgärder kan använda i programmet. Du kan till exempel använda funktionen SetSystemFileCacheSize och funktionen GetSystemFileCacheSize för att styra systemets cache-utrymme som fil-I/O-åtgärder kan använda. Du kan använda prestandaobjektet minne för att visa värdena för olika räknare i det här objektet för att avgöra om systemcachen arbetsminnet använder för mycket minne. Du kan till exempel Visa räknare för cache-byte och Resident byte för system-cache. Mer information om det här avsnittet finns på följande Microsoft-webbplatser:

    För mycket cache Microsoft Windows Dynamic cache service 976618   Prestandaproblem i program och tjänster när systemfilcachen förbrukar det mesta av det fysiska RAM-minnet

    Du kan hämta och distribuera "Microsoft Windows Dynamic cache service" för att styra det minne som förbrukas av systemets cacheminne.

  2. Problem med drivrutiner:

    Om en drivrutin använder funktionen Mmallocatecontiguousmemory , och om den anger värdet för parametern Highestacceptableaddress till mindre än 4 gigabyte (GB), kan operativsystemet Windows sida ut arbetsmängden för processerna på systemet, inklusive SQL Server-processen. Lös problemet genom att kontakta leverantören av enhetsdrivrutinen för drivrutinsuppdateringar.

    När en drivrutin försöker allokera minne, kan Windows operativsystem sida ut arbetsminnet för andra program. Med den här snabbkorrigeringen för Windows kan du använda Händelsespårning för att hitta drivrutinen som orsakar problemet. Om du vill ha mer information om den specifika drivrutinen som orsakar arbetsminnet putsning, finns i MSDN-artikeln "identifiera drivrutiner som allokerar sammanhängande minne".

  3. Problem med operativsystemet: Installera snabbkorrigeringarna som beskrivs i följande artiklar i Microsoft Knowledge Base för att lösa kända problem som gör att Windows operativsystem att sidan ut arbetsmängden för SQL Server-processen.

    Notera Snabbkorrigeringar är kumulativa. En senare version av en snabbkorrigering innehåller tidigare versioner av snabbkorrigeringen.

  • SQL Server-uppsättningen kan beskäras när systemet använder vissa avancerade TCP-funktioner. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

942861felmeddelande när ett program ansluter till SQL Server på en server som kör Windows Server: "allmänt nätverksfel", "kommunikationslänk fel" eller "ett fel på transportnivå"

  • På en dator med flera processorer som kör Windows Server 2003 kan systemprocessen förbruka det mesta av det tillgängliga systemminnet. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

942486systemprocessen kan förbruka det mesta av det tillgängliga system minnet på en dator med flera processorer som kör Windows Server 2003

  • Om SQL Server körs tillsammans med SAP R/3 kan det uppstå ett växlings problem. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

931308 du kan uppleva ökad växling till hårddisken när du kör ett program för SAP R/3 på en dator med Windows Server 2003

  • Om du kör SQL Server på Windows Server 2008, måste du installera korrigeringar för kända problem som kan leda till att arbeta som putsning eller onödigt överdriven minnesanvändning av andra komponenter i operativsystemet. Om du vill veta mer klickar du på följande artikelnummer och visar artiklarna i Microsoft Knowledge Base:

971714 rapportgenereringsprocessen slutar svara när du kör perfmon. exe med mallen för Active Directory-diagnostik för att generera en rapport på en Windows Server 2008-baserad domänkontrollant

  • Om du kör SQL Server på Windows serve 2008 R2 måste du installera korrigeringar för kända problem som kan leda till att arbeta set putsning. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

979149 en dator som kör Windows 7 eller windows Server 2008 R2 slutar svara när du kör ett stort program

2155311 dåliga prestanda uppstår på en dator som har NUMA-baserade processorer och som kör windows Server 2008 R2 eller Windows 7 om en tråd begär mycket minne som är inom de första 4 GB minne 2468345 datorn fungerar ibland dåligt eller slutar svara när Storport-drivrutinen används i Windows Server 2008 R2

Ta reda på det minne som används av SQL Server

Du kan använda Prestandaövervakaren för att visa det minne som används av SQL Server när låsta sidor i minnet inte är aktiverat.

SQL Server använder också följande prestandaräknare för att exponera minne som buffertpool allokerar:

Prestandaobjekt: SQL Server: minneshanterare Räknare: totalt server minne (KB)

Notera Om instansen av SQL Server är en namngiven instans, är namnet på prestandaobjektet följande:

MSSQL $instancename: minne direktör

Dessutom kan du mäta effekten av växling på SQL Server genom att övervaka följande prestandaräknare:

Prestandaobjekt: process Räknare: privata byte Exempel: Sqlservr Prestandaobjekt: process Räknare: arbets uppsättning Exempel: Sqlservr

Den privata byte-räknaren mäter det virtuella minne som för närvarande är allokat. Räknaren för arbetsminnet mäter hur mycket av det för närvarande allokera virtuella minnet upptar fysiskt minne (RAM).

Om värdet för räknaren arbetsminnet är mindre än värdet för den totala server minne (KB) räknare (eller som för privata byte), åtminstone vissa minne som är en del av buffertpool har trimmats från SQL Server-arbetsgruppen.

Du kan också observera övergripande växling (arbets uppsättning putsning) på systemet genom att övervaka följande prestandaräknare som visar sidorna läses från och skrivs till disk:

Prestandaobjekt: minne Räknare: sid ingångar/s och sid utgångar per sekund

Om du vill veta mer om hur du använder de här räknarna för att bestämma minnessidan klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

889654 hur du tar reda på lämplig sida filstorlek för 64-bitars versioner av windows Server 2003 eller Windows XPNär du tilldelar användarrättigheten låsa sidor i minnet och du startar om SQL Server-tjänsten, svarar BUFFERTPOOL i SQL Server-processen fortfarande till minne resurs anmälan händelser och den dynamiskt ökar eller minskar som svar på dessa händelser. Du kan dock inte se minnesallokeringar för buffertpool som är låsta i minnet i följande prestandaräknare:

  • Räknaren privata byte och räknaren arbets uppsättning i Prestandaövervakaren

  • Kolumnen MEM användning på fliken processer i Aktivitetshanteraren

Anledningen är att när du aktiverar låsta sidor i minnet, SQL Server börjar använda AWE API och allokera inte minne via OS virtuellt minne Manager. När dessa sidor är låsta representerar dessa prestandaräknare minnesallokeringarna i SQL Server-processen för allokeringar som inte använder buffertpool. Den totala server minne (KB) räknare av SQL Server: Memory Manager prestandaobjekt fortfarande korrekt representerar det minne som allokeras för buffertpool.

Viktigt att tänka på innan du tilldelar användarrättigheten "låsa sidor i minnet" för en instans av SQL Server

Du bör göra ytterligare överväganden innan du tilldelar användarrättigheten Lås sidor i minnet . Om du tilldelar den här användarrättigheten på system som är felaktigt konfigurerade kan systemet bli instabilt eller drabbas av en prestanda minskning av hela systemet. Dessutom kan händelse-ID 333 loggas i händelseloggen. Om du kontaktar Microsoft Customer Support Service (CSS) för dessa problem kan CSS-tekniker be dig att återkalla den här användarrättigheten för det användarkonto som används som start konto för SQL Server-tjänsten. Det här steget kan vara nödvändigt att samla in viktiga prestandadata som CSS-tekniker kan använda för nödvändig konfiguration av de olika alternativen för SQL Server och för andra program som körs på systemet. När CSS-tekniker samlar in prestandadata kan du tilldela användarrättigheten låsa sidor i minnet till startkontot för SQL Server-tjänsten. Innan du tilldelar användarrättigheten låsa sidor i minnet , se till att du fångar en logg för Prestandaövervakaren för att fastställa minneskraven för olika program och tjänster som är installerade på systemet. Dessa program innehåller också SQL Server. Ta reda på minneskraven genom att samla in följande originalplansinformation:

  • Kontrollera att du anger alternativet Max serverminne och alternativet min serverminne på rätt sätt. Dessa alternativ återspeglar endast minneskravet för buffertpool i SQL Server-processen. Dessa alternativ inkluderar inte det minne som allokeras för andra komponenter i SQL Server-processen. Följande komponenter ingår:

    • Arbetstrådar för SQL Server

    • Olika DLL-filer och komponenter som SQL Server-processen läses in i adressutrymmet för SQL Server-processen

    • Säkerhetskopierings-och återställningsåtgärderna

  • DLL-filerna och komponenterna innehåller olika OLE DB-providers, utökade lagrade procedurer, Microsoft COM-objekt som används för sp_OACreate lagrade proceduren, länkade servrar och SQL Server CLR. Minne som allokeras för dessa komponenter faller under den poolminne pool region i adressutrymmet för SQL Server-processen. För att helst fastställa den maximala mängden minne som hela SQL Server-processen kan använda, måste du subtrahera det minne som allokeras för komponenter som inte använder buffertpool från det totala minne som du vill att SQL Server-processen ska använda. Sedan kan du använda restvärdet för att ange alternativet Max serverminne . Innan du anger alternativet Max serverminne och min serverminne , bör du noggrant granska avsnittet "ställa in minnesalternativ manuellt" i SQL Server Books Online.

  • Bestäm minneskraven för andra program och Windows-operativsystemskomponenter. Program kan innehålla andra SQL Server-komponenter, till exempel SQL Server Agent, SQL Server Replication agenter, SQL ServerReporting Services, SQL Server Analysis Services, SQL Server Integration Services och SQL Server full textsökning. Program som utför säkerhetskopieringsåtgärder och fil kopieringsåtgärder kan använda mycket minne. Överväg åtgärder som bulk Copy och Snapshot Agent som genererar fil-IO. Du måste tänka på minneskravet för alla dessa program när du bestämmer värdet för den Max serverminne alternativet och den min serverminne alternativet. Du kan använda den privata byte-räknaren och räknaren för arbetsminnet under processobjektet för varje process för att fastställa minnesbehovet för en viss process.

  • Som standard har användarrättigheten Lås sidor i minnet redan tilldelats det inbyggda lokala system kontot. Mer information finns på följande Microsoft-webbplats:

    Måste jag tilldela lås sidor i minnet privilegium för Lcal system?

  • Om du använder ett Windows-användarkonto globalt för alla SQL Server-processer i en domän ska du bestämma vilka användarrättigheter som tilldelas med hjälp av en grupprincipkonfiguration. En 32-bitars SQL Server-process kan använda det här kontot som start konto. Det här kontot kräver dock användarrättigheten låsa sidor i minnet för att aktivera funktionen adress Windowing Extensions (AWE). Mer information finns i avsnittet "ge maximal mängd minne till SQL Server" i SQL Server Books Online.

  • Innan du konfigurerar alternativet Max serverminne och alternativet min serverminne för flera SQL Server-instanser bör du överväga minneskraven för poolen poolminne för varje instans av SQL Server. Konfigurera sedan dessa alternativ för varje instans av SQL Server.

Vi rekommenderar att du samlar in den här originalplansinformationen under belastningstoppar. Därför kan du bestämma minneskraven för olika program och komponenter för att stödja toppbelastningen. Minneskraven varierar från ett system till ett annat system, beroende på vilka aktiviteter och program som körs på systemet.

Du kan fråga den information som finns i den dynamisk hantering vy sys. dm_os_process_memory för att förstå om systemet stöter på lite minnes förhållanden. Mer information finns i SQL Server Books Online referens på följande webbplats:

sys. dm_os_process_memory (Transact-SQL)

Förbättringarna adderat i Fönstren Servaren 2008 och i Fönstren Servaren 2008 R2 så pass reducera arbetande sätta trimning

Windows Server 2008 och Windows Server 2008 R2 förbättrar allokeringsmekanismen för sammanhängande minne. Den här förbättringen kan Windows Server 2008 och Windows Server 2008 R2 i viss utsträckning minska effekterna av att söka ut arbetsmängden av program när nya minnes förfrågningar anländer.  Följande är en förklaring av förbättringarna från Microsoft whitepaper "framsteg i minneshantering i Windows":

I Windows Server 2008 förbättras allokeringen av fysiskt sammanhängande minne avsevärt. Begäranden om att allokera sammanhängande minne är mycket mer sannolikt att lyckas eftersom minneshanteraren nu dynamiskt ersätter sidor, vanligtvis utan att trimma arbetsminnet eller utför I/O-åtgärder. Dessutom är många fler typer av sidor, till exempel kernel-stackar och metadatafält för filsystem, bland annat nu kandidater för ersättning. Därför är mer sammanhängande minne allmänt tillgängligt vid en given tidpunkt. Dessutom är kostnaden för att erhålla sådana tilldelningar kraftigt reducerad.Om du vill visa "förskott i minneshantering i Windows" whitepaper finns på följande Microsoft-webbplats:

[Tillgång 4009805]http://Download.Microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/MemMgt.docxMer information finns på följande Microsoft-webbplatser:

SQL Server arbets uppsättning trim problem

2001745 Trimning av arbets set kan inverka negativt på SQL-, Exchange-och operativsystemets prestanda under Windows 2003 Notera På en dator med Windows Server 2008 måste du installera SQL Server Service Pack 2 (SP2) eller en senare Service Pack-versionen för SQL Server. Produkter från tredje part som beskrivs i den här artikeln tillverkas av företag som är oberoende av Microsoft. Microsoft lämnar inga garantier, underförstådda eller på annat sätt, om prestanda eller tillförlitlighet hos dessa produkter.

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×