Meu templog.ldf é enorme (45 gb). E se eu fizer alguma coisa?

8

Eu tenho uma instalação do SQL 2005 e meu arquivo templog.ldf continua crescendo para consumir todo o espaço livre na unidade em que está. Às vezes, ele pára com alguns mb livres, mas às vezes vai além, sendo esta a unidade c, acho que esse comportamento pode estar implicado em outros problemas que venho vendo.

Minha pergunta é: o que devo fazer, posso mover o log para outra unidade, mas tenho motivos para supor que ele não fará a mesma coisa lá. Estou assumindo que esse comportamento provavelmente é o resultado de algo que eu possa alterar e que 45 GB é um tamanho incomum para o log tempdb. Usamos muitas tabelas temporárias e funções com valor de tabela em nosso código, para que haja muito escopo para usar o tempdb, posso entender o crescimento do banco de dados tempdb, mas não entendo o motivo do crescimento do templog.

Até agora, executei o DBCC OPENTRAN ('tempdb') para ver se existem transações antigas por aí, elas não estão. Eu li sobre como reduzir o tempdb e fiz isso algumas vezes, mas estou realmente imaginando o que fazer para impedir que isso aconteça em primeiro lugar ou mais detalhes sobre por que ele pode estar crescendo tanto. o primeiro lugar.

== EDITS ==

1) O tempdb está usando o modelo de recuperação simples

2) O crescimento do templog ocorre algumas horas da manhã, quando temos algumas consultas agendadas em execução, basicamente uma carga de relatórios que ficam fora do horário comercial para o dia seguinte. O tamanho do arquivo aumenta constantemente nesse período. Controlamos quantos relatórios simultâneos estão sendo executados ao mesmo tempo. Aumentar o número de relatórios simultâneos aumenta a taxa na qual o log cresce.

Robin
fonte
Você deve examinar (e postar?) O SQL para esses relatórios.
RBarryYoung 2/09/09

Respostas:

3

Verifique suas consultas de relatórios. Você tem algum que tenha DISTINCT neles? Algum deles tem junções cartesianas?

Alguma das consultas de relatório acessa servidores vinculados como membros de uma associação? Nesse caso, isso pode causar o crescimento do log e banco de dados tempdb.

Quando os relatórios estão sendo publicados pela manhã, algum deles falha?

Mrdenny
fonte
Estamos analisando mais detalhadamente agora, publicarei os resultados quando tiver algo conclusivo. Atualmente, parece que um relatório falha, mas não libera sua conexão. Acho que outros estão passando, mas fazendo com que o log se expanda devido à transação incompleta anterior.
Robin
Obrigado pela resposta. Meu problema está definitivamente relacionado a um relatório de falha agora. Limitei o tamanho em que o templog pode crescer. Vi o crescimento descontrolado em conjunto com um relatório com falha que não cometeu uma transação. Não tenho certeza se há algo particularmente ruim no relatório sql, pois eles foram bem executados no SQL Server 2000, mas vou investigar o que eles estão fazendo.
Robin
4

Tivemos um problema semelhante, depois de termos levantado a chamada do PSS com a Microsoft e uma investigação aprofundada do problema, zonamos para a seguinte causa e resolução possível.

Causa:

A causa provável dos sintomas deve-se a discos / lun nos quais os bancos de dados de usuários são colocados com problemas graves de resposta de E / S; isso faz com que o ponto de verificação automático nos bancos de dados do usuário demore muito para terminar.

Agora, o ponto de verificação no tempdb ocorre apenas quando o log do tempdb fica 70% cheio e também tem uma prioridade mais baixa que os pontos de verificação do banco de dados do usuário. Portanto, efetivamente quando o ponto de verificação automático nos bancos de dados do usuário é emitido e está tentando concluir, devido ao uso intenso do tempdb, o arquivo de log tempdb é preenchido rapidamente; com 70% de uso do log, o ponto de verificação tempdb ocorre, mas fica na fila atrás do ponto de verificação do banco de dados do usuário.

No tempo em que o ponto de verificação do banco de dados do usuário leva para concluir, o arquivo de log tempdb continua sendo preenchido e, se o crescimento automático estiver definido, o arquivo de log aumenta quando requer mais espaço. Esse é o motivo pelo qual o arquivo de log continua crescendo.

Em resumo, a causa raiz mais possível para os sintomas que você descreve deve-se à fraca resposta de E / S dos discos / lun para o usuário e / ou arquivos de banco de dados / log tempdb.

Solução:

Resolvemos o problema enquanto resolvíamos o subsistema de E / S configurando um alerta que disparava quando o arquivo de log tempdb fica 75% cheio e, em resposta, executamos um trabalho que forçou um "CHECKPOINT" manual (que tem precedência sobre o sistema automático pontos de verificação), limpando o log tempdb, impedindo que ele cresça automaticamente indefinidamente. Ainda é uma boa idéia deixar o arquivo de log no crescimento automático para qualquer outra eventualidade. Além disso, eu recomendo fortemente que você considere reduzir o tamanho do arquivo de log tempdb para algo significativo conforme o seu ambiente após a correção.

Espero que isto ajude.

Chirag
fonte
Essa foi a solução em uma instância do SQL 2000 mal configurada que herdei onde todos os dados e arquivos de log estavam em um único disco. Não podemos adicionar armazenamento, então eu dimensionei o arquivo com base no uso e tenho um trabalho que executa um ponto de verificação a cada 30 minutos.
Your_comment_is_not_funny
1

Como o Modelo de Recuperação está definido no temp db? Se não estiver definido como Simples, defina-o como Simples. Isso deve impedir que ela cresça. Se já estiver definido como Simples, diria que há um problema subjacente que precisa ser resolvido e qualquer tentativa de reduzir o arquivo está apenas tratando os sintomas do problema e não a causa raiz.

joeqwerty
fonte
sim, está definido para uma recuperação simples, eu estava apenas checando isso quando escrevi o post e esqueci de incluí-lo no texto acima.
Robin
Acabei de verificar nossos arquivos templog.ldf e eles têm cerca de 60 MB. Temos um arquivo tempdb para cada processador no servidor. Você já tentou criar arquivos adicionais para o tempdb? A recomendação é ter um arquivo para cada processador (incluindo os processadores hyperhtreading). Nosso servidor possui duas CPUs dual core com hyperthreading, por isso temos 8 arquivos tempdb.
joeqwerty
Essa é a recomendação para o SQL Server 2000. a recomendação para 2005 é consideravelmente menor que isso. De qualquer forma, não afeta o espaço total depois que você ultrapassa o tamanho padrão.
RBarryYoung # 2/09/09
É outro caso de informação contraditória. Este artigo para SQL 2005 recomenda uma proporção de um para um de arquivos para núcleos de CPU: msdn.microsoft.com/en-us/library/ms175527(SQL.90).aspx Embora este artigo para o SQL 2008 recomende a mesma coisa: msdn. microsoft.com/en-us/library/ms175527.aspx
joeqwerty 2/09/09
Minha suposição era que, se houvesse vários arquivos templog, eles não chegariam a um tamanho tão grande.
joeqwerty
1

Passei as últimas horas lendo e fazendo anotações sobre isso

http://technet.microsoft.com/en-gb/library/cc966545.aspx

Há muitos detalhes e sugestões para solucionar problemas. Parece que, a menos que o tempdb esteja em expansão e nunca pare de crescer, provavelmente está ocupando a quantidade de espaço necessária e deveria ter sido configurado para ter esse tamanho inicialmente. Há uma seção sobre a estimativa do espaço necessário para o seu tempdb, além de rastrear o que pode estar ocupando espaço no tempdb. Como resultado disso, a primeira coisa que vou fazer é mover o tempdb para uma unidade maior e ver o que acontece a partir daí.

Há uma seção intitulada 'Espaço necessário para o log tempdb' que indica quais recursos usam o log; há outra seção anterior que detalha o superconjunto de recursos que usam tempdb.

A seção intitulada 'Monitorando E / S' tem algumas idéias sobre os contadores de desempenho a serem observados; uma rápida olhada no meu servidor as coloca no território que você provavelmente tem um gargalo de io. Vou monitorá-los por um tempo e ver como as coisas se desenrolam. O arquivo de log tempdb também estava na verdade com menos de 50% de utilização, o que se encaixa na idéia de que ele foi expandido sob carga nesta manhã e manteve esse espaço desde então.

Vou adiante com base em que o tamanho para o qual cresceu é o tamanho que precisa ser, monitore esse tamanho no futuro e verifique se há espaço para crescimento em qualquer unidade em que esteja. Conforme sugerido por alguns aqui, examinarei o que está sendo executado à medida que o log temporário se expande e ver se algo pode ser ajustado lá. Também ficarei de olho nesses contadores de desempenho io para ver se algo precisa ser resolvido.

Havia mais uma seção interessante adicional intitulada 'Atualizando para o SQL Server 2005', que indica que o tempdb é usado para mais coisas em 2005 que 2000 (ambos os novos recursos e os existentes que anteriormente não usavam o tempdb). Eu atualizei apenas recentemente para 2005, e isso pode ser parte do motivo de isso se tornar um problema repentino. Não me lembro de ter visto isso em nenhum outro lugar com referência à atualização para 2005, o que é um pouco trabalhoso.

Robin
fonte
0

Provavelmente, isso é causado por uma consulta de junção cruzada fora de controle. Sua melhor aposta é usar o Profiler para encontrá-lo e corrigi-lo.

A outra maneira de encontrá-lo é restringir o tamanho do arquivo de log TempDB e aguardar para ver qual falha da consulta. No entanto, aposto que está falhando e ninguém está lhe dizendo.

RBarryYoung
fonte
0

Se você reiniciar o mecanismo SQL, o arquivo será definido para o tamanho inicial. Você deve colocar um tamanho máximo em todos os seus arquivos de crescimento automático.


fonte
0

Algumas consultas SQL ou procedimentos armazenados estão fazendo coisas ruins - a única coisa que você pode fazer é criar um perfil do tempdb para capturar o evento "Banco de dados: crescimento automático do arquivo de log" e, quando isso acontecer, use o criador de perfil e consultas em tabelas como sysprocesses para encontrar descobrir qual é o mau processo.

Infelizmente, cabe ao trabalho de detetive antiquado rastrear o processo desonesto.

Você tentou redimensionar os arquivos de log tempdb com DBCC SHRINKFILE ()? Em caso afirmativo, quanto tempo leva para chegar de [valor muito pequeno] a 45 GB ou mais?

Chris J
fonte
Consulte a edição 2 acima para obter detalhes sobre a rapidez com que o arquivo cresce. Observe que isso se baseia em uma reinicialização após o horário comercial, antes do dia seguinte e nos relatórios agendados mencionados. O fato de crescer gradualmente ao longo de algumas horas sugere para mim que não é um processo que se comporta mal, mas uma combinação de toda a carga simultânea. Possivelmente, o tamanho para o qual cresce é exatamente o tamanho necessário.
Robin