Microsoft SQL Server

SQL Server usa troppa memoria, cosa fare

Forse ti sei accorto che SQL Server usa troppa memoria o meglio quasi tutta la memoria presente sul tuo server. Magari hai notato delle prestazioni ridotte sul tuo server dove è installato Microsoft SQL Server. Quindi ha provato a vedere che cosa succede guardando in “Gestione attività”. Qui hai visto che il processo “SQL Server” sta usando quasi tutta la memoria disponibile sul server.

Può sembrarti strano ma la cosa è del tutto normale. Infatti per impostazione predefinita, la memoria massima per SQL Server, è molto più di quella che si ha effettivamente. Per esempio, per SQL Server 2014 Standard la memoria massima utilizzabile di default è 2147483647 MB ovvero quasi 2 milioni di GB. Quindi SQL Server utilizzerà tutta la memoria che gli è consentita.

Se il sistema operativo non dispone di memoria disponibile, inizierà a utilizzare il file di paging anziché la RAM. L’utilizzo del file di paging al posto della memoria comporterà scarse prestazioni del sistema: le operazioni che dovrebbero essere veloci e in memoria leggeranno e scriveranno costantemente su disco.

A partire da SQL Server 2012, il limite di memoria di 64 GB per la Standard Edition si applica solo alla cache dei dati e altre parti di SQL Server possono utilizzare la memoria superiore. Il limite della cache dei dati della Standard Edition sale a 128 GB in SQL Server 2014.

Perché SQL Server ha così tanto bisogno di memoria?

SQL Server è progettato per utilizzare tutta la memoria del server. Il motivo è che SQL Server memorizza nella cache i dati nel database nella RAM in modo da poter accedere ai dati più velocemente di quanto potrebbe fare se avesse bisogno di leggere i dati dal disco ogni volta che un utente ne ha bisogno. Se dovessimo passare ai dischi ogni volta che SQL Server ha bisogno degli stessi dati più e più volte, i requisiti di I/O del disco sarebbero incredibilmente elevati.

La memoria compensa molti peccati del database come:

  • Archiviazione lenta ed economica (come dischi rigidi SATA e iSCSI)
  • Programmi che recuperano inutilmente troppi dati
  • Database che non dispongono di indici validi
  • CPU che non sono in grado di creare piani di query abbastanza velocemente

Configuriamo SQL Server per non fargli usare tutta (o quasi) la memoria

La soluzione per eliminare il problema è quella di ridurre la memoria massima utilizzabile da SQL Server impostata di default perché ne usa troppa. Questo è piuttosto semplice.

  1. Accedi all’istanza di SQL Server con SQL Management Studio
SQL Server usa troppa memoria
SQL Server usa troppa memoria
  1. Clicca con il tasto destro del mouse sul nome dell’istanza
  2. Dal menù che si apre seleziona Proprietà
SQL Server usa troppa memoria
SQL Server usa troppa memoria
  1. Ora che si è aperta una nuova finestra, nel menù a sinistra, seleziona Memoria
  2. Nel campo Memoria massima per il server (in MB) seleziona un valore minore della RAM installata sul server
    N.B.: come puoi vedere il valore è espresso in MB
SQL Server usa troppa memoria
SQL Server usa troppa memoria

Se si ha familiarità con sp_configure e lo si è impostato per consentire l’accesso alle opzioni avanzate, è possibile impostarlo direttamente in T-SQL. Basta sostituire 12345 qui sotto con il numero di megabyte che si desidera utilizzare:

EXEC sys.sp_configure 'max server memory (MB)', '12345';
RECONFIGURE;
GO

Di quanta memoria ha effettivamente bisogno il mio SQL Server?

Questa è una domanda piuttosto complicata a cui rispondere. Dipende molto da quali e quante altre applicazioni il server Windows distribuisce. Ammettiamo che il server Windows serva esclusivamente SQL Server, che sarebbe la cosa migliore ovvero dedicare un server solo a SQL Server, a mio giudizio è di riservare 1 GB per ogni 4 GB di RAM installata da 4 a 16 GB per Windows. Quindi 1 GB per ogni 8 GB di RAM installata oltre i 16 GB di RAM. Il resto lo dedichiamo a SQL Server.

Come per tutti i software, la memoria RAM più ce n’è e meglio è. SQL Server ne ha bisogno in buone quantità. Personalmente non imposterei SQL con una memoria massima inferiore ai 64 GB.

Allora per fare una cosa fatta bene posso inserire in Memoria minima per il server (in MB) e Memoria massima per il server (in MB) lo stesso valore

Sì, se vuoi mandare tutto in palla questa è un’ottima scelta. Infatti come specificato in un articolo di Microsoft:

Se si specifica lo stesso valore per Memoria minima per il server (in MB)Memoria massima per il server (in MB), quando la memoria allocata al motore di database di SQL Server raggiunge tale valore, il motore di database smette di liberare e acquisire dinamicamente memoria per il pool di buffer.

Guida all’architettura di gestione della memoria – SQL Server | Microsoft Learn

Meglio lasciare il valore minimo su 0.

ISCRIVITI ALLA
NEWS LETTER

NON COSTA NIENTE. Ti arriverà una mail di notifica solo ed esclusivamente quando uscirà un nuovo articolo. Null'altro!

I TUOI DATI NON VERRANNO MAI CEDUTI A NESSUNO E PER NESSUNA RAGIONE.

Non inviamo spam! Leggi la nostra Informativa sulla privacy per avere maggiori informazioni.

2 commenti su “SQL Server usa troppa memoria, cosa fare”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna in alto

FAI UNA DONAZIONE

Caro utente del mio blog, ti chiedo di partecipare alla raccolta fondi aperta sul sito GoFundMe.

Anche con poco, ogni donazione può fare la differenza.

Puoi partecipare anche condividendo la raccolta tra i tuoi conoscenti.

Per favore non ignorare questa richiesta.

Grazie!!!

Puoi utilizzare anche questo QR Code