Condividi tramite


Opzioni per la memoria server

Le due opzioni per la memoria del server min server memory e max server memory consentono di riconfigurare la quantità di memoria in megabyte del pool di buffer utilizzata da un'istanza di Microsoft SQL Server.

Per impostazione predefinita, in SQL Server i requisiti di memoria possono variare dinamicamente in base alle risorse di sistema disponibili. L'impostazione predefinita di min server memory è 0, mentre l'impostazione predefinita di max server memory è 2147483647. La quantità minima di memoria che è possibile specificare per max server memory è 16 MB.

Nota

L'impostazione di max server memory sul valore minimo può ridurre notevolmente le prestazioni di SQL Server, fino a impedirne l'avvio. Se non è possibile avviare SQL Server dopo la modifica di questa opzione, eseguire l'avvio con l'opzione di avvio –f e reimpostare max server memory sul valore precedente. Per ulteriori informazioni, vedere Utilizzo delle opzioni di avvio del servizio SQL Server.

Quando SQL Server utilizza la memoria in modo dinamico, esegue verifiche periodiche del sistema per determinare la quantità di memoria fisica libera disponibile. SQL Server utilizza l'API di notifica relativa alla memoria QueryMemoryResourceNotification per determinare quando il pool di buffer è in grado di allocare e rilasciare memoria.

È consigliabile consentire a SQL Server di utilizzare dinamicamente la memoria. È tuttavia possibile impostare manualmente le opzioni relative alla memoria e limitare la quantità di memoria accessibile a SQL Server. Prima di impostare la quantità di memoria per SQL Server, determinare l'impostazione di memoria appropriata, sottraendo dalla memoria fisica totale la quantità necessaria per il sistema operativo e per eventuali altre istanze di SQL Server, nonché per altri utilizzi di sistema, se il computer non è dedicato esclusivamente a SQL Server. La differenza così ottenuta rappresenta la quantità di memoria massima assegnabile a SQL Server.

Impostazione manuale delle opzioni per la memoria

Impostare min server memory e max server memory per estendere l'intervallo di valori di memoria. Questa soluzione risulta utile quando gli amministratori di sistema o di database desiderano configurare un'istanza di SQL Server unitamente ai requisiti di memoria di altre applicazioni in esecuzione nello stesso computer.

Utilizzare min server memory per garantire al pool di buffer di un'istanza di SQL Server una quantità minima di memoria disponibile. SQL Server non alloca immediatamente all'avvio la quantità di memoria specificata in min server memory. Tuttavia, se l'utilizzo della memoria raggiunge tale valore a causa del carico di lavoro client, SQL Server non può liberare memoria dal pool di buffer allocato a meno che non si riduca il valore di min server memory.

Nota

SQL Server non esegue necessariamente l'allocazione della quantità di memoria specificata in min server memory. Se il carico sul server non richiede mai l'allocazione della quantità di memoria specificata in min server memory, SQL Server verrà eseguito con una quantità di memoria inferiore.

Utilizzare max server memory per evitare che il pool di buffer di SQL Server utilizzi una quantità di memoria superiore a quella specificata, in modo da lasciare la memoria rimanente disponibile per l'avvio rapido di altre applicazioni. SQL Server non alloca immediatamente all'avvio la quantità di memoria specificata in max server memory. L'utilizzo della memoria viene adeguato da SQL Server alle esigenze fino a quando non si raggiunge il valore specificato in max server memory. SQL Server non può utilizzare una quantità di memoria maggiore a meno che non si aumenti il valore di max server memory.

Prima di ridurre il valore di max server memory, utilizzare Performance Monitor per esaminare l'oggetto prestazione SQLServer:Gestione buffer sotto carico e osservare il valore corrente dei contatori Pagine prelevate e Pagine riservate. Tali contatori indicano la memoria come numero di pagine da 8 KB. Per evitare errori di memoria insufficiente, è necessario impostare max server memory su un valore superiore alla somma di questi due valori. Un valore approssimativo per l'impostazione minima ragionevole di max server memory (in MB) è ([Pagine prelevate] + [Pagine riservate])/ 100. Per ridurre il valore di max server memory potrebbe essere necessario riavviare SQL Server per rilasciare la memoria. Per informazioni sull'impostazione delle opzioni di memoria, vedere Procedura: Impostazione di una quantità di memoria fissa (SQL Server Management Studio).

Opzione Massimizza la velocità di trasmissione dati per le applicazioni di rete

Per ottimizzare l'utilizzo della memoria di sistema per SQL Server, è necessario limitare la quantità di memoria utilizzata dal sistema per la memorizzazione dei file nella cache. Per limitare la cache del file system, assicurarsi che l'opzione Massimizza la velocità di trasmissione dati per condivisione file non sia selezionata. Per specificare la quantità minima di cache del file system, è possibile selezionare Minimizza la quantità di memoria utilizzata o Bilanciamento.

Per controllare l'impostazione corrente nel sistema operativo

  1. Fare clic su Start, scegliere Pannello di controllo, fare doppio clic su Connessioni di rete, quindi su Connessione alla rete locale (LAN).

  2. Nella scheda Generale fare clic su Proprietà, selezionare l'opzione Condivisione file e stampanti per reti Microsoft e quindi scegliere Proprietà.

  3. Se l'opzione Massimizza la velocità di trasmissione dati per le applicazioni di rete è selezionata, scegliere un'altra opzione, fare clic su OK e quindi chiudere le finestre di dialogo rimanenti.

Memoria AWE in Windows Server 2003

In Windows Server 2003, SQL Server può utilizzare la memoria AWE (Address Windowing Extensions) per contribuire ulteriormente al bilanciamento del carico dei requisiti di memoria e dei requisiti del sistema operativo. Tale bilanciamento tra SQL Server e il sistema operativo deve soddisfare i vincoli posti dalle opzioni min server memory e max server memory. Se l'hardware del server supporta l'aggiunta di memoria a caldo, è possibile aggiungere ulteriore memoria fisica al server in base alla necessità, senza riavviare il sistema. Per ulteriori informazioni sull'opzione di configurazione awe enabled, vedere Opzione awe enabled. Per ulteriori informazioni, vedere Aggiunta di memoria a caldo.

Nota

La memoria AWE dinamica è supportata su server con quantità di memoria fisica inferiore rispetto al limite di memoria virtuale configurato.

La situazione ideale è quella in cui a SQL Server viene assegnata la quantità di memoria massima oltre la quale verrebbe effettuato lo swapping di pagine tra il sistema operativo e il disco rigido. La soglia varia a seconda del sistema. Ad esempio, in un sistema a 32 gigabyte (GB) dedicato esclusivamente a SQL Server una soglia massima appropriata per SQL Server potrebbe corrispondere a 30-31 GB. In un sistema a 64 GB la soglia appropriata potrebbe essere 60-62 GB.

Nota

Quando si aumenta la quantità di memoria destinata a SQL Server, verificare che lo spazio su disco disponibile sia sufficiente per contenere l'aumento di dimensioni del file di supporto della memoria virtuale del sistema operativo (Pagefile.sys) in modo che possa includere memoria aggiuntiva. Per ulteriori informazioni sul file di supporto della memoria virtuale, vedere la documentazione di Windows.

Se necessario, utilizzare le statistiche disponibili nel Monitor di sistema di Windows per modificare il valore relativo alla memoria. Modificare il valore soltanto quando si aggiunge o si rimuove memoria o quando si modifica la modalità di utilizzo del sistema.

Virtual Memory Manager

I sistemi operativi a 32 bit consentono di accedere a 4 gigabyte (GB) di spazio degli indirizzi virtuali. 2 GB di memoria virtuale sono riservati a singoli processi e disponibili per l'utilizzo da parte delle applicazioni, mentre gli altri 2 GB sono riservati all'utilizzo da parte del sistema operativo. In tutte le edizioni del sistema operativo è disponibile un'opzione che consente alle applicazioni di accedere a un massimo di 3 GB di memoria virtuale, limitando il sistema operativo a 1 GB. Per ulteriori informazioni sull'utilizzo dell'opzione di configurazione della memoria, vedere la documentazione di Windows relativa all'ottimizzazione dei 4 gigabyte di memoria (4GT). Quando la versione a 32 bit di SQL Server viene eseguita in un sistema operativo a 64 bit, lo spazio degli indirizzi virtuali disponibile per la modalità utente sarà di 4 GB.

Nota

L'opzione PAE viene abilitata automaticamente solo se il server utilizza dispositivi con aggiunta di memoria a caldo. In questo caso, non è necessario utilizzare l'opzione /PAE in un sistema configurato per l'utilizzo di dispositivi con aggiunta di memoria a caldo. In tutti gli altri casi, è necessario utilizzare l'opzione /PAE nel file Boot.ini per poter sfruttare la memoria oltre i 4 GB.

Lo spazio degli indirizzi di 4 GB è mappato alla memoria fisica disponibile tramite Windows Virtual Memory Manager (VMM). La memoria fisica alla quale AWE ha accesso dipende dal sistema operativo in uso. Per ulteriori informazioni sulla quantità di memoria fisica supportata dai diversi sistemi operativi, vedere l'argomento relativo ai limiti di memoria per le versioni di Windows nella documentazione di Windows.

I sistemi a indirizzo virtuale consentono l'allocazione in eccesso della memoria fisica, per cui il rapporto memoria virtuale/memoria fisica può essere maggiore di 1:1. Di conseguenza, i computer con varie configurazioni di memoria fisica consentono l'esecuzione di programmi di dimensioni elevate. Tuttavia l'utilizzo di una quantità di memoria virtuale di molto superiore alla combinazione dei set di lavoro medi per tutti i processi determina un peggioramento delle prestazioni.

min server memory e max server memory sono opzioni avanzate. Se si utilizza la stored procedure di sistema sp_configure per modificare queste impostazioni, è possibile modificarle solo se il valore di show advanced options è impostato su 1. Queste impostazioni diventano effettive immediatamente e non richiedono il riavvio del server.

Esecuzione di più istanze di SQL Server

Quando si eseguono più istanze di Motore di database, è possibile gestire la memoria in tre modi:

  • Controllare l'utilizzo di memoria utilizzando max server memory. Stabilire le impostazioni massime per ogni istanza, accertandosi che il totale non sia superiore alla memoria fisica disponibile sul computer. È possibile rendere la memoria di ogni istanza proporzionale al relativo carico di lavoro previsto o alle dimensioni del database. Questo approccio presenta il vantaggio di rendere la memoria libera immediatamente disponibile ad ogni nuovo processo o istanza. Lo svantaggio è che se non vengono eseguite tutte le istanze, parte della memoria resterà inutilizzata.

  • Controllare l'utilizzo di memoria utilizzando min server memory. Stabilire le impostazioni minime per ogni istanza, in modo che la somma di tali minimi sia 1-2 GB inferiore alla memoria fisica totale del computer. Anche questi minimi possono essere resi proporzionali al carico previsto dell'istanza. Con questo approccio, quando non vengono eseguite tutte le istanze contemporaneamente, quelle in esecuzione potranno utilizzare la memoria libera rimanente. Questo approccio consente inoltre di riservare a SQL Server una quantità ragionevole di memoria quando sullo stesso computer vengono eseguiti anche altri processi particolarmente onerosi. Lo svantaggio è che quando viene avviata una nuova istanza o qualsiasi altro processo, le istanze in esecuzione rilasceranno la memoria con un certo ritardo, in particolare quando a tale scopo dovranno riscrivere le pagine modificate nei rispettivi database. È inoltre possibile che si renda necessario incrementare le dimensioni del file di paging in modo significativo.

  • Non intervenire in alcun modo (non consigliato). Le prime istanze sottoposte a carico di lavoro tenderanno ad allocare tutta la memoria. Alle istanze inattive o a quelle avviate in un secondo momento verrà destinata solo una minima quantità di memoria. In SQL Server non viene ripartita in alcun modo la memoria tra le diverse istanze. Tutte le istanze risponderanno comunque ai segnali di Windows Memory Notification correggendo di conseguenza la dimensione dei rispettivi pool di buffer. In Windows non viene ripartita la memoria tra le applicazioni con l'API di Windows Memory Notification. Offre invece un semplice feedback globale sulla disponibilità di memoria nel sistema.

Poiché è possibile modificare queste impostazioni senza riavviare le istanze, si potranno sperimentare facilmente valori diversi fino a individuare quelli più adatti alle proprie esigenze.

Esempi

Nell'esempio seguente l'opzione max server memory viene impostata su 4 GB.

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO