none
LDF Grande - Sistema Lento RRS feed

  • Pergunta

  • Boa tarde,

     

    Tenho um cliente no seguinte cenário:

    SQL Server 2008 R2 Express( Ele já está planejando a troca para a versão workgroup ) 

    MDF: 8.5 GB

    LDF: 80.8 GB.

     

    Eu já li os tópicos da redução do tamanho do LDF, mas o que gostaria de saber é quais as possiveis causas do LDF crescer tanto e o que isto pode impactar na performance do banco de dados.

     

     

    • Movido Gustavo Maia Aguiar sexta-feira, 4 de novembro de 2011 13:53 (De:Programação avançada com o SQL Server)
    sábado, 29 de outubro de 2011 15:47

Respostas

  • Kleito,

    Inicialmente o crescimento do log ou um log tão grande para o SQL Server não vai impactar diretamente, mas sim nos recursos que forem fazer uso deste log, como por exemplo os Backups Fulls e Backups de Log.

    Outro detalhe que é bastante lógico um arquivo com este tamanho com certeza esta ocupando um espaço em disco de uma certa forma desnecessária, como também, pode proporcionar perdas de performance no que se diz respeito a gravação dos dados em sua estrutura, pois já com um tamanho considerável.

    Agora existem algumas técnicas que podem ser utilizadas para reduzi ou até mesmo diminuir o arquivo de log, mas que devem ser muito bem definidas e analisadas.

    Gostaria de perguntar, você realmente precisa do arquivo de log?


    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]
    • Marcado como Resposta Kleito sexta-feira, 4 de novembro de 2011 01:43
    sábado, 29 de outubro de 2011 19:10
    Moderador
  • Kleito, se você não precisa do log, altere o modelo de recuperação para Simple. Desta forma o log não crescerá tanto. O modelo de recuperação do seu banco deve estar como Full. Conseuqentemente, toda operação realizada no banco é logada.

    Você pode fazer isso pela interface gráfica ou pela instrução:

    ALTER DATABASE NomeBanco SET RECOVERY SIMPLE;

    Não se esqueça que fazendo isso você elimina a possibilidade de Backup de Log, o que significa que perderá a opção de restaurar uma base num ponto no tempo, isto é, exatamente num determinado momento.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Gustavo Maia Aguiar domingo, 30 de outubro de 2011 03:57
    • Marcado como Resposta Kleito sexta-feira, 4 de novembro de 2011 01:42
    sábado, 29 de outubro de 2011 22:20

Todas as Respostas

  • Kleito,

    Inicialmente o crescimento do log ou um log tão grande para o SQL Server não vai impactar diretamente, mas sim nos recursos que forem fazer uso deste log, como por exemplo os Backups Fulls e Backups de Log.

    Outro detalhe que é bastante lógico um arquivo com este tamanho com certeza esta ocupando um espaço em disco de uma certa forma desnecessária, como também, pode proporcionar perdas de performance no que se diz respeito a gravação dos dados em sua estrutura, pois já com um tamanho considerável.

    Agora existem algumas técnicas que podem ser utilizadas para reduzi ou até mesmo diminuir o arquivo de log, mas que devem ser muito bem definidas e analisadas.

    Gostaria de perguntar, você realmente precisa do arquivo de log?


    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]
    • Marcado como Resposta Kleito sexta-feira, 4 de novembro de 2011 01:43
    sábado, 29 de outubro de 2011 19:10
    Moderador
  • Na verdade não preciso Junior, eu poderia desanexar a base e anexar novamente sem o arquivo de log né?

    Mas o que me preocupa é o motivo deste tamanho, não acho normal o LDF ser 10 vezes maior que o MDF.

    sábado, 29 de outubro de 2011 21:08
  • Kleito, se você não precisa do log, altere o modelo de recuperação para Simple. Desta forma o log não crescerá tanto. O modelo de recuperação do seu banco deve estar como Full. Conseuqentemente, toda operação realizada no banco é logada.

    Você pode fazer isso pela interface gráfica ou pela instrução:

    ALTER DATABASE NomeBanco SET RECOVERY SIMPLE;

    Não se esqueça que fazendo isso você elimina a possibilidade de Backup de Log, o que significa que perderá a opção de restaurar uma base num ponto no tempo, isto é, exatamente num determinado momento.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Gustavo Maia Aguiar domingo, 30 de outubro de 2011 03:57
    • Marcado como Resposta Kleito sexta-feira, 4 de novembro de 2011 01:42
    sábado, 29 de outubro de 2011 22:20
  • Roberson, conforme comentei não tem necessidade, é claro que seria ótimo, mas no atual cenário somos uma fabricante de software e a responsabilidade de backup é do cliente, e é ele quem decide se quer ou não backup de log e além do mais a base é pequena, o backup full é rapidinho.

     

    Mas voltando ao post do Junior, o que você quis dizer com "pode proporcionar perdas de performance no que se diz respeito a gravação dos dados em sua estrutura, pois já com um tamanho considerável."

     


    • Editado Kleito domingo, 30 de outubro de 2011 01:35
    domingo, 30 de outubro de 2011 01:29
  • Kleito vou te explicar como funciona o sql server assim você entenderá o porque do log estar grande.

    Qualquer comando que você dá no sql server é gravado apenas no log e depois ele é transmitido para o mdf em massa através de um processo chamado checkpoint.

    Então vamos supor o seguinte: Você dá 1000 update no seu banco com valores diferentes. No arquivo mdf você possui apenas o valor final, já no log você possui os 1000 comando de tal forma que se você tiver a versão Enterprise você consegue restaurar um backup no tempo. Logo o arquivo de log é sempre maior que o arquivo mdf porque o log tem como objetivo gravar todos os comandos dados aplicados no banco de dados. Agora você deve estar se perguntando, não dá para fixar um tamanho para o log e depois disso ele começar a subescrever? Não. Você precisa realizar um backup do banco de dados e um backup do log. Quando você fizer isso o sql server começa a subescrever o conteúdo do log que foi realizado backup.

    Agora você pode setar o banco com o comando SET RECOVERY SIMPLE porém isso não é boa prática. Vamos supor que você dê um comando update sem o where e o último backup seja do dia anterior. Fato: perda de um dia de trabalho. Vamos supor que você faz backup do mdf e do ldf. Nesta situação você faz um backup do log, carrega para uma maquina que possua a versão developer ou enterprise o backup do dia anterior (backup do banco de do log) e também carrega o ultimo backup do log. Restaura o backup do banco no recovery mode, o backup do log no recovery mode e o ultimo backup do log com um tempo menor do comando update sem o where. Pronto você perdeu muito menos.

    O exemplo é tosco (já que o snapshot faria bem melhor) porém espero que você aprenda o que fazer e porque fazer para que o ldf não cresça.


    Concatenado
    sexta-feira, 4 de novembro de 2011 10:43