Architettura della memoria

SQL Server acquisisce e libera la memoria in modo dinamico in base alle necessità. In genere, non è necessario che un amministratore specifichi la quantità di memoria da allocare a SQL Server. L'opzione corrispondente, tuttavia, è ancora disponibile e in alcuni ambienti deve essere impostata.

SQL Server supporta le estensioni AWE (Address Windowing Extensions) che consentono l'utilizzo di una quantità di memoria fisica superiore a 4 gigabyte (GB) nelle versioni a 32 bit dei sistemi operativi Microsoft Windows. Sono supportati fino a 64 GB di memoria fisica. Le istanze di SQL Server eseguite in Microsoft Windows 2000 utilizzano l'allocazione statica della memoria AWE, mentre le istanze eseguite in Microsoft Windows Server 2003 utilizzano l'allocazione dinamica.

Nota

Il supporto di AWE è disponibile solo in SQL Server Enterprise Edition, Standard Edition e Developer Edition e si applica unicamente ai sistemi operativi a 32 bit. In Analysis Services non è possibile utilizzare la memoria mappata AWE. Se la memoria fisica disponibile è inferiore allo spazio degli indirizzi virtuali della modalità utente, non è possibile attivare le estensioni AWE.

Uno degli obiettivi principali della progettazione di software per database consiste nel ridurre al minimo l'I/O su disco poiché le letture e le scritture su disco sono le operazioni che impegnano la maggiore quantità di risorse se confrontate con tutte le altre operazioni. Per conservare le pagine lette dal database, SQL Server crea in memoria un pool di buffer. La maggior parte del codice di SQL Server è dedicata a ridurre al minimo il numero di letture e scritture fisiche tra il disco e il pool di buffer. SQL Server cerca di raggiungere un equilibrio tra i due obiettivi seguenti:

  • Evitare che le dimensioni del pool di buffer aumentino fino a limitare la memoria dell'intero sistema.

  • Ridurre al minimo l'I/O fisico sui file di database aumentando la dimensione del pool di buffer fino a raggiungere il valore massimo possibile.

Per ulteriori informazioni, vedere Gestione del buffer.

Per impostazione predefinita, le edizioni di SQL Server 2005 gestiscono in modo dinamico la memoria per ogni istanza. SQL Server gestisce in modi diversi la memoria mappata ad AWE in Windows 2000 e nelle versioni successive dei sistemi operativi.

Nota

In un sistema con carichi notevoli, alcune query di grandi dimensioni che richiedono una notevole quantità di memoria per l'esecuzione non possono ricevere la quantità minima di memoria necessaria e ottengono un errore di timeout durante l'attesa delle risorse di memoria. Per risolvere il problema, aumentare il valore dell'opzione query wait. Per una query parallela, può risultare utile ridurre il valore dell'opzione max degree of parallelism.

Nota

In un sistema con carichi elevati e con un numero eccessivo di richieste di memoria, le query con merge join, sort e bitmap nel piano di query possono eliminare il bitmap quando non ottengono la memoria minima necessaria per il bitmap. Questo può influenzare le prestazioni delle query e, se la procedura di ordinamento eccede la memoria disponibile, aumentare l'utilizzo delle tabelle di lavoro nel database tempdb, determinando l'ampliamento di tempdb. Per risolvere questo problema aggiungere memoria fisica o ottimizzare le query per l'utilizzo di un diverso piano di query, più rapido. Per ulteriori informazioni, vedere Ottimizzazione delle prestazioni di tempdb e Procedura: Ottimizzazione di un database.

Assegnazione della quantità massima di memoria a SQL Server

È possibile assegnare a Motore di database di SQL Server le quantità di memoria seguenti, utilizzando l'opzione AWE e il privilegio Blocco di pagine in memoria.

32 bit

64 bit

Memoria convenzionale

In tutte le edizioni di SQL Server, fino al limite dello spazio degli indirizzi virtuali di processo:

  • 2 GB

  • 3 GB con parametro di avvio /3gb1

  • 4 GB in WOW642

In tutte le edizioni di SQL Server, fino al limite dello spazio degli indirizzi virtuali di processo:

  • 7 terabyte in sistemi con architettura IA64

  • 8 terabyte in sistemi con architettura x64

NotaNota
In Windows Server 2003 il limite è 512 GB, mentre in Windows Server 2003 Service Pack 1 il limite è 1 terabyte. Quando Windows supporta memoria aggiuntiva, SQL Server può raggiungere i limiti elencati.

Meccanismo AWE (consente a SQL Server di superare il limite dello spazio degli indirizzi virtuali di processo nelle piattaforme a 32 bit)

Nelle edizioni Standard, Enterprise e Developer di SQL Server, il pool di buffer è in grado di accedere a un massimo di 64 GB di memoria.

Non applicabile3.

Privilegio Blocco di pagine in memoria del sistema operativo (consente di bloccare la memoria fisica, impedendo il paging della memoria bloccata da parte del sistema operativo)4

Nelle edizioni Standard, Enterprise e Developer di SQL Server, è necessario per utilizzare il meccanismo AWE nel processo di SQL Server. Non è possibile eseguire il page out della memoria allocata tramite il meccanismo AWE.

La concessione di questo privilegio senza l'attivazione di AWE non ha alcun effetto sul server.

Nelle edizioni Enterprise e Developer di SQL Server, è consigliato per evitare il paging del sistema operativo. In base al carico di lavoro può determinare un miglioramento delle prestazioni. La quantità di memoria accessibile è simile a quella della memoria convenzionale.

1**/3gb** è un parametro di avvio del sistema operativo. Per ulteriori informazioni, visitare MSDN Library.

2 WOW64 (Windows on Windows 64) è una modalità in cui la versione a 32 bit di SQL Server viene eseguita in un sistema operativo a 64 bit. Per ulteriori informazioni, visitare MSDN Library.

3 Si noti che l'opzione sp_configureawe enabled è presente nella versione a 64 bit di SQL Server, ma viene ignorata. Verrà rimossa a partire da una delle prossime versioni o Service Pack di SQL Server a 64 bit.

4 Se viene concesso il privilegio Blocco di pagine in memoria, sia nelle piattaforme a 32 bit per il supporto AWE sia nelle piattaforme a 64 bit in modo autonomo, è consigliabile impostare anche l'opzione max server memory. Per ulteriori informazioni, vedere Opzioni per la memoria server.