AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 49615
Accepted
Jeremy Holovacs
Jeremy Holovacs
Asked: 2013-09-11 08:47:53 +0800 CST2013-09-11 08:47:53 +0800 CST 2013-09-11 08:47:53 +0800 CST

Não é possível reduzir o log de transações [duplicado]

  • 772
Esta pergunta já tem respostas aqui :
Por que o log de transações continua crescendo ou fica sem espaço? (4 respostas)
Fechado há 7 anos .

Um pouco de cabeça aqui.

Eu tenho um banco de dados com menos de 1 GB de dados, mas um arquivo de log de 40 GB. Os logs de transação são copiados diariamente e não há muita atividade neste banco de dados; aproximadamente uma vez por semana, ele registra novas informações de folha de pagamento e, em seguida, regurgita esses dados para fins de relatório. O banco de dados está definido como Encolhimento Automático.

em execução sp_spaceused @updateusage = truefornece as seguintes informações:

database_name   database_size   unallocated space
PayrollImports  39412.06 MB 105.00 MB

reserved    data    index_size  unused
321728 KB   278640 KB   42816 KB    272 KB

a execução DBCC shrinkfile (N'PayrollImports_log', 1 , notruncate)produz o seguinte:

DbId    FileId  CurrentSize MinimumSize UsedPages   EstimatedPages
19  2   4991088 3456    4991088 3456

...a discrepância entre o UsedPagese o EstimatedPagesé confusa, mas continuo DBCC shrinkfile (N'PayrollImports_log', 1 , truncateonly)e obtenho:

DbId    FileId  CurrentSize MinimumSize UsedPages   EstimatedPages
19  2   4991088 3456    4991088 3456

Nada mudou neste ponto. O arquivo de log ainda tem 40 GB. Então eu acho que talvez eu tenha alguma transação em aberto. A execução dbcc opentrandeve verificar:

No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Porcaria. Bem, talvez meus índices estejam fragmentados. Vou desfragmentá-los sp_msForEachTable 'DBCC indexdefrag([PayrollImports], ''?'')'e tentar encolher novamente:

DbId    FileId  CurrentSize MinimumSize UsedPages   EstimatedPages
19  2   4991088 3456    4991088 3456

Ainda nada mudou. Ok, que tal eu reindexar com sp_msForEachTable 'DBCC dbreindex([?])'?

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

...e agora temos:

DbId    FileId  CurrentSize MinimumSize UsedPages   EstimatedPages
19  2   4991088 3456    4991088 3456

nenhuma mudança. Tudo bem, que tal sp_msForEachTable 'ALTER INDEX ALL ON [PayrollImports].[?] REBUILD WITH (FILLFACTOR = 10)'?

Imediatamente, isso falha com:

Cannot find the object "(One of my tables)" because it does not exist or you do not have permissions.

Huh? Está lá, tudo bem. Eu faço um select top 10 * from (My table)e sai vazio. Bem, isso não está certo. Esta é uma tabela de pesquisa que deve ter mais de 200 linhas. Isso é um problema de corrupção de dados, talvez? Coleto os dados do meu ambiente de desenvolvimento e os insiro novamente.

Mas estou sem ideias. Eu não posso encolher esta coisa. O que mais posso tentar? Por que minhas UsedPages são incrivelmente mais altas que minhas EstimatedPages? O que está acontecendo aqui?

sql-server sql-server-2005
  • 1 1 respostas
  • 1785 Views

1 respostas

  • Voted
  1. Best Answer
    Mike Fal
    2013-09-11T09:09:05+08:002013-09-11T09:09:05+08:00

    Verifique sua saída DBCC LOGINFOdentro do contexto de seu banco de dados. Isso mostrará o status de todos os VLFs no arquivo de log. Sua operação de redução não reduzirá o arquivo de log além do último ativo (Status=2). Como os VLFs são usados ​​de forma seqüencial, round-robin, você precisará executar backups de log de transações o suficiente até que seus VLFs ativos estejam no ponto físico no arquivo que você deseja reduzir.

    Embora você afirme que o banco de dados não está muito ativo, os backups de log de transações uma vez por dia parecem muito pouco frequentes e, dependendo do tipo de transações executadas nesse banco de dados, podem estar contribuindo para o crescimento contínuo desse banco de dados. Eu recomendaria executar seus backups de log pelo menos a cada hora. Se você não precisa desse tipo de recuperação em seu banco de dados e só precisa restaurar para algum momento nas últimas 24 horas, sugiro que você converta o banco de dados para o SIMPLEmodo e faça um backup completo uma vez por dia.

    Mike Walsh fornece uma explicação detalhada aqui .

    Sua reindexação fará muito pouco para reduzir ou permitir que o arquivo diminua e, de fato, pode prejudicá-lo. Isso ocorre porque a reindexação criará transações adicionais em seu log que ficarão ativas até que você execute um backup de log.

    Além disso, algumas recomendações de práticas recomendadas:

    • Desligue o encolhimento automático . Esta é uma prática incrivelmente ruim por uma série de razões . Você provavelmente está criando mais problemas para si mesmo ao habilitar esse "recurso".
    • Nunca use . _ truncate_onlyIsso basicamente torna seu log inútil para fins de recuperação. Você também pode usar o SIMPLEmodo e backups completos neste momento.
    • 5

relate perguntas

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve