none
SQL Server consumindo memória acima do definido RRS feed

  • Pergunta

  • Olá pessoal,

    Na empresa onde trabalho tenho em torno de 80 usuários em média que acessa o ERP da empresa.

    O servidor sql server tem 32 GB, sendo que definir no sql server para ele consumir até 26GB memória apenas a fim de deixar uma reserva para o sistema operacional.

    Porém quando vou monitorar o consumo do sqlservr.exe no processos do windows fica sempre em torno de 28GB.

    Gostaria de saber porque ta consumindo mais do que precisa?

    Desde já agradeço a atenção de todos.

    sexta-feira, 22 de setembro de 2017 12:54

Respostas

  • A configuração Max Server Memory, limita algumas áreas (Ex: Buffer Pool) do SQL Server. Por exemplo, se você tiver CLR no seu ambiente, a memória atribuída ao CLR não entra no limite do Max Server Memory.

    "See example B for a query to return the currently used memory. max server memory controls the SQL Server memory allocation, including the buffer pool, compile memory, all caches, qe memory grants, lock manager memory, and clr memory (essentially any memory clerk found in sys.dm_os_memory_clerks). Memory for thread stacks, memory heaps, linked server providers other than SQL Server, and any memory allocated by a non SQL Server DLL are not controlled by max server memory." 

    Fonte: https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options


    Jefferson Santos [MCTS SQL Server]


    segunda-feira, 25 de setembro de 2017 00:48

Todas as Respostas


  • As opções de configuração min server memory e max server memory estabelecem limites superiores e inferiores à quantidade de memória usada pelo pool de buffers do Microsoft Mecanismo de banco de dados do SQL Server. O pool de buffers não adquire imediatamente a quantidade de memória especificada na min server memory. O pool de buffers é iniciado apenas com a memória exigida para inicialização. Conforme a carga de trabalho do Mecanismo de Banco de Dados aumenta, ele continua adquirindo a memória exigida para oferecer suporte à carga de trabalho. O pool de buffers não libera a memória adquirida até atingir a quantidade especificada na min server memory. Quando a min server memory é atingida, o pool de buffers usa o algoritmo padrão para adquirir e liberar memória, conforme necessário. A única diferença é que o pool de buffers nunca cancela sua alocação de memória abaixo do nível especificado na min server memory, e nunca adquire mais memória que o nível especificado na max server memory.

    Observação

    Como um processo, o SQL Server adquire mais memória do que a especificada pela opção max server memory. Os componentes internos e externos podem alocar memória fora do pool de buffers, o que consome memória adicional, mas a memória alocada ao pool de buffers normalmente representa a parte maior da memória consumida pelo SQL Server.

    Alem isso aqui especifica como monitorar a memoria do SQL Server

    https://technet.microsoft.com/pt-br/library/ms176018(v=sql.105).aspx

    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    • Sugerido como Resposta Mariana Del Nero sexta-feira, 22 de setembro de 2017 17:58
    sexta-feira, 22 de setembro de 2017 13:24
  • A configuração Max Server Memory, limita algumas áreas (Ex: Buffer Pool) do SQL Server. Por exemplo, se você tiver CLR no seu ambiente, a memória atribuída ao CLR não entra no limite do Max Server Memory.

    "See example B for a query to return the currently used memory. max server memory controls the SQL Server memory allocation, including the buffer pool, compile memory, all caches, qe memory grants, lock manager memory, and clr memory (essentially any memory clerk found in sys.dm_os_memory_clerks). Memory for thread stacks, memory heaps, linked server providers other than SQL Server, and any memory allocated by a non SQL Server DLL are not controlled by max server memory." 

    Fonte: https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options


    Jefferson Santos [MCTS SQL Server]


    segunda-feira, 25 de setembro de 2017 00:48
  • Obrigado pelas respostas Wesley Neves e Jefferson O Santos.

    Acho que já sei que pode esta consumindo um pouco há mais do normal.

    Tenho na empresa Linkedserver configurado de um SQL Server com outro e como consta na citação do Jefferson ele não entra no maxmemory.

    Desde já agradeço a atenção de todos.

    quarta-feira, 27 de setembro de 2017 18:39
  • Gambit,

    Este tipo de situação pode acontecer sim, o SQL Server mesmo com configurações limite de uso de memória ele pode em alguns momentos consumir mais que o comum.

    O Linked Server é justamente um recurso que não entra nos limites de configuração de uso de memória da mesma forma que conexões do tipo ODBC feitas para outras fontes de dados.


    Pedro Antonio Galvao Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 28 de setembro de 2017 00:27
    Moderador