Condividi tramite


Gestione della memoria dinamica

Il comportamento predefinito di gestione della memoria di Microsoft Motore di database di SQL Server consiste nell'acquisizione della quantità di memoria necessaria senza causare insufficienza di memoria nel sistema. In Motore di database questo comportamento è possibile tramite l'utilizzo delle API di notifica della memoria in Microsoft Windows.

Lo spazio degli indirizzi virtuali di SQL Server può essere diviso in due aree distinte, ovvero lo spazio occupato dal pool di buffer e il resto. Se il meccanismo AWE è attivato, il pool di buffer può risiedere nella memoria mappata AWE, offrendo ulteriore spazio per le pagine di database.

Il pool di buffer funge da fonte primaria di allocazione della memoria di SQL Server. I componenti esterni che risiedono in un processo di SQL Server, ad esempio gli oggetti COM, e che non usufruiscono delle funzionalità di gestione della memoria di SQL Server, utilizzano la memoria esterna allo spazio degli indirizzi virtuali occupato dal pool di buffer.

All'avvio di SQL Server, viene calcolata la dimensione dello spazio degli indirizzi virtuali per il pool di buffer, in base a parametri specifici come la quantità di memoria fisica nel sistema, il numero di thread del server e vari parametri di avvio. In SQL Server la quantità calcolata di spazio degli indirizzi virtuali del processo viene riservata al pool di buffer, ma viene acquisita (ovvero viene eseguito il commit di) solo la quantità di memoria fisica necessaria per il carico corrente.

L'istanza continua quindi ad acquisire la memoria necessaria per supportare il carico di lavoro. Man mano che altri utenti si connettono ed eseguono query, SQL Server viene acquisita ulteriore memoria fisica su richiesta. Un'istanza di SQL Server continua ad acquisire memoria fisica fino a quando raggiunge il limite di allocazione definito dall'opzione max server memory o fino a quando in Windows viene indicato che non è più disponibile memoria libera in eccesso. La memoria viene liberata quando viene superato il valore dell'impostazione di min server memory e in Windows viene indicata un'insufficienza di memoria libera.

Con l'avvio di altre applicazioni nel computer in cui è in esecuzione un'istanza di SQL Server, tali applicazioni impegnano ulteriore memoria e la quantità di memoria fisica disponibile diminuisce fino a raggiungere un valore inferiore al limite stabilito per SQL Server. L'istanza di SQL Server regola il proprio consumo di memoria. Se un'altra applicazione viene interrotta e viene resa disponibile ulteriore memoria, l'istanza di SQL Server aumenta la dimensione della propria allocazione di memoria. SQL Server può liberare e acquisire diversi MB di memoria al secondo, adattandosi rapidamente alle variazioni di memoria allocata.