none
Banco SQL caindo por falta erro de memoria RRS feed

  • Dotaz

  • Tenho um banco SQL que roda ja faz uns 18 meses, porem nos ultimos 3 dias esta caindo constantemente, do nada percebo que ocorreu uma alteração na memoria do banco do valor que setei (Ex. 5Gb) para o minimo de 128Mb, isso faz com que o banco nao suba mais, ai tenho que fazer uma serie de coisas para conseguir levantar novamente.

    Nao consigo descobrir o que faz essa mudança, da ultima vez que subiu rodou 12 horas e caiu sempre com o mesmo erro.

    Vou colocar aqui os ultimos eventos do windows.

    LOGS DE EVENTOS DO WINDOWS...
    Erro: 18057, Gravidade: 20, Estado: 3. (Params:). O erro foi impresso em modo conciso devido a um erro durante a formatação. Rastreamento, ETW, notificações, etc., foram ignorados.

    A opção de configuração 'show advanced options' foi alterada de 1 para 0. Execute a instrução RECONFIGURE para instalar.

    O SQL Server encontrou 1 ocorrência(s) de liberação de armazenamento em cache para o cache 'Bound Trees' (parte do cache de planos) devido à manutenção do banco de dados ou operações de reconfiguração.

    O SQL Server encontrou 1 ocorrência(s) de liberação de armazenamento em cache para o cache 'SQL Plans' (parte do cache de planos) devido à manutenção do banco de dados ou operações de reconfiguração.

    A opção de configuração 'max server memory (MB)' foi alterada de 5000 para 128. Execute a instrução RECONFIGURE para instalar.

    A opção de configuração 'show advanced options' foi alterada de 0 para 1. Execute a instrução RECONFIGURE para instalar.

    Falha de logon do usuário 'DBATAK'. Motivo: falha ao abrir o banco de dados explicitamente especificado 'SATKFRIGOSUINO'. [CLIENT: 192.168.10.150]

    O serviço de Proteção de Software concluiu a verificação do status do licenciamento.
    ID do Aplicativo=0ff1ce15-a989-479d-af46-f275c6370663
    Status do Licenciamento=
    1: d450596f-894d-49e0-966a-fd39ed4c4c64, 1, 1 [(0 [0x00000000, 1, 0], [(?)( 1 0x00000000)(?)( 2 0x00000000 0 0 msft:rm/algorithm/volume/1.0 0x00000000 141112)(?)(?)(?)(?)])(1 )(2 )]

    Falha de logon do usuário 'IONALDO'. Motivo: falha ao abrir o banco de dados explicitamente especificado 'SATKFRIGOSUINO'. [CLIENT: 192.168.10.202]

    Falha de logon do usuário 'DBATAK'. Motivo: falha ao abrir o banco de dados 'SATKFRIGOSUINO' especificado nas propriedades de logon. [CLIENT: 192.168.10.150]

    Falha de logon. O logon é de um domínio não confiável e não pode ser usado com a autenticação do Windows. [CLIENT: fe80::fc6b:63c6:83c1:8f3%13]

    Falha no handshake SSPI com código de erro 0x8009030c, estado 14 ao estabelecer conexão com segurança integrada; a conexão foi fechada. Motivo: Falha de AcceptSecurityContext. O código de erro do sistema operacional indica a causa da falha. Falha na tentativa de logon   [CLIENT: fe80::fc6b:63c6:83c1:8f3%13]

    čtvrtek 22. srpna 2019 19:12

Odpovědi

  • Bom dia Wellington,

    Quando você diz "do nada percebo que ocorreu uma alteração na memoria do banco do valor que setei (Ex. 5Gb) para o minimo de 128Mb, isso faz com que o banco não suba mais, ai tenho que fazer uma serie de coisas para conseguir levantar novamente." é depois do banco cair e antes de você tentar reiniciá-lo?

    Se sim, quando você diz que faz uma série de coisas para conseguir levantar novamente, você está usando o parâmetro -f na inicialização?

    Estou perguntando porque esse parâmetro faz o SQL Server subir com a configuração mínima e condiz com os 128 Mb de memória que você reportou.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */


    úterý 27. srpna 2019 15:21
  • Mari,

    Certo, certo, isso é comportamento das Ad-hoc Queries, ainda mais que por padrão o SQL Server sempre que recebe uma ad-hoc querie mesmo sendo uma já alocada em cache e processada ele por padrão aloca novamente.

    Em junho deste ano tive um cenário similar ao seu, no qual a empresa utilizava um ERP (nome destacar o nome, para evitar problemas), mas o mesmo envia diversas ad-hoc queries e dentre elas sempre tinhamos as Select * from ..... e ai já viu, isso virava uma loucura, pois bem, reconfiguramos o uso de memória, recovery model e também alteramos as configurações do SQL Server para destacar qualquer armazenamento de plan cache para a mesma query ad-hoc, passado alguns dias o ambiente ficou totalmente estável.


    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]

    středa 28. srpna 2019 14:14
    Moderátor

Všechny reakce

  • Qual a capacidade RAM deste servidor?

    Ele é dedicado ao banco de dados ou concorre com mais aplicações?

    Se for dedicado apenas ao SQL, o Max Server Memory pode ser configurado como algo entre 70-90% da capacidade RAM, dependendo do cenário.

    čtvrtek 22. srpna 2019 19:52
  • Informe também a versão do SQL.

    Att

    čtvrtek 22. srpna 2019 20:07
  • S.O. Rodando em Windows server 2012 R2

    SQL Server 17 (em período de avaliação).

    Ative auditoria do SQL mais la nao sei qual parâmetro para pegar esse tipo de mudança de memoria. E no event Viwer do Windows so pega esses que ja postei aqui, nao diz quem ou de onde gerou a alteração na configuração do banco.

    čtvrtek 22. srpna 2019 20:40
  • Olá amigo,

    Você pode configurar uma auditoria a nivel de servidor para tentar descobrir quem esta executando esta alteração. Mas, você não informou a quantidade de memória do servidor. 

    Configure o mínimo do Banco para um valor alto também para garantir uma boa memória.


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

    čtvrtek 22. srpna 2019 21:59
  • Wellington,

    Vamos lá, como você mesmo pode observar lendo o event viewer, o SQL Server registrou um erro de severidade de número 20, o que representa que em um determinado processamento, transação ou até mesmo tarefa interna processada por ele, foi identificada uma falha que não necessariamente representa que o banco de dados que estava fazendo uso desta transação ou tarefa tenha sido danificado.

    Precisamos tentar identificar naquele momento qual era a transação que estava sendo processada.

    Perguntas:

    1 - Neste momento seu servidor SQL Server esta em execução?

    2 - Os bancos de dados estão sendo listados e apresentados em tela sem nenhum alerta ou rótulo aplicado ao seu nome?

    No link a seguir você  vai pode encontrar maiores informações sobre os severity levels, seus respectivos números e descrições: https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-error-severities?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]


    pátek 23. srpna 2019 11:19
    Moderátor
  • Bom dia.

    Não dá para aumentar a memória para o sql server?

    -- 1GB por exemplo
    sp_configure 'max server memory (MB)', 1024
    go
    reconfigure with override
    go


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)


    pátek 23. srpna 2019 13:25
  • Tenho um banco SQL que roda ja faz uns 18 meses, (...)
    SQL Server 17 (em período de avaliação).

    Quando você cita "SQL Server 17 (em período de avaliação)", por acaso se refere à edição Enterprise Evaluation do SQL Server 2017? Se for, ela tem limite de utilização de 180 dias, que são 6 meses, bem menos do que 18 meses.

    ---

    Sobre "tenho que fazer uma serie de coisas para conseguir levantar novamente", que procedimentos seriam? Iniciar o servidor com a opção de inicialização -f não resolveu? Acho que bastaria após alterar o valor de 'max server memory (MB)' para 5120. 

    No artigo "MAX SERVER MEMORY < MINIMO" você encontra o passo a passo de outro método para resolver o mesmo problema.

    ---

    A respeito do valor de 'min server memory (MB)', o SQL Server não aloca de imediato o valor dessa opção, no momento da inicialização. Mas garante que, uma vez atingido esse valor, a memória alocada se manterá no mínimo nesse valor, mesmo que não necessite. Qual é o valor que está definido para essa opção?

    ---

    O SQL Server roda em uma máquina virtual (MV)?

    Quanto de memória possui o computador (ou a MV)?

    Há somente o sistema operacional e o SQL Server nesse computador?

    Somente uma ou várias instâncias instaladas?

    ---

    Sugestão de leitura:

    ---

    Coincidência ou não, há poucas semanas apareceu alguém aqui no fórum perguntando se "Há possibilidade de rodar uma rotina todos os dias em um determinado horário para baixar o consumo da memória estabelecida como limite? (...) - 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". Será que ele trabalha aí com você?    :D

     


    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
    • Upravený José Diz pátek 23. srpna 2019 17:23
    • Navržen jako odpověď José Diz středa 28. srpna 2019 13:22
    pátek 23. srpna 2019 14:56
  • Ola senhores, obrigado pelas respostas...

    Estou monitorando o banco, e nao caiu ate o momento, porem nao identifiquei a causa ainda, mais ativei quase todas as auditorias do SQL, pois mesmo assim, quando esta ativada e eu vou la e altero a memoria do banco ele so registra um ALTER, entao terei que pegar por base isso mesmo, quando cair eu vou la e filtro o ALTER que tiver e olho os logs anteriores a isso, e tento identificar de onde veio a alteração de memoria.

    Sobre a maquina:

    Ela esta rodando em uma maquina física mesmo, nao e VM.

    neste momento esta tudo ok, funcionando corretamente, sem logs de erros, e utilizando 5gb de memoria, sendo que a maquina tem 8 no total.

    Utilizo somente esta instancia na maquina, nao roda nada mais alem do SQL nesta maquina.

    pondělí 26. srpna 2019 19:44
  • Olá Wellington , 

    Você consegue olhar o eventviewer? Veja também o log do Sql server.

    Este comportamento eu realmente nunca havia visto. 

    Defina um valor de mínimo para a memória da Instancia também para evitar que desça além do mínimo e impacte o ambiente.

    No link: configurar opção de memória do Sql Server Você consegue ver como alterar os valores.

    USE AdventureWorks2012 ;  
    GO  
    EXEC sp_configure 'show advanced options', 1;  
    GO  
    RECONFIGURE ;  
    GO  
    EXEC sp_configure 'min memory per query', 3500 ;  
    GO  
    RECONFIGURE;  
    GO

    Nos mantenha informados se possível.


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

    úterý 27. srpna 2019 0:14
  • Tenho um banco SQL que roda ja faz uns 18 meses, (...)
    SQL Server 17 (em período de avaliação).

    Quando você cita "SQL Server 17 (em período de avaliação)", por acaso se refere à edição Enterprise Evaluation do SQL Server 2017? Se for, ela tem limite de utilização de 180 dias, que são 6 meses, bem menos do que 18 meses.

    ---

    Sobre "tenho que fazer uma serie de coisas para conseguir levantar novamente", que procedimentos seriam? Iniciar o servidor com a opção de inicialização -f não resolveu? Acho que bastaria após alterar o valor de 'max server memory (MB)' para 5120. 

    No artigo "MAX SERVER MEMORY < MINIMO" você encontra o passo a passo de outro método para resolver o mesmo problema.

    ---

    A respeito do valor de 'min server memory (MB)', o SQL Server não aloca de imediato o valor dessa opção, no momento da inicialização. Mas garante que, uma vez atingido esse valor, a memória alocada se manterá no mínimo nesse valor, mesmo que não necessite. Qual é o valor que está definido para essa opção?

    ---

    O SQL Server roda em uma máquina virtual (MV)?

    Quanto de memória possui o computador (ou a MV)?

    Há somente o sistema operacional e o SQL Server nesse computador?

    Somente uma ou várias instâncias instaladas?

    ---

    Sugestão de leitura:

    ---

    Coincidência ou não, há poucas semanas apareceu alguém aqui no fórum perguntando se "Há possibilidade de rodar uma rotina todos os dias em um determinado horário para baixar o consumo da memória estabelecida como limite? (...) - 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". Será que ele trabalha aí com você?    :D

     


    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    José,

    Bem lembrado.....


    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ý 27. srpna 2019 13:03
    Moderátor
  • Bom dia Wellington,

    Quando você diz "do nada percebo que ocorreu uma alteração na memoria do banco do valor que setei (Ex. 5Gb) para o minimo de 128Mb, isso faz com que o banco não suba mais, ai tenho que fazer uma serie de coisas para conseguir levantar novamente." é depois do banco cair e antes de você tentar reiniciá-lo?

    Se sim, quando você diz que faz uma série de coisas para conseguir levantar novamente, você está usando o parâmetro -f na inicialização?

    Estou perguntando porque esse parâmetro faz o SQL Server subir com a configuração mínima e condiz com os 128 Mb de memória que você reportou.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */


    úterý 27. srpna 2019 15:21
  • Mariana Dell, faz sentido, o que diz, pois quando so consigo subir ele com este paramento -f, e quando cheguei no cliente peguei o banco fora do ar, e fui olhar os logs do windows, e vi isso la, então pode ser que alguém tentou levantar ele com esse paramento antes da minha chegada, e por isso vi esses logs la.

    vou investigar isso a fundo...

    úterý 27. srpna 2019 21:30
  • Ah! Legal!

    Então pelo menos você pode tirar isso da frente da investigação e focar no que derrubou esse banco.


    Fico feliz em ter ajudado.

    Boa sorte aí.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    středa 28. srpna 2019 12:40
  • Ah! Legal!

    Então pelo menos você pode tirar isso da frente da investigação e focar no que derrubou esse banco.


    Fico feliz em ter ajudado.

    Boa sorte aí.

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    Mariana,

    Matou a pau desta vez, show de bola, fazia tempo que não te encontravamos por aqui.

    Agora que me deixa integrado é justamente alguém alterar os parâmetros de inicialização, como forma de tentar investigar esta possível queda do banco de dados, acredito que o mais indicado para este de cenário é fazer uso do parâmetro -m para ativar o acesso Single-User Mode.

    Parece-me que a possível falha ou queda foi meio que provocada por algum procedimento realizado sem conhecimento.



    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]


    středa 28. srpna 2019 13:35
    Moderátor
  • Mariana Dell, faz sentido, o que diz, pois quando so consigo subir ele com este paramento -f, e quando cheguei no cliente peguei o banco fora do ar, e fui olhar os logs do windows, e vi isso la, então pode ser que alguém tentou levantar ele com esse paramento antes da minha chegada, e por isso vi esses logs la.

    vou investigar isso a fundo...

    Wellington,

    Pegando o gancho da Mari, neste link da documentação oficial Microsoft, você vai poder encontrar maiores informações sobre todos os parâmetros existentes no Microsoft SQL Server utilizados durante inicialização:

    https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/database-engine-service-startup-options?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]

    středa 28. srpna 2019 13:37
    Moderátor
  • Olá Junior!

    Para o Wellington descobrir o que causou a queda do serviço, agora que ele está estável, vai ser complicado, mas pelo menos dá pra virar a investigação pra isso e não mais para a alteração da memória.

    O uso de parâmetros como o -f as vezes vem do desespero rsrs. Falo isso porque já fiz coisa semelhante quando uma instância minha não subia.


    Wellington, 
    Quanto ao fato da sua instância cair, do nada, o que posso falar como experiência é que uma vez tive uma máquina (física) que atingia 100% de CPU por causa de péssimos planos de execução e o SQL simplesmente desligava.

    Tivemos que monitorar a causa desse 100% de CPU para resolver e o serviço não caiu mais.
    Sugiro que faça um diagnóstico geral da sua instância.

    Dê uma olhada nos contadores de performance, como está o seu plan cache, como está o comportamento geral.

    Talvez você descubra a causa aí.


    []'s

    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    středa 28. srpna 2019 13:40
  • (...) e quando cheguei no cliente peguei o banco fora do ar, e fui olhar os logs do windows, e vi isso la, então pode ser que alguém tentou levantar ele com esse paramento antes da minha chegada,

    Wellington, quando o serviço SQL Server é iniciado com a opção -f fica a seguinte mensagem no arquivo de log:

    Warning: The server instance was started using minimal configuration startup option (-f). Starting an instance of SQL Server with minimal configuration places the server in single-user mode automatically. After the server has been started with minimal configuration, you should change the appropriate server option value or values, stop, and then restart the server.

    Ou seja, procure por essa mensagem no log para saber se em algum momento o serviço SQL Server foi (ou não) iniciado com a opção -f.

     

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    středa 28. srpna 2019 13:56
  • Olá Junior!

    Para o Wellington descobrir o que causou a queda do serviço, agora que ele está estável, vai ser complicado, mas pelo menos dá pra virar a investigação pra isso e não mais para a alteração da memória.

    O uso de parâmetros como o -f as vezes vem do desespero rsrs. Falo isso porque já fiz coisa semelhante quando uma instância minha não subia.


    Wellington, 
    Quanto ao fato da sua instância cair, do nada, o que posso falar como experiência é que uma vez tive uma máquina (física) que atingia 100% de CPU por causa de péssimos planos de execução e o SQL simplesmente desligava.

    Tivemos que monitorar a causa desse 100% de CPU para resolver e o serviço não caiu mais.
    Sugiro que faça um diagnóstico geral da sua instância.

    Dê uma olhada nos contadores de performance, como está o seu plan cache, como está o comportamento geral.

    Talvez você descubra a causa aí.


    []'s

    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    Mari,

    Ok, também vejo desta forma o uso do -f como uma última alternativa, eu não peguei algo neste sentido, mas recentemente tive um problema no qual o log do banco de dados master havia ido para o espaço.

    Em relação ao cenário do SQL Server atinguir 100% dos recursos da máquina devido a um plano de execução mal elaborado sinceramente falando não me lembro de ter se deparado com isso recentemente, cheguei a presenciar alocações altas de memória e um consumindo que passava da quantidade máxima configurada, mas não chegava a utilizar tudo.

    Como eu sempre digo, vivendo, aprendendo e compartilhando conhecimento.


    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]

    středa 28. srpna 2019 14:03
    Moderátor
  • Junior, nesse caso que citei, resumindo era: a aplicação mandava milhares de queries num curto período de tempo.

    Queries simples, porém como era utilizado um framework de desenvolvimento próprio, mesmo que a query fosse igual, cada vez a tabela vinha com um alias.
    Isso fez o SQL ser perder de um jeito que a CPU subia por causa de recompilação/compilação de plano de execução.

    O Plan cache tava inchado. Não tinha um plano que conseguia ser reaproveitado.
    Quando mexeram na aplicação e fizeram parar esses alias dinâmicos, a mesma máquina que colava 100% começou a trabalhar em 30%.


    Sim sim. Compartilhar conhecimento é sempre muito bom.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    středa 28. srpna 2019 14:06
  • Mari,

    Certo, certo, isso é comportamento das Ad-hoc Queries, ainda mais que por padrão o SQL Server sempre que recebe uma ad-hoc querie mesmo sendo uma já alocada em cache e processada ele por padrão aloca novamente.

    Em junho deste ano tive um cenário similar ao seu, no qual a empresa utilizava um ERP (nome destacar o nome, para evitar problemas), mas o mesmo envia diversas ad-hoc queries e dentre elas sempre tinhamos as Select * from ..... e ai já viu, isso virava uma loucura, pois bem, reconfiguramos o uso de memória, recovery model e também alteramos as configurações do SQL Server para destacar qualquer armazenamento de plan cache para a mesma query ad-hoc, passado alguns dias o ambiente ficou totalmente estável.


    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]

    středa 28. srpna 2019 14:14
    Moderátor
  • Obrigado a todos e Esta funcionado corretamente agora...

    Abraços Amigos...

    čtvrtek 5. září 2019 21:53