Come controllare l'uso eccessivo di ram da parte di SQL Server?


13

Il server di database che sto utilizzando esegue 6 diverse istanze di SQL Server. Ha 48 GB di RAM. E uno di questi sta consumando più di 10 GB di RAM, il consumo totale è di 20 GB per ora. Il consumo di RAM è in continua crescita. Un paio di giorni prima utilizzava più di 40 GB di RAM e il server rispondeva molto lentamente. L'applicazione mostra i problemi di arresto anomalo durante il salvataggio dei dati.

Quindi ho riavviato i servizi di SQL Server.

Non appena i servizi sono stati riavviati, l'utilizzo è sceso a 4 GB, ma ora sta crescendo. E sono preoccupato che crescerà fino a 40 GB in 4 o 5 giorni e rallenterà il server.

Il riavvio del servizio non è la buona opzione immagino.

Ho anche scoperto da diverse fonti che possiamo impostare la dimensione massima di utilizzo della memoria per SQL Server. E non sono del tutto sicuro che questo possa aiutare o no. Non posso verificarlo perché il server utilizza il database di produzione e sarebbe un rischio se il servizio si interrompesse durante la modifica delle impostazioni in SQL Server.

Qualcuno può aiutare per questo problema?


1
Per impostazione predefinita, SQL utilizzerà quanta più RAM possibile per massimizzare le sue prestazioni, questo è positivo - significa che sta memorizzando nella cache query e risultati comuni per rendere più veloce l'applicazione. Utilizzerà solo la RAM fino al limite in cui il sistema operativo segnala il paging. È possibile ignorare questo comportamento. Vedere questa documentazione MS: Come regolare l'utilizzo della memoria utilizzando le opzioni di configurazione in SQL Server Questo può anche essere utile: Come determinare le impostazioni di configurazione corrette di SQL Server

4
E ' NON un problema - è il comportamento progettato e predefinito per SQL Server !! E sì: riavviare il processo di SQL Server è un'idea orribile ..... SQL Server memorizza nella cache il maggior numero possibile di dati e pagine di indice in memoria, ottimizzando in tal modo le prestazioni complessive del sistema. Questo è il motivo per cui una macchina SQL Server dovrebbe essere sempre un server dedicato , non facendo altro che SQL Server.
marc_s,

Sì, ho capito. È progettato in questo modo. Ma quando SQL Server utilizza gran parte della memoria, rallenta il server e provoca il timeout dei report. Quindi voglio impedire al server sql di usare una memoria limitata.

4
In realtà, se SQL Server utilizza quanta più memoria possibile, direi che renderebbe meno probabile la difficoltà a consegnare i report. È quando si vincola artificialmente SQL Server (o si inseriscono troppe istanze in una casella in competizione per le risorse) in cui si vedranno problemi dovuti a richieste di memoria e altri problemi.
Aaron Bertrand

Ma mi chiedo perché all'improvviso abbia iniziato a mostrare bene i report dopo aver riavviato il servizio SQL Server. È possibile che troppi clienti stessero usando l'applicazione a causa della quale i report non sono stati visualizzati?

Risposte:


14

Questo è di progettazione. Si suppone che SQL Server utilizzi tutta la memoria disponibile, in quanto archivia sempre più dati in memoria in modo che non sia necessario tornare sul disco per ottenere sempre la stessa memoria.

Se è necessario limitare la quantità di memoria utilizzata da una singola istanza di SQL Server, è possibile farlo in SQL Server Management Studio facendo clic con il pulsante destro del mouse sul nome dell'istanza in Esplora oggetti e selezionando le proprietà. Quindi selezionare la scheda di memoria e impostare la quantità massima di memoria che sarà consentita a SQL Server. Ora questo non limiterà tutti gli aspetti di SQL Server a quella quantità di memoria. Questo controlla solo il pool di buffer e la cache del piano di esecuzione. Cose come CLR, Full Text, la memoria effettiva utilizzata dai file exe di SQL Server, Agente SQL, stored procedure estese, ecc. Non sono controllate da questa impostazione. Tuttavia, queste altre cose in genere non richiedono tutta la quantità di memoria, è il pool di buffer e la cache del piano di esecuzione che richiedono la maggior parte della memoria.

Se si imposta questa impostazione su un'istanza, è necessario impostarla su tutte le istanze in modo che non si calpestino.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.