Gostaria da sua opinião sobre isso. Eu tenho um servidor sql 2008r2 Ent. Ed. 64 bits com 16 núcleos e 64 GB de RAM. Há uma instância do SQL Server totalmente corrigida a partir de 20111014.
A ram máxima é configurada para 60000MB. A quantidade de RAM livre é 0, de acordo com o gerenciador de tarefas, depois de alguns dias online.
Se eu alterar o número máximo de RAM para abaixo de 53 GB, ele passará alguns dias para estabilizar e ter um pouco de RAM livre.
É o processo sql que aloca o carneiro de acordo com o gerenciador de tarefas. Como chego a um acordo sobre qual é realmente o problema? Escusado será dizer que eu já fiz muitos testes, mas ainda não o resolvi ao meu gosto. e ohh, não temos o atraso típico da falta de memória quando a memória RAM disponível está abaixo de 0 livre.
Atualização 1:
Inspirado por outra pergunta / resposta relacionada à RAM nesta página /dba//a/7062/2744 . Eu usei esses dois para ver o que a RAM está sendo usada.
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 ) ;
A quantidade usada mostrada por eles é o primeiro selecione 7948432 Kb, o segundo 44030,57812 MB, que é um total de cerca de 52 GB usado pelo servidor sql ... então, para onde foi o restante da minha RAM? :-) No momento, o gerenciador de tarefas mostra em cache 363, disponível 401, 40 grátis e sqlservr.exe com o conjunto privado de Memória 64 459 656. Max Ram definido como 60000MB como antes.
fonte
Como dito, o buffer pool e o cache de procedimentos são os únicos itens controlados pela memória máxima do servidor. Existem muitas outras coisas no SQL Server que podem consumir memória além desse limite. Eles incluem (mas não estão limitados a):
fonte
A partir do SQL 2012, single_pages_kb foi substituído por pages_kb nessa DMV. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396
Portanto, se você deseja executar a consulta incluída na pergunta, em um servidor com mais de 2012, remova a cadeia de caracteres single_.
fonte
http://msdn.microsoft.com/en-us/library/ms178067.aspx
Para reduzir a memória máxima do servidor, talvez seja necessário reiniciar o SQL Server para liberar a memória.
Meu entendimento é que, se uma página no buffer pool não tiver sido gravada em disco, ela não será liberada até que seja.
A redução da configuração de memória máxima faz com que o SQL Server esvazie páginas sujas?
Ele poderia monitorar o gerenciador de buffer em perfmon para verificar isso. Perfmon -> SQLServer: Gerenciador de Buffer: Páginas de Banco de Dados
fonte
CHECKPOINT
operação nos bancos de dados, libera o cache do procedimento. Se você reiniciar a instância apenas para alterar as configurações de memória, o cache do procedimento não ficará frio, mas também o cache de dados. Se a memória máxima não puder ser reduzida devido a páginas sujas na memória, execute oCHECKPOINT
comando nos bancos de dados para liberar as páginas sujas no disco e altere a configuração da memória no horário de menor pico sem reiniciar a instância.