it-swarm.it

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

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 a RAM in questa pagina https://dba.stackexchange.com/a/7062/2744 . Ho usato questi due per vedere a cosa serve il 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 ha fatto il resto del mio RAM go? :-) Il 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.

18
Martin Sjöberg

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.

Jonathan Kehayias , Christian Bolton e John Samson ha 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

20

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
16
mrdenny

Da SQL 2012 in poi, single_pages_kb è stato sostituito da pages_kb in quel DMV. https://msdn.Microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396

Pertanto, se si desidera eseguire la query inclusa nella domanda, su un server 2012+, rimuovere la stringa single_.

3
Razvan Zoitanu

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

2
Craig Efrein