Dimensioni appropriate del file di paging del sistema operativo Windows per SQL Server

StackOverflow https://stackoverflow.com/questions/2588

  •  08-06-2019
  •  | 
  •  

Domanda

Qualcuno conosce una buona regola pratica per la dimensione appropriata del file di paging per un server Windows 2003 che esegue SQL Server?

È stato utile?

Soluzione

Indipendentemente dalla dimensione della RAM, è comunque necessario un file di paging almeno 1,5 volte la quantità di RAM fisica.Questo è vero anche se hai una macchina da 1 TB di RAM, avrai bisogno di un file di paging da 1,5 TB su disco (sembra pazzesco, ma è vero).

Quando un processo richiede memoria MEM_COMMIT tramite VirtualAlloc/VirtualAllocEx, la dimensione richiesta deve essere riservata nel file di paging.Questo era vero nel primo sistema Win NT, ed è vero ancora oggi Gestione della memoria virtuale in Win32:

Quando viene impegnata la memoria, vengono assegnate pagine fisiche di memoria e lo spazio è riservato in un file di pagina.

In alcuni casi estremi e strani, SQL Server richiederà sempre pagine MEM_COMMIT.E dato il fatto che SQL utilizza un file Gestione dinamica della memoria politica che riserva in anticipo quanto più buffer pool possibile (riserve e commette in termini di VAS), SQL Server richiederà all'avvio un'enorme prenotazione di spazio nel pagefile.Se il file di paging non ha le dimensioni corrette, gli errori 801/802 inizieranno a essere visualizzati nel file e nelle operazioni ERRORLOG di SQL.

Ciò causa sempre una certa confusione, poiché gli amministratori presumono erroneamente che una RAM di grandi dimensioni elimini la necessità di un file di paging.In realtà accade il contrario, una RAM grande aumenta la necessità di file di paging, proprio a causa del funzionamento interno del gestore della memoria di Windows NT.Si spera che il file di paging riservato non venga mai utilizzato.

Altri suggerimenti

Con tutto il rispetto per Remus (che rispetto moltissimo), sono assolutamente in disaccordo.Se il file di paging è abbastanza grande da supportare un dump completo, eseguirà ogni volta un dump completo.Se disponi di una quantità molto grande di RAM, ciò può causare un piccolo segnale acustico che può trasformarsi in un'interruzione grave.

NON vuoi che il tuo server debba scrivere 1 TB di RAM su disco se si verifica un problema temporaneo una tantum.Se si verifica un problema ricorrente, puoi aumentare il file di paging per acquisire un dump completo.Aspetterei di farlo finché non sarai stato incaricato da PSS (o qualcun altro qualificato per analizzare un dump completo) di richiederti di acquisire un dump completo.Una percentuale estremamente ridotta di DBA sa come analizzare un dump completo.Un mini-dump è sufficiente per risolvere la maggior parte dei problemi che si presentano comunque.

Inoltre, se il tuo server è configurato per consentire un dump completo da 1 TB e si verifica un problema ricorrente, quanto spazio libero su disco consiglieresti di avere a disposizione?Potresti riempire un'intera SAN in un solo fine settimana.

Un file di paging da 1,5*RAM era la norma ai tempi in cui eri fortunato ad avere un SQL Server con 3 o 4 GB di RAM.Non è più così.Lascio il file di paging con le dimensioni e le impostazioni predefinite di Windows su tutti i server di produzione (ad eccezione di un server SSAS che sta riscontrando un sovraccarico di memoria).

E solo per chiarimenti, ho lavorato con server che vanno da 2 GB di RAM a 2 TB di RAM.Dopo più di 11 anni, ho dovuto aumentare il file di paging solo una volta per acquisire un dump completo.

Secondo Microsoft, "All'aumentare della quantità di RAM in un computer, la necessità di un file di pagina diminuisce." L'articolo continua a descrivere come utilizzare i registri delle prestazioni per determinare quanto del file di pagina In realtà in uso.Per cominciare, prova a impostare il file di paging sulla memoria di sistema 1.5X, quindi esegui il monitoraggio consigliato e apporta le modifiche da lì.

Come determinare la dimensione appropriata del file di paging per le versioni a 64 bit di Windows

Più grande è, meglio è fino alla dimensione del set di lavoro dell'applicazione in cui inizierai a ottenere rendimenti decrescenti.Puoi provare a trovarlo aumentando o diminuendo lentamente le dimensioni finché non vedi un cambiamento significativo nella percentuale di riscontri della cache.Tuttavia, se la percentuale di riscontri nella cache è superiore al 90% circa, probabilmente stai bene.Generalmente dovresti tenerlo d'occhio su un sistema di produzione per assicurarti che non abbia superato la sua allocazione di RAM.

Recentemente abbiamo riscontrato alcuni problemi di prestazioni con uno dei nostri SQL Server che non siamo riusciti a restringere completamente il campo e in realtà abbiamo utilizzato uno dei nostri ticket di supporto Microsoft per aiutarli a risolvere i problemi.È stata individuata la dimensione ottimale del file di paging da utilizzare con SQL Server e la raccomandazione di Microsoft è che lo sia 1 1/2 volte la quantità di RAM.

Se stai cercando prestazioni elevate, vorrai evitare completamente il paging, quindi la dimensione del file di paging diventa meno significativa.Investi nella massima quantità di RAM possibile per il server DB.

Dopo molte ricerche, i nostri server SQL dedicati che eseguono Enterprise x64 su Windows 2003 Enterprise x64 non dispongono di file di paging.

Semplicemente, il file di paging è una cache per i file che viene gestita dal sistema operativo e SQL ha il proprio sistema di gestione della memoria interna.

L'articolo di MS a cui si fa riferimento non qualifica il fatto che il consiglio sia rivolto al sistema operativo che esegue servizi pronti all'uso come la condivisione di file.

Avere un file di paging appesantisce semplicemente l'I/O del disco perché Windows sta cercando di aiutare, quando solo il sistema operativo SQL può svolgere il lavoro.

In questo caso, la normale raccomandazione di 1,5 volte la RAM fisica totale non è la migliore.Questa raccomandazione molto generale viene fornita presupponendo che tutta la memoria venga utilizzata da processi "normali", che generalmente possono spostare le pagine meno utilizzate su disco senza generare enormi problemi di prestazioni per il processo applicativo a cui appartiene la memoria.

Per i server che eseguono SQL Server (generalmente con quantità molto grandi di RAM), la maggior parte della RAM fisica è impegnata nel processo SQL Server e dovrebbe essere (se configurata correttamente) bloccata nella memoria fisica, impedendone il paging nel file di paging .SQL Server gestisce la propria memoria con molta attenzione tenendo presente le prestazioni, utilizzando gran parte della RAM allocata al processo come cache di dati per ridurre l'I/O del disco.Non ha senso eseguire il paging delle pagine della cache di dati nel file di paging, poiché l'unico scopo di avere tali dati nella RAM è in primo luogo quello di ridurre l'I/O del disco.(Si noti che il sistema operativo Windows utilizza anche la RAM disponibile in modo simile alla cache del disco per accelerare il funzionamento del sistema.) Poiché SQL Server gestisce già il proprio spazio di memoria, questo spazio di memoria non deve essere considerato "paginabile" e non incluso in un calcolo per il file di paging misurare.

Per quanto riguarda MEM_COMMIT menzionato da Remus, la terminologia crea confusione perché nel gergo della memoria virtuale, "riservato" non si riferisce mai all'allocazione effettiva, ma a impedire l'uso di uno spazio di indirizzi (non di spazio fisico) da parte di un altro processo.La memoria disponibile per essere "impegnata" è sostanzialmente uguale alla somma della RAM fisica e della dimensione del file di paging e l'esecuzione di un MEM_COMMIT diminuisce semplicemente la quantità disponibile nel pool impegnato.Lo fa non allocare una pagina corrispondente nel file di paging in quel momento.Quando viene effettivamente scritta una pagina di memoria impegnata, ovvero quando il sistema di memoria virtuale allocherà una pagina di memoria fisica ed eventualmente trasferirà un'altra pagina di memoria dalla RAM fisica al file di paging.Vedi MSDN Funzione VirtualAlloc riferimento.

Il sistema operativo Windows tiene traccia delle pressioni di memoria tra i processi applicativi e il proprio meccanismo di cache del disco e decide quando trasferire le pagine di memoria non bloccate dal fisico al file di paging.Da quanto ho capito, avere un file di paging troppo grande rispetto allo spazio di memoria non bloccato effettivo può comportare che Windows effettui un paging eccessivo della memoria dell'applicazione nel file di paging, con il risultato che le applicazioni subiscono le conseguenze di mancate pagine (prestazioni lente).

Finché il server non esegue altri processi che richiedono molta memoria, una dimensione del file di paging di 4 GB dovrebbe essere sufficiente.Se hai impostato SQL Server per consentire il blocco delle pagine in memoria, dovresti anche considerare di impostare l'impostazione della memoria massima di SQL Server in modo che lasci una parte di RAM fisica disponibile per il sistema operativo per se stesso e altri processi.

Gli errori 802 in SQL Server indicano che il sistema non può eseguire il commit di altre pagine per la cache dei dati.L'aumento delle dimensioni del file di paging sarà utile in questa situazione solo nella misura in cui Windows è in grado di paginare la memoria dai processi non SQL Server.Consentire alla memoria di SQL Server di crescere nel file di paging in questa situazione potrebbe eliminare i messaggi di errore, ma è controproducente, in primo luogo a causa del punto precedente sul motivo della cache dei dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top