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 / 181918
Accepted
crichavin
crichavin
Asked: 2017-07-27 21:08:01 +0800 CST2017-07-27 21:08:01 +0800 CST 2017-07-27 21:08:01 +0800 CST

Conselhos sobre como excluir todas as linhas e recuperar espaço de uma tabela muito grande

  • 772

Eu não sou um dba... vamos começar com isso :) Eu sou um desenvolvedor de aplicativos. Mas nosso banco de dados tem uma tabela de arquivamento com 252 milhões de linhas e 170 GB, e recebi a tarefa de corrigi-la (na verdade, existem várias tabelas nesta categoria que preciso limpar). Mas decidimos que não precisamos manter nenhum desses dados. Como essa tabela é uma tabela de arquivamento, quero dizer que há uma tabela de transações primária para esses dados, mas o aplicativo tem uma maneira de manter a tabela de transações menor arquivando ou movendo registros mais antigos para essa tabela de arquivamento.

Sendo uma tabela de arquivo, ela não possui dependências por SSMS (sem índices ou chaves estrangeiras). Este banco de dados está definido para o modo de recuperação completa.

Temos janelas de manutenção curtas, por isso precisamos de um processo rápido e temos espaço em disco limitado, por isso precisamos recuperar o espaço em disco dessa tabela.

Podemos truncar a tabela, mas como recuperar o espaço? Não queremos fazer uma redução de banco de dados, pois ela reduz todas as tabelas e, portanto, precisaríamos executar recompilações de índice... pelo menos esse é o meu entendimento, o que pode estar incorreto.

Eu poderia salvar um script do SSMS (Script Table as Create To...). Então largue a mesa e recrie-a... Isso é arriscado? Será que vai recuperar o espaço?

Outras ideias?

sql-server-2005 maintenance
  • 1 1 respostas
  • 142 Views

1 respostas

  • Voted
  1. Best Answer
    S M
    2017-07-27T23:31:13+08:002017-07-27T23:31:13+08:00

    Como você tem experiência limitada com administração de banco de dados, seja extremamente cuidadoso. Você tem uma cópia de teste do seu servidor de banco de dados configurado, certo?

    Você mencionou que o banco de dados usa o modelo de recuperação completa. Isso é MUITO importante, porque se os logs de transação não estiverem sendo copiados com frequência suficiente, não há como reduzi-los. Você teria que colocar o banco de dados no modo de recuperação simples (que, para todos os efeitos, elimina o log de transações) e esperar enquanto isso processa, então você pode seguir em frente. Dada a quantidade de dados, imagino que demoraria um pouco. Para obter informações sobre os modelos de recuperação, acesse aqui:   https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server Este artigo fornece uma visão geral básica.

    Para responder à sua pergunta, truncar ou descartar a tabela de arquivamento não liberará espaço - é isso que o encolhimento do banco de dados faz. Tudo o que o truncate/drop faz é marcar as páginas apropriadas no banco de dados como não utilizadas. Há pouco sentido em largar a tabela e recriá-la. Um truncado basicamente obtém o mesmo resultado final e é menos propenso a erros. 

    Lembre-se de que, se este aplicativo enviar mais dados para esta tabela de arquivamento, o banco de dados será expandido depois que você executar o procedimento de redução! (Você está realmente usando o SQL Server 2005? Em caso afirmativo, considere seriamente atualizar para uma versão com suporte e obter um hardware mais novo se for um servidor físico.) Assim, assim como o aplicativo move dados para a tabela de arquivamento, você deve considerar a implementação de uma maneira para remover dados desnecessários da tabela de arquivamento para evitar essa situação no futuro. Mas as primeiras coisas primeiro.

    Se você ainda não leu, leia isto: https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-shrinkdatabase-transact-sql É um documento da Microsoft que descreve a redução um banco de dados com alguns bons detalhes. Esta é uma visão geral decente e contém algumas práticas recomendadas, bem como advertências.

    Se você não quiser reduzir o banco de dados, sua outra opção é criar um novo banco de dados, transferir para ele o que deseja manter do banco de dados antigo e, em seguida, descartar o banco de dados antigo. Claro, isso vai ocupar um pouco de espaço em disco e tempo. Também colocará o servidor sob carga considerável.

    Você está correto em que uma redução de banco de dados pode aumentar a fragmentação do índice. Dito isto, tal fragmentação pode não ter um efeito perceptível no desempenho. É por isso que você tem um servidor de teste. :-)

    Talvez seja necessário ajustar sua janela de manutenção para esta operação. Vai demorar o tempo que for preciso. Enquanto o truncar estiver em andamento, o banco de dados estará online. Você também pode manter o banco de dados online durante uma redução. O desempenho pode sofrer visivelmente dependendo do uso, como as consultas são ajustadas, hardware e configuração do sistema operacional. Novamente, teste antes de fazer qualquer coisa na produção! Um encolhimento pode ser interrompido e iniciado posteriormente, no entanto, se o espaço for escasso, iniciar e parar anula o objetivo.

    Mais uma coisa: dependendo da rapidez com que os dados são adicionados a esse banco de dados, truncar e reduzir pode apenas atrasar o inevitável. Considere adicionar capacidade de armazenamento.

    Se você tiver mais detalhes ou esclarecimentos, atualizarei minha resposta de acordo. Enquanto isso, boa sorte, e deixe-nos saber como as coisas vão!

    • 1

relate perguntas

  • Restrições exclusivas em colunas anuláveis ​​no SQL Server 2005

  • Como alterar a ordem de disparo dos Triggers?

  • Alguém usou o modo sqlcmd na prática? [fechado]

  • Como altero o nome da instância no MS SQL 2005 sem instalar uma nova instância?

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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