Memória máxima do SQL Server que não limita o uso de RAM

18

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.

Martin Sjöberg
fonte

Respostas:

20

A configuração de memória máxima dos servidores SQL define os limites apenas para o uso do buffer pool. Haverá alocações variáveis, mas significativas, necessárias além desse limite.

Jonathan Kehayias , Christian Bolton e John Samson têm nível 300/400 posts sobre o tema. Brent Ozar tem um artigo mais fácil de ler que pode ser um lugar melhor para começar.

Também relacionado: “Memória Fantasma” do SQL Server 2008 R2

Mark Storey-Smith
fonte
Sim, concordo que limita apenas o buffer pool. Obrigado pelos marcadores que examinarei neles.
Martin Sjöberg
Estou lendo esses links e há algumas coisas boas lá def. Vou atualizar minha pergunta com o que descobrir. Também me sinto aliviado por ter o número de Max Pizzeria prontamente disponível ... Será que eles fazem entrega em domicílio?
Martin Sjöberg 29/11
16

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):

  • Correio do banco de dados
  • SQLCLR
  • Procedimentos armazenados estendidos
  • Os binários eles mesmos
  • SQL Mail
  • SSIS
  • SSAS
  • SSRS
Mrdenny
fonte
Do mencionado acima, usamos os binários ofc e ssis neste servidor.
Martin Sjöberg 29/11
11
Que outro software está instalado no servidor? E eu quero dizer qualquer coisa. Motoristas MPIO, motoristas Flash Drive, software de backup, anti-vírus, sys-internals, etc.
mrdenny
O servidor é bastante limpo e recém-instalado, mas muitas vezes temos alguns por lá. Vou tentar obter uma lista completa no final desta semana. Curto e da minha memória ... nós temos um ioDrive (dell), McAfee, ProcessExplorer no desktop, Iometer, treesize ...
Martin Sjöberg
11
O driver FusionIO precisa de muita memória para trabalhar. Provavelmente é preciso muito disso.
Mrdenny
É possível provar isso? Ou configurá-lo para usar menos RAM? Sofar parece liberar RAM quando necessário e eu não notei nenhuma desvantagem, mas apenas no caso de termos que aumentar a quantidade de pacotes ssis, estou preocupado com o que pode acontecer com o uso da RAM.
Martin Sjöberg
2

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

Craig Efrein
fonte
Você "pode" precisar reiniciar o SQL Server. Nem sempre é necessário. Você conhece as condições sob as quais uma reinicialização é ou não necessária para liberar memória?
precisa
Gostaria de editar esses detalhes em sua resposta existente e excluir esta. Talvez mrdenny possa responder sua pergunta sobre o descarte de páginas sujas.
Nick Chammas
11
Correto, o SQL não pode liberar uma página de memória enquanto está suja (foi gravada em). Sempre que o sistema checa, as páginas sujas são gravadas no disco. Não acredito que a alteração da memória máxima do servidor cause um ponto de verificação.
mrdenny
11
Reiniciar a instância para alterar as configurações de memória pode ser um grande erro. Embora alterar as configurações de memória não cause uma CHECKPOINToperaçã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 o CHECKPOINTcomando 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.
Jon Seigel