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 / 117146
Accepted
xeraphim
xeraphim
Asked: 2015-10-07 02:57:53 +0800 CST2015-10-07 02:57:53 +0800 CST 2015-10-07 02:57:53 +0800 CST

Arquivamento de dados antigos

  • 772

No momento, estamos enfrentando alguns problemas de desempenho, pois nosso banco de dados está ficando muito grande. Há dados armazenados dos últimos 10 anos e não vejo motivo para que os dados com mais de 2 anos tenham que ser armazenados nas mesmas tabelas que os novos dados.

Agora, como não tenho experiência muito profunda em administrar bancos de dados, estou procurando as melhores maneiras de arquivar dados antigos.


Informações

  • Existem cerca de 310.000.000 registros no banco de dados no total.

  • O banco de dados precisa de 250 GB no disco rígido.

  • A versão do servidor é o SQL Server 2008 com nível de compatibilidade SQL Server 2005 (90), mas planejamos atualizar para o SQL Server 2012 em breve

Já pensei em duas possibilidades:

Novo banco de dados

Crie um banco de dados semelhante ao do servidor de produção e insira todos os dados antigos no novo banco de dados.

  • Desvantagem: Como os servidores vinculados não são permitidos em nosso ambiente, seria difícil juntar os dados antigos, se necessário

Esquema de histórico

Crie um novo esquema fe [hist] com as mesmas tabelas do banco de dados de produção. Insira todos os dados antigos nessas novas tabelas no novo esquema.

  • Vantagem: Fácil adesão, se dados antigos forem necessários no futuro


  • Você prefere uma das soluções sobre a outra?
    • Por quê?
  • Existem possibilidades melhores?
  • Existem ferramentas existentes com as quais essa tarefa é facilmente possível?
  • Algum outro pensamento?

desde já, obrigado

Editar

Pergunta adicional:

A tabela de arquivos recém-criada também precisaria de chaves primárias/estrangeiras?

Ou eles deveriam ter apenas as colunas, mas sem chaves/restrições?

sql-server migration
  • 5 5 respostas
  • 50179 Views

5 respostas

  • Voted
  1. Best Answer
    Geoff Patterson
    2015-10-07T05:47:41+08:002015-10-07T05:47:41+08:00

    Acho que a resposta para muitas de suas perguntas é que depende. Quais problemas de desempenho você está tendo? Parece incomum que um banco de dados tenha problemas de desempenho apenas crescendo para 250 GB de tamanho.

    Talvez suas consultas estejam realizando varreduras de tabela em toda a tabela de fatos, mesmo quando apenas uma pequena parte (por exemplo, o último ano) do intervalo de datas é necessária? Se houver uma consulta específica que seja mais importante para otimizar, considere postar seu esquema, consulta e um plano de execução real em outra pergunta para ver se ela pode ser otimizada.

    Você prefere uma das soluções sobre a outra?

    Eu geralmente prefiro o banco de dados de histórico e acho que Guy descreve boas razões para isso em sua resposta .

    A principal desvantagem que vejo para um banco de dados de histórico (em oposição a um esquema) é que você não pode mais usar chaves estrangeiras para sua tabela de arquivo. Isso pode ser bom para você, mas é algo para estar ciente.

    A desvantagem que você listou para essa abordagem não é precisa; você poderá consultar facilmente entre bancos de dados no mesmo servidor e o otimizador de consulta geralmente lida muito bem com consultas entre bancos de dados.

    Existem possibilidades melhores?

    Se você precisar consultar os dados de arquivo regularmente, considere particionar a tabela por data . No entanto, esta é uma grande mudança que pode vir com muitas implicações de desempenho, tanto positivas (por exemplo, eliminação de partição, carregamento de dados mais eficiente) quanto negativas (por exemplo, buscas singleton mais lentas, maior potencial para desvio de encadeamento em consultas paralelas). Portanto, eu não tomaria essa decisão de ânimo leve se for um banco de dados muito usado.

    A tabela de arquivos recém-criada também precisaria de chaves primárias/estrangeiras? Ou eles deveriam ter apenas as colunas, mas sem chaves/restrições?

    Eu recomendaria ter pelo menos a chave primária e os índices exclusivos para que você possa obter os benefícios de integridade de dados que eles oferecem. Por exemplo, isso impedirá que você insira acidentalmente um ano de dados na tabela de histórico duas vezes. E, como benefício colateral, pode melhorar o desempenho se você precisar consultar a tabela de histórico.

    Algum outro pensamento?

    Como você está usando a edição Enterprise e planeja atualizar para o SQL 2008+, considere a compactação de dados para esta tabela. A compactação certamente reduzirá o espaço em disco, mas dependendo do disco do servidor e dos recursos da CPU, ela também pode melhorar o desempenho da consulta para leituras, reduzindo a E/S do disco e melhorando a utilização da memória (mais dados cabem no cache de uma só vez).

    • 14
  2. Spörri
    2015-10-07T03:47:47+08:002015-10-07T03:47:47+08:00

    Eu preferiria ter um esquema de histórico ou um segundo banco de dados histórico em um servidor vinculado a qualquer dia. Ele economiza custos de licença é mais fácil de gerenciar e consultar. Você também pode usar um esquema mais simples e descartar alguns dos índices, tornando o banco de dados menor

    Mas como você tem a edição corporativa você tem a terceira opção que é particionar suas tabelas o que, quando colocado em prática facilita o arquivamento dos dados e a consulta dos dados antigos é transparente para seus usuários e você não precisará fazer alterações no aplicativo .

    • 10
  3. Guy
    2015-10-07T03:53:44+08:002015-10-07T03:53:44+08:00

    Na minha experiência, um segundo banco de dados seria a escolha preferida por dois motivos.

    1. Você pode restaurar os dados de um backup histórico e, em seguida, descartar as tabelas e índices desnecessários.
    2. Você pode mover isso para um servidor diferente para fins de relatório, isso tem as vantagens de não usar os recursos do servidor primário

    Você ainda precisaria excluir todos os dados históricos do banco de dados primário, mas isso poderia ser agendado.

    • 8
  4. SQLmojoe
    2015-10-07T13:39:45+08:002015-10-07T13:39:45+08:00

    Ignorando a licença por enquanto, pois não é onde passo meu tempo.

    IMHO, banco de dados de arquivo é mais simples de implementar e manter. São entidades distintas e fracamente acopladas. A movimentação de dados e os controles de carga/recurso têm limites claros. Pode mover-se facilmente para uma instância ou servidor diferente para melhor gerenciamento de desempenho e custo não é um problema importante. Note que mais simples != mais barato ou menos esforço. Na verdade, ele tem um pouco mais de tarefas, mas todas são tarefas simples, com duas exceções importantes:

    1. imposição de restrições - não há restrições entre bancos de dados no SQL Server, portanto, você precisa decidir se isso é um fator decisivo.
    2. consultas cruzadas de banco de dados usam consultas distribuídas que ainda dependem do OLEDB, que está obsoleto. Isso significa que você pode encontrar problemas com novos tipos de dados e, se encontrar problemas de desempenho, é improvável que eles sejam corrigidos

    O esquema de arquivamento ou apenas a tabela de arquivamento é um pouco mais complexo de implementar, mas muito mais fácil de usar. Todos os objetos no mesmo banco de dados significam que você não precisa replicar e manter controles de acesso. Sem consultas cruzadas de banco de dados, facilitando o ajuste de desempenho, monitoramento, solução de problemas etc.

    O particionamento de tabela é uma ótima solução e oferece muitos dos benefícios de uma tabela/esquema de arquivamento, mas fornece transparência para usuários/consultas. Dito isto, é o mais complexo de implementar e requer cuidados contínuos que não são fáceis para um iniciante.

    Algumas considerações importantes:

    • As consultas retornam dados históricos/frios regularmente ou os dados frios são acessados ​​com pouca frequência?
    • Os dados históricos são imutáveis ​​ou são atualizados/excluídos regularmente?
    • 310m de linhas é "moderado" (assumindo tudo em 1 tabela) dependendo do tamanho da linha. Você tem dados de tamanho de linha? Quantos GB é essa linha de 310m?
    • Qual é a taxa de crescimento dessa tabela?
    • Você pode modificar o código do aplicativo e suas consultas SQL?

    Essas são considerações importantes, pois podem ter um impacto significativo na solução escolhida ou podem até não permitir determinadas soluções. Por exemplo, se seus dados históricos são modificados/atualizados regularmente (mais de uma vez por semana), usar um banco de dados separado significa que você precisa usar o DTC para essas consultas ou gerenciar manualmente a segurança da transação (não trivial para garantir sempre a correta). O custo é significativamente maior do que os dados históricos imutáveis.

    Além disso, se você está pensando em atualizar, considere 2016 e o ​​novo recurso Stretch Database: https://msdn.microsoft.com/en-us/library/dn935011.aspx

    • 4
  5. Sathish
    2015-10-08T06:24:51+08:002015-10-08T06:24:51+08:00

    Eu preferiria dividir o banco de dados em um banco de dados lógico separado pelos seguintes motivos:

    1. Requisitos de recursos

    Ao dividir isso em um banco de dados separado, ele pode ser armazenado em uma unidade diferente e monitorado em uma taxa diferente dos dados de produção principais.

    2. Desempenho

    Ao dividir os dados em um banco de dados separado, o banco de dados principal de Produção é reduzido em tamanho, ajudando no desempenho geral.

    3. Backups mais simples

    O backup de dados arquivados pode não ser considerado tão essencial quanto os registros 'vivos/atuais' no banco de dados SQL principal. Isso pode significar que os dados arquivados podem ser copiados com menos frequência. Também devido à natureza sequencial de como os dados arquivados são registrados, pode ser possível fazer backup de seções do banco de dados arquivado uma vez e nunca mais. Por exemplo, uma vez que os dados do arquivo sejam gravados no banco de dados do arquivo Change para 2014, nunca haverá nenhuma alteração nesses dados novamente.

    Observação: acho que a resposta para muitas de suas perguntas depende de suas circunstâncias, natureza dos dados e problemas de desempenho que você estava tendo.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • 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

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