La memoria massima di SQL Server non limita l'uso della RAM


18

Vorrei il tuo contributo al riguardo. Ho un server sql 2008r2 Ent. Ed. 64 bit con 16 core e 64 GB di RAM. Esiste un'istanza del server SQL completamente patchata a partire da 2011-2014.

Il ram massimo è impostato su 60000 MB. La quantità di RAM gratis è 0 secondo il task manager dopo alcuni giorni online.

Se cambio la RAM massima a meno di 53 GB, dopo alcuni giorni si stabilizzerà e avrò una RAM libera.

È il processo sql che alloca la ram in base al task manager. Come posso venire a patti con quale sia realmente il problema? Inutile dire che ho già fatto molti test ma non l'ho ancora risolto a mio piacimento. e ohh non otteniamo il tipico ritardo della fame di memoria quando il ram disponibile è fino a 0 libero.

Aggiornamento 1:

Ispirato da un altro Q / A relativo alla RAM in questa pagina /dba//a/7062/2744 . Ho usato questi due per vedere a cosa serve la RAM.

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

Gli importi utilizzati da questi sono prima selezionati 7948432 Kb secondo 44030,57812 MB che è un totale di circa 52 GB utilizzati dal server sql ... quindi dove è andato il resto della mia RAM? :-) Task manager mostra ora 363 cache, disponibile 401, 40 gratis e sqlservr.exe ha memoria privata impostata 64 459 656. Max Ram impostato su 60000 MB come prima.

Risposte:


20

L'impostazione della memoria massima dei server SQL definisce i limiti solo per l'utilizzo del pool di buffer. Ci saranno allocazioni variabili ma significative richieste oltre a quel limite.

I messaggi di Jonathan Kehayias , Christian Bolton e John Samson hanno post di livello 300/400 sull'argomento. Brent Ozar ha un articolo più facile da leggere che potrebbe essere un posto migliore per iniziare.

Correlati anche: "Ghost Memory" di SQL Server 2008 R2


sì, sono d'accordo che limita solo il pool di buffer. Grazie per i segnalibri che esaminerò.
Martin Sjöberg,

Sto leggendo su quei link e ci sono alcune cose buone lì def. Aggiornerò la mia domanda con quello che ho scoperto. Mi sento anche sollevato dal fatto che ho il numero di Max Pizzeria prontamente disponibile ... Mi chiedo se lo fanno a casa?
Martin Sjöberg,

16

Come detto pool di buffer e cache delle procedure sono le uniche cose che sono controllate dalla memoria massima del server. Ci sono molte altre cose in SQL Server che possono consumare memoria oltre quel limite. Includono (ma non sono limitati a):

  • Posta elettronica database
  • SQLCLR
  • Stored procedure estese
  • I binari stessi
  • SQL Mail
  • SSIS
  • SSAS
  • SSRS

Dei suddetti utilizziamo i binari ofc e ssis su questo server.
Martin Sjöberg,

1
Quale altro software è installato sul server? E intendo qualsiasi cosa. Driver MPIO, driver di unità flash, software di backup, antivirus, sys-internals, ecc.
mrdenny,

Il server è abbastanza pulito e appena installato ma spesso ne abbiamo alcuni. Proverò a mettere insieme un elenco completo alla fine di questa settimana. Insomma e dalla mia memoria ... abbiamo un iodrive (dell), mcafee, processexplorer su desktop, iometer, treesize ...
Martin Sjöberg il

1
Il driver FusionIO ha bisogno di molta memoria con cui lavorare. Probabilmente sta prendendo molto.
mrdenny,

È possibile provarlo? O configurarlo per usare meno RAM? Sofar sembra rilasciare RAM quando deve e non ho notato alcun aspetto negativo, ma in caso di necessità dobbiamo aumentare la quantità di pacchetti ssis che mi preoccupano di ciò che potrebbe accadere con l'utilizzo della RAM.
Martin Sjöberg,


2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

Per ridurre la memoria massima del server, potrebbe essere necessario riavviare SQL Server per rilasciare la memoria.

La mia comprensione è che se una pagina nel pool buffer non è stata scritta su disco, non verrà rilasciata fino a quando non lo è.

Se si riduce l'impostazione della memoria massima, SQL Server elimina le pagine sporche?

Poteva monitorare il gestore buffer in perfmon per verificarlo. Perfmon -> SQLServer: Buffer Manager: Pagine del database


Potrebbe essere necessario riavviare SQL Server. Non è sempre richiesto. Conosci le condizioni in cui un riavvio è o non è necessario per liberare memoria?
Nick Chammas,

Modificherei questi dettagli nella tua risposta esistente ed eliminerei questo. Forse mrdenny può rispondere alla tua domanda sul lavaggio delle pagine sporche.
Nick Chammas,

1
Corretto, SQL non può rilasciare una pagina di memoria mentre è sporca (è stata scritta in). Ogni volta che il sistema fa checkpoint, le pagine sporche vengono scritte sul disco. Non credo che la modifica della memoria massima del server provochi un checkpoint.
mrdenny,

1
Il riavvio dell'istanza per modificare le impostazioni della memoria potrebbe essere un grosso errore. Mentre la modifica delle impostazioni della memoria non provoca CHECKPOINTun'operazione sui database, svuota la cache delle procedure. Se si riavvia l'istanza solo per modificare le impostazioni di memoria, non solo la cache delle procedure sarà fredda, ma anche la cache dei dati sarà fredda. Se la memoria massima non può essere ridotta a causa di pagine sporche in memoria, eseguire il CHECKPOINTcomando sui database per scaricare le pagine sporche sul disco, quindi modificare l'impostazione della memoria all'ora di punta senza riavviare l'istanza.
Jon Seigel,
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.