Limita la memoria massima del server per evitare la pressione della memoria - AWSGuida prescrittiva

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Limita la memoria massima del server per evitare la pressione della memoria

Per motivi di prestazioni, SQL Server non rilascia memoria già allocata. All'avvio di SQL Server, occupa lentamente la memoria specificata inmemoria_min_serveropzione, quindi continua a crescere fino a raggiungere il valore specificato nelmemoria_max_serveropzione. (Per ulteriori informazioni su queste impostazioni, vedereOpzioni di configurazione della memoria del servernella documentazione di SQL Server.)

La memoria di SQL Server è composta da due componenti: il buffer pool e il pool non buffer (chiamato anche pool non buffer)ricordo da lasciareo MTL). Il valore delmemoria_max_serverl'opzione determina la dimensione del buffer pool di SQL Server, che comprende la cache del buffer, la cache delle procedure, la cache del piano, le strutture buff e altre cache.

A partire da SQL Server 2012,memoria_min_serverememoria_max_servertiene conto di tutte le allocazioni di memoria per tutte le cache, tra cuiSQLGENERAL,SQLBUFFERPOOL,SQLQUERYCOMPILE,SQLQUERYPLAN,SQLQUERYEXEC,SQLOPTIMIZER, eSQLCLR. Per un elenco completo degli addetti alla memoria in max_server_memory, vederesys.dm_os_memory_clerksnella documentazione di Microsoft SQL Server.

Per controllare la correntememoria_max_servervalue, usa il comando:

$ sp_configure 'max_server_memory'

Ti consigliamo di utilizzare il tappomemoria_max_servera un valore che non causa una pressione sulla memoria a livello di sistema. Non esiste una formula universale applicabile a tutti gli ambienti, ma abbiamo fornito alcune linee guida in questa sezione.memoria_max_serverè un'opzione dinamica, quindi può essere modificata in fase di esecuzione.

Come punto di partenza, puoi determinarememoria_max_servercome segue:

max_server_memory = total_RAM – (memory_for_the_OS + MTL)

dove:

  • La memoria per il sistema operativo è di 1-4 GB.

  • L'MTL (memory to leave) include la dimensione dello stack, che è di 2 MB su macchine a 64 bit per thread di lavoro e può essere calcolata come segue:MTL = stack_size * max_worker_threads

In alternativa, puoi usare:

max_server_memory = total_RAM – (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

dove la quantità base di memoria RAM è determinata come segue:

  • Se la RAM sul server è compresa tra 4 GB e 16 GB, lascia 1 GB per 4 GB di RAM. Ad esempio, per un server da 16 GB, lascia 4 GB.

  • Se la RAM sul server è superiore a 16 GB, lascia 1 GB per 4 GB di RAM fino a 16 GB e 1 GB per 8 GB di RAM oltre 16 GB.

Ad esempio, se un server dispone di 256 GB di RAM, il calcolo sarà:

  • 1 GB per il sistema operativo

  • Fino a 16 GB di RAM: 16/4 = 4 GB

  • RAM residua superiore a 16 GB: (256-16) /8 = 30

  • RAM totale da lasciare: 1 + 4 + 30 = 35 GB

  • memoria_server massima: 256 - 35 = 221 GB

Dopo la configurazione iniziale, monitora la memoria che puoi liberare durante la durata tipica del carico di lavoro per determinare se è necessario aumentare o diminuire la memoria allocata a SQL Server.

Nota

Windows segnala la notifica di esaurimento delle risorse di memoria a 96 MB, quindi è necessario disporre di un buffer, ma è possibile impostareMbyte disponibilisuperiore a 1 GB su server più grandi con 256 GB o superiore di RAM.

Per ulteriori informazioni, vedereGuida all'architettura di gestione della memorianella documentazione di Microsoft SQL Server.