none
Definição de utilização de memória minima e máxima do SQL SERVER 2008 R2

    Question

  • Prezados,

    Gostaria de validar a configuração min e max que o SQL Server vai utilizar no meus servidor, no meu cenário esta descrito abaixo,

    A configuração de limite de memória em "Server Properties/Memory/Server memory options" a opção Use AWE to allocate memory esta desmarcada, Minimum server memory in MB está em 0, e o Maximum server memory in MB está em 23552KB, ressalto que meu servidor atualmente está com 28672KB, mesmo efetuando está configuração pelo Task Manager fica 96% da memoria ocupada. Está correta a forma que configurei? 

    Complementando a opção em Properties/Memory/Other memory options em Index creation memory in K, 0 = dynamic memory) está em 0 e o Minimum memory per query in KB está em 1024 mais abaixo tem Configured valeus "esta marcada" e Running values desmarcada. 

    Grato

    Cláudio Bruno


    Bruno

    Wednesday, June 27, 2012 4:14 PM

Answers

  • Olá Bruno,

    Eu particularmente sempre utilizo esses contadores para monitorar o processo do SQL Server.

    SQLServer: Memory Manager: Total Server Memory(KB):

    Shows the amount of memory that SQL Server is currently using.  This value should grow until its equal to Target Server Memory, as it populates its caches and loads pages into memory.  When it has finished, SQL Server is said to be in a “steady-state”.  Until it is in steady-state, performance may be slow and IO may be higher.

    SQLServer: Memory Manager: Target Server Memory(KB)

    Shows the amount of memory that SQL Serve wants to use based on the configured Max Server Memory.

    Eu nao utilizo o Task Manager.

    Voltando a sua duvida o Sistema Operacional possui dois modos. User Mode e Kernel Mode.

    No Kernel Mode 2GB de dados sao endereçados para ele, ou seja, o sistema operacional sempre terá 2GB de dados para seu auto gerenciamento. Você ainda assim pode diminuir habilitando comandos como /3GB ou /PAE. Resumindo do total de memoria disponível, 2GB é para Kernel Mode e o restante é para User Mode que é onde o SQL Server entra.

    Se você possuir um servidor de 20GB, voce pode configurar 20GB para o SQL Server o problema aqui é Windows e SQL Server entrarem em colapso. Em uma briga por requisição de memoria o processo do Kernel tem prevalência sobre qualquer outro processo presente na camada User Mode, o que nao é uma boa pratica.

    É valido ainda lembrar que o SQL Server até o 2008 R2 possui dois tipos de endereçamento de memoria, uma utilizada para Buffer Cache e outra utilizada para outros procedimentos como: Linked Server, OleDB, Extended stored procedure... e por ai vai.

    Então se você possui 20GB, eu configuraria 16GB para o SQL Server, pois ele poderá utilizar em média entre 10 a 20% a mais para essa outra area de memoria.

    Se a resposta foi útil, classifique.



    Att, Marcos Freccia [MCTS|MCITP|MCT SQL Server 2008]

    Monday, July 30, 2012 9:17 PM

All replies

  • Olá Bruno, obrigado pela atenção.

    Quanto as configurações de hardware, variam muito de solução para solução, pois cada uma requer um tipo de desempenho em determinados aspectos.

    Quanto a configuração do SQL Server, tu deixou o máximum server memory provavelmente com o valor total do teu servidor.

    Qual o comportamento neste caso. O SQL Server vai identificar que ele pode utilizar toda a memória do servidor e vai alocar ela mesmo que não seja necessário. 

    É um comportamento extremamente normal para o SQL Server tendo em vista que ele aloca esta memória para não concorrer na hora da utilização.

    Neste caso é perigoso tu ter mais recursos nesta máquina pois o SQL Server vai estar sempre querendo tomar toda memória que estiver disponível.

    No task manager vai mostrar que teu servido esta no gargalo de memória e mesmo assim não esta lento, não esta travado, tão pouco perdendo desempenho. Isso é porque ele alocou a memória mas não esta a utilizando naquele momento.

    Caso tu queira garantir uma memória para outras aplicações ou finalidades, basta limitar o teu SQL Server para deixar sempre disponível aquilo que tu quiser, por exemplo:

    Meu servidor para o SQL Server tem 12GB, se tu configurar como tu nos exemplificou ele vai usar o 12GB, mas eu quero somente 10GB, basta limitar o maximum server memory para 10GB e a partir dai teu servidor vai ter 2GB sempre de sobra.

    Ressaltando que estas alterações de comportamento do engine do SQL Server somente são carregadas quando o serviço sobe, neste caso alterando o maximum memory deve reiniciar o SQL Server para surtir efeito.

    Espero que tenha lhe esclarecido o cenário e seja útil.

    Qualquer dúvida entre em contato.



    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    Wednesday, June 27, 2012 5:23 PM
  • Marcus,

               Obrigado pela atenção, meu cenário tenho um Servidor com 28 GB de memoria, coloquei no SQL maximum de 23GB, restando 5GB, porém mesmo assim na task manager continua chegando as 96% de memoriam, tirei um print da tela de hoje, como houve a necessidade de reiniciar o Servidor ontém, hoje ainda está em 93% mas acedito que até hoje no fim do dia já chege nos 96%, mesmo
    ficando memoria em Standy by, será se está correto ? Coloquei também a imagem do Server Properties para validar,

    Desde já agradeço a atenção,

    Grato

    Cláudio Bruno

            


    Bruno



    Wednesday, June 27, 2012 5:46 PM
  • Bruno, estes 26GB estão sendo utilizados pelo SQL Server?

    se forem 23GB dele e o restante pelo Windows estaria correto.

    Aguardo retorno.


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    Wednesday, June 27, 2012 5:57 PM
  • Uma duvida que até não consegui decifrar, pois no Task manager a utilização do programa SQLserver.exe é de 1600mb no máximo e o demais somando o total não passa nem perto deste 26gb utilizados, como posso descobrir quanto o SQL está consumindo realmente ?

    Grato

    Cláudio Bruno


    Bruno

    Wednesday, June 27, 2012 6:59 PM
  • Bruno,

    Cara o quanto esta definido para o Windows?

    Não podemos se esquecer que o SQL Server mesmo tendo um limite de memória definida ela tem uma área de Buffer dela que pode representar uma alocação fora da área de memória.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Wednesday, June 27, 2012 7:25 PM
    Moderator
  • Bom levo em conta no seguinte se informo 23GB para o SQL o demais será para o Windows restao 5GB, ou tem como eu fazer um definição somente para o Windows ?

    Grato

    Cláudio Bruno


    Bruno

    Wednesday, June 27, 2012 9:24 PM
  • Bruno,

    em se falando de SQL Server esquece o TaskManager. Ele não conta corretamente a memória usada pelo SQL Server.

    Se você tem 30GB de memória e alocou 30GB pro SQL, ele vai alocar aquilo que estiver disponível. Tem um scheduler que roda internamente para não faltar memória para S.O., porém se tiver um HP Backup da vida que rode de madrugada fazendo backup aí podemos ter problemas.

    Sugiro que você deixe 90% da memória configurada para o SQL, e tenha certeza que você só tenha uma instância configurada, pois se você não se atentar, a outra instância vai ficar com o valor default que é 2.1xx.xxx.xxx (o maximo do campo INT) e vai alocar tudo, respeitando as demais instancias e S.O.

    Utiliza o DBCC MemoryStatus para verificar o tamanho do buffer pool, que é a área alocada em memória para o SQL. Procure por Bpoll Commited, que é na prática o que o SQL está usando de fato.

    Monday, July 09, 2012 1:35 AM
  • Não Bruno, não tem como limitar a memória como exclusiva para o SO, o correto é fazer a configuração que tu fizeste, deixar uma margem para os demais programas.

    Provavelmente tu tenhas a utilização dos 5GB em outros processos que não seja o SQL.

    Tu chegou a validar isso?

    Lembrando que como o Junior falou o buffer chache não é contabilizado neste limitador porém também normalmente não é um agravante.

    Tem contadores do Windows no performance monitor que fazer o levantamento de quanto o SQL Server REALMENTE esta usando, desta forma talvez tu consiga diminuir esta limitação.

    Espero que ajude.


    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br

    Monday, July 09, 2012 12:31 PM
  • Junior,

    como define a quantidade de memória para o Windows? Não sabia que tinha como fazer isso. O que costumo fazer aqui é limitar a memória do SQL e o restante fica pro Windows.

    Thursday, July 19, 2012 4:43 PM
  • Olá Bruno,

    Eu particularmente sempre utilizo esses contadores para monitorar o processo do SQL Server.

    SQLServer: Memory Manager: Total Server Memory(KB):

    Shows the amount of memory that SQL Server is currently using.  This value should grow until its equal to Target Server Memory, as it populates its caches and loads pages into memory.  When it has finished, SQL Server is said to be in a “steady-state”.  Until it is in steady-state, performance may be slow and IO may be higher.

    SQLServer: Memory Manager: Target Server Memory(KB)

    Shows the amount of memory that SQL Serve wants to use based on the configured Max Server Memory.

    Eu nao utilizo o Task Manager.

    Voltando a sua duvida o Sistema Operacional possui dois modos. User Mode e Kernel Mode.

    No Kernel Mode 2GB de dados sao endereçados para ele, ou seja, o sistema operacional sempre terá 2GB de dados para seu auto gerenciamento. Você ainda assim pode diminuir habilitando comandos como /3GB ou /PAE. Resumindo do total de memoria disponível, 2GB é para Kernel Mode e o restante é para User Mode que é onde o SQL Server entra.

    Se você possuir um servidor de 20GB, voce pode configurar 20GB para o SQL Server o problema aqui é Windows e SQL Server entrarem em colapso. Em uma briga por requisição de memoria o processo do Kernel tem prevalência sobre qualquer outro processo presente na camada User Mode, o que nao é uma boa pratica.

    É valido ainda lembrar que o SQL Server até o 2008 R2 possui dois tipos de endereçamento de memoria, uma utilizada para Buffer Cache e outra utilizada para outros procedimentos como: Linked Server, OleDB, Extended stored procedure... e por ai vai.

    Então se você possui 20GB, eu configuraria 16GB para o SQL Server, pois ele poderá utilizar em média entre 10 a 20% a mais para essa outra area de memoria.

    Se a resposta foi útil, classifique.



    Att, Marcos Freccia [MCTS|MCITP|MCT SQL Server 2008]

    Monday, July 30, 2012 9:17 PM
  • É valido ainda lembrar que o SQL Server até o 2008 R2 possui dois tipos de endereçamento de memoria, uma utilizada para Buffer Cache e outra utilizada para outros procedimentos como: Linked Server, OleDB, Extended stored procedure... e por ai vai.

    Então se você possui 20GB, eu configuraria 16GB para o SQL Server, pois ele poderá utilizar em média entre 10 a 20% a mais para essa outra area de memoria.


    Marcos,

    Essa questão do SQL possuir dois tipos de memória fiquei sabendo á pouco tempo pelo seu conterrâneo Felipe Ferreira, muito interessante sua resposta explicando esse processo. Provavelmente em ambientes de BI e Replicação que utilizam muitos linkeds serves, conexões OLEDB e procedures podemos ter alarmes de uso de memória justamente por causa disso. Configura 95% da memória pro SQL e os outros 5% fica entre o Kernel Mode e o outro cache do SQL.

    Agora você não acha interessante que esses 2GB do Kernel mode fossem intactos? Vou procurar saber se tem alguma configuração que evita essa situaçaõ do SQL "roubar" a memória do S.O., visto que ela é essencial para o funcionamento do servidor.

    Tuesday, July 31, 2012 4:24 PM