none
Sobre a limitação da memória RRS feed

  • Pergunta

  • Bom dia !

    Há possibilidade de rodar uma rotina todos os dias em um determinado horário para baixar o consumo da memória estabelecida como limite.

    Por exemplo:

    - Fixei a memória máxima em 16GB, porém qdo chegar nesse limite, faz a limpeza do buffer e baixa a memória máxima.

    Então qdo atingir a memória máxima, baixa a mesma.

    É possivel isso?

    Att

    Jorge

    terça-feira, 13 de agosto de 2019 11:03

Respostas

  • Jorge,

    O Microsoft SQL Server como todo e qualquer SGBD por padrão gosta de consumir e alocar memória, inclusive para ele quanto mais memória melhor será, isso no entendimento dele SQL Server.

    Esta é uma longa e complexa discussão, mas que não existe uma técnica ou mágica que possa ser aplicada para forçar com que o consume de memória seja reduzida ou até mesmo "zerada" como alguns gostam de dizer, pois por padrão ele também vai necessitar manter alguns procedimentos e transações em sua área de buffer controlada pela Buffer Manager para poder sobreviver.

    Neste link: https://www.mssqltips.com/sqlservertip/4714/different-ways-to-flush-or-clear-sql-server-cache/ , de autoria do  Bhavesh Patel, você vai poder encontrar algumas das possibilidades de se liberar o que esta em cache.

    Por outro lado, você também vai encontrar referências ao comando DBCC DropCleanBuffers que poderá nos ajudar a tentarmos forçar a liberação das páginas de dados alocadas na memória RAM, ressalto que precisamos entender o uso e forma de aplicar este comando afim de evitarmos qualquer problema do que estava sendo processado pelo SQL Server.

    Dentre algumas técnicas destacadas no link acima, eu utilizo também os scripts abaixo:

    -- Limpar as entradas de Cache não utilizadas
    DBCC FREESYSTEMCACHE ( 'ALL' )
    
    -- Limpar os Caches de Sessões --
    DBCC FREESESSIONCACHE
    
    -- Eliminar todas as entradas do CACHE de "Procedures"
    DBCC FREEPROCCACHE
    
    -- Eliminar e liberar o Fluxo de processamento de procedure para o banco de dados específico --
    DBCC FLUSHPROCINDB( 5 )
    
    -- Forçar a escrita das páginas em disco "limpando-as"
    CHECKPOINT
    
    -- Eliminar as páginas de buffer limpas
    DBCC DROPCLEANBUFFERS
    Go

    Vou deixar algumas perguntas caso você possa responder para quem sabe analisarmos alguns outros recursos:

    1-Qual é a versão e edição do SQL Server que você esta utilizando?

    2-Você utiliza alguma aplicação do tipo ERP ou Sistemas de Gestão conectados ao seu SQL Server?

    Estas duas perguntas podem nos ajudar a quem sabe fazer uso de recurso como Query Store para tentarmos otimizar o processamento de suas querys, bem como, a análise das chamadas querys ad-hoc, utilizadas por boa partes das aplicações ERP e Sistemas de Gestão que normalmente gostam de utilizar e consumir buffer.

    Outro recurso que pode ser analisado se a sua versão for 2016 ou superior é Alter Database Scoped Configuration, recurso que permite aplicar um conjunto de configurações diretamente na camada de banco de dados ao invês de aplicarmos na camada de servidor.

    O exemplo de Código abaixo vai lhe ajudar a identificar a versões e edição do SQL Server:

    SELECT  SERVERPROPERTY('servername') As "Nome do Servidor",
                SERVERPROPERTY('productversion') As Versão,
                SERVERPROPERTY ('productlevel') As "Service Pack", 
                SERVERPROPERTY ('edition') As Edição,
                @@Version As "Sistema Operacional"

    Vou listar abaixo os demais comandos que podemos aplicar analisando suas funcionalidades para sua necessidade:

    DBCC FreeProcCache - https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-freeproccache-transact-sql?view=sql-server-2017

    DBCC FreeSessionCache - https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-freesessioncache-transact-sql?view=sql-server-2017

    DBCC FreeSystemCache - https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-freesystemcache-transact-sql?view=sql-server-2017


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


    • Editado Junior Galvão - MVPMVP, Moderator terça-feira, 13 de agosto de 2019 12:01 Adicionado o exemplo de código para identificar a versão do SQL Server.
    • Marcado como Resposta JorgeChing terça-feira, 13 de agosto de 2019 13:54
    terça-feira, 13 de agosto de 2019 11:28
    Moderador
  • Prezado Jorge,

     Seria interessante entender um pouco melhor do seu problema. O ideal é manter o Sql Server com a memória controlada como esta fazendo . Entendo que talvez você tenha alguma rotina que não seja do Banco que esteja estrangulando a memória e neste momento , você esteja querendo reduzir a memória do BD para liberar para o S.O.


    Jefferson Clyton Pereira da Silva - [MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    Jeferson,

    Foi o que eu entendi, liberar memória e devolver para o Sistema Operacional.


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

    • Marcado como Resposta JorgeChing terça-feira, 13 de agosto de 2019 13:54
    terça-feira, 13 de agosto de 2019 12:37
    Moderador

Todas as Respostas

  • Jorge,

    O Microsoft SQL Server como todo e qualquer SGBD por padrão gosta de consumir e alocar memória, inclusive para ele quanto mais memória melhor será, isso no entendimento dele SQL Server.

    Esta é uma longa e complexa discussão, mas que não existe uma técnica ou mágica que possa ser aplicada para forçar com que o consume de memória seja reduzida ou até mesmo "zerada" como alguns gostam de dizer, pois por padrão ele também vai necessitar manter alguns procedimentos e transações em sua área de buffer controlada pela Buffer Manager para poder sobreviver.

    Neste link: https://www.mssqltips.com/sqlservertip/4714/different-ways-to-flush-or-clear-sql-server-cache/ , de autoria do  Bhavesh Patel, você vai poder encontrar algumas das possibilidades de se liberar o que esta em cache.

    Por outro lado, você também vai encontrar referências ao comando DBCC DropCleanBuffers que poderá nos ajudar a tentarmos forçar a liberação das páginas de dados alocadas na memória RAM, ressalto que precisamos entender o uso e forma de aplicar este comando afim de evitarmos qualquer problema do que estava sendo processado pelo SQL Server.

    Dentre algumas técnicas destacadas no link acima, eu utilizo também os scripts abaixo:

    -- Limpar as entradas de Cache não utilizadas
    DBCC FREESYSTEMCACHE ( 'ALL' )
    
    -- Limpar os Caches de Sessões --
    DBCC FREESESSIONCACHE
    
    -- Eliminar todas as entradas do CACHE de "Procedures"
    DBCC FREEPROCCACHE
    
    -- Eliminar e liberar o Fluxo de processamento de procedure para o banco de dados específico --
    DBCC FLUSHPROCINDB( 5 )
    
    -- Forçar a escrita das páginas em disco "limpando-as"
    CHECKPOINT
    
    -- Eliminar as páginas de buffer limpas
    DBCC DROPCLEANBUFFERS
    Go

    Vou deixar algumas perguntas caso você possa responder para quem sabe analisarmos alguns outros recursos:

    1-Qual é a versão e edição do SQL Server que você esta utilizando?

    2-Você utiliza alguma aplicação do tipo ERP ou Sistemas de Gestão conectados ao seu SQL Server?

    Estas duas perguntas podem nos ajudar a quem sabe fazer uso de recurso como Query Store para tentarmos otimizar o processamento de suas querys, bem como, a análise das chamadas querys ad-hoc, utilizadas por boa partes das aplicações ERP e Sistemas de Gestão que normalmente gostam de utilizar e consumir buffer.

    Outro recurso que pode ser analisado se a sua versão for 2016 ou superior é Alter Database Scoped Configuration, recurso que permite aplicar um conjunto de configurações diretamente na camada de banco de dados ao invês de aplicarmos na camada de servidor.

    O exemplo de Código abaixo vai lhe ajudar a identificar a versões e edição do SQL Server:

    SELECT  SERVERPROPERTY('servername') As "Nome do Servidor",
                SERVERPROPERTY('productversion') As Versão,
                SERVERPROPERTY ('productlevel') As "Service Pack", 
                SERVERPROPERTY ('edition') As Edição,
                @@Version As "Sistema Operacional"

    Vou listar abaixo os demais comandos que podemos aplicar analisando suas funcionalidades para sua necessidade:

    DBCC FreeProcCache - https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-freeproccache-transact-sql?view=sql-server-2017

    DBCC FreeSessionCache - https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-freesessioncache-transact-sql?view=sql-server-2017

    DBCC FreeSystemCache - https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-freesystemcache-transact-sql?view=sql-server-2017


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


    • Editado Junior Galvão - MVPMVP, Moderator terça-feira, 13 de agosto de 2019 12:01 Adicionado o exemplo de código para identificar a versão do SQL Server.
    • Marcado como Resposta JorgeChing terça-feira, 13 de agosto de 2019 13:54
    terça-feira, 13 de agosto de 2019 11:28
    Moderador
  • Deleted
    terça-feira, 13 de agosto de 2019 11:37
  • Bom dia!

    Meu sistema de Banco de dados é o MSSQL2016.

    Utilizo o ERP Protheus TOTVS 64 bits

    Att

    Jorge

    terça-feira, 13 de agosto de 2019 12:26
  • Prezado Jorge,

     Seria interessante entender um pouco melhor do seu problema. O ideal é manter o Sql Server com a memória controlada como esta fazendo . Entendo que talvez você tenha alguma rotina que não seja do Banco que esteja estrangulando a memória e neste momento , você esteja querendo reduzir a memória do BD para liberar para o S.O.


    Jefferson Clyton Pereira da Silva - [MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    terça-feira, 13 de agosto de 2019 12:33
  • Bom dia!

    Meu sistema de Banco de dados é o MSSQL2016.

    Utilizo o ERP Protheus TOTVS 64 bits

    Att

    Jorge

    Jorge,

    Por padrão o Protheus adoro trabalhar com funções do tipo Ad-Hoc e fazer alocação em buffer cache de uma forma um pouco agressiva.

    Mas precisamos analisar bem e tomar cuidado para não provocar sobrecarga ou até contenção de memória.


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

    terça-feira, 13 de agosto de 2019 12:37
    Moderador
  • Prezado Jorge,

     Seria interessante entender um pouco melhor do seu problema. O ideal é manter o Sql Server com a memória controlada como esta fazendo . Entendo que talvez você tenha alguma rotina que não seja do Banco que esteja estrangulando a memória e neste momento , você esteja querendo reduzir a memória do BD para liberar para o S.O.


    Jefferson Clyton Pereira da Silva - [MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    Jeferson,

    Foi o que eu entendi, liberar memória e devolver para o Sistema Operacional.


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

    • Marcado como Resposta JorgeChing terça-feira, 13 de agosto de 2019 13:54
    terça-feira, 13 de agosto de 2019 12:37
    Moderador