Ajuda! O arquivo de log do banco de dados 'tempdb' está cheio. Fazer backup do log de transações do banco de dados para liberar algum espaço de log

7

Estamos executando o SQL Server 2000. Em nosso banco de dados, temos uma tabela "Pedidos" com aproximadamente 750.000 linhas. Podemos executar instruções SELECT simples nesta tabela. No entanto, quando queremos executar uma consulta como SELECT TOP 100 * FROM Orders ORDER BY Date_Ordered DESC, recebemos a seguinte mensagem:

Error: 9002, Severity: 17, State: 6 The log file for database 'tempdb' is full. Back up the transaction log for the database to free up some log space.

Temos outras tabelas em nosso banco de dados que são semelhantes em tamanho da quantidade de registros que estão nas tabelas (ou seja, 700.000 registros). Nessas tabelas, podemos executar quaisquer consultas que gostaríamos e nunca recebemos uma mensagem sobre o 'tempdb estar cheio'.

Para resolver isso, fizemos backup do nosso banco de dados, encolheu o banco de dados real e também reduziu o banco de dados e os arquivos no banco de dados do sistema tempdb, mas isso não resolveu o problema.

O tamanho do nosso arquivo de log está definido para crescimento automático.

Não sabemos ao certo para onde ir em seguida. Há alguma ideia de por que ainda podemos estar recebendo esta mensagem?

Error: 9002, Severity: 17, State: 6 The log file for database 'tempdb' is full. Back up the transaction log for the database to free up some log space.

    
por michael.lukatchik 16.04.2010 / 23:27

4 respostas

6

De acordo com artigo , o banco de dados temporário é usado se a classificação exigir mais memória do que o SQL Server alocou.

Se você classificar por uma coluna que não esteja indexada, o servidor de banco de dados executará uma varredura completa da tabela e rastreará todos os valores de Date_Ordered (e valores de chave primária) de todos os registros da tabela.

Crie um INDEX em Orders.Date_Ordered para acelerar a classificação e reduzir o uso de memória.

    
por 16.04.2010 / 23:36
1

Além do conselho de devio, considere:

  • Você realmente precisa fazer o SELECT *, se precisar apenas de algumas colunas, soletre-as; se as ordens são uma tabela muito ampla, isso aumenta a sobrecarga do tipo; se houver campos de texto / blobs, eles serão arrastados para o passeio.
  • Você pode adicionar uma seleção de data, como WHERE Date_Ordered > getdate () -1; mesmo se você obtiver mais registros do que o necessário, toda a tabela não precisará ser copiada para o Tempdb; você poderia fazer algo como

    SELECIONE O TOP 100 * de (selecione * de pedidos em que date_ordered > getdate () - 10) order por date_ordered desc

  • Mas adicionar um índice em date_ordered é, de longe, sua melhor solução.

por 17.04.2010 / 14:48
1

OK, então primeiro problema, você precisa de mais RAM no seu SQL Server. Quanta memória RAM está instalada na máquina.

Depois disso, você precisa aumentar o tamanho do disco rígido que hospeda o banco de dados tempdb. Este banco de dados é usado para todos os tipos de coisas, e você precisa estar totalmente funcional para que o SQL Server inteiro funcione corretamente.

A curto prazo, reinicie o SQL Service, que eliminará o banco de dados tempdb e o recriará no tamanho inicial. A longo prazo, você precisará aumentar o tamanho dos discos rígidos para que o tempdb possa atingir o tamanho necessário.

    
por 18.04.2010 / 09:44
0

você tem espaço suficiente no seu disco que contém arquivos tempdb.

tente executar a mesma consulta sem ordenar por cláusula e veja se o erro desaparece.

    
por 20.04.2010 / 12:34

Tags