Como você mantém seu banco de dados sem derrubar seu site?

7

Existem certas tarefas de manutenção de banco de dados, como reorganizar índices, mover arquivos, alterar esquema, etc, que exigem desabilitar quaisquer aplicativos que estejam usando o banco de dados.

Quais são algumas boas estratégias para contornar esse problema, além de postar uma mensagem no seu site como "estaremos inoperantes da meia-noite às 4 da manhã para manutenção do servidor"?

    
por Eric Z Beard 15.05.2009 / 13:38

4 respostas

8

Se você tiver uma solução de replicação / alta disponibilidade, usá-la para evitar o tempo de inatividade é a escolha óbvia, ter um servidor atualizado enquanto o outro está funcionando e, em seguida, alternar e atualizar o próximo.

Se você não tiver essa estrutura, você pode fazer uma mini-instalação de réplica no mesmo servidor, onde você tem duas cópias de cada banco de dados e atualiza uma enquanto a outra está trabalhando e então sincroniza a antiga. . Isso ainda vai exigir algum tempo de inatividade, mas menos de 4 horas.

A terceira opção para evitar manter ambos os dbs em sincronia é fazer uma cópia do banco de dados e enquanto um banco de dados está sendo mantido, a cópia e os aplicativos que o usam estão no modo somente leitura. Depois de terminar, basta alternar os aplicativos para o banco de dados atualizado e começar a gravar novamente no banco de dados.

Esta última opção requer, naturalmente, suporte a aplicativos e fazer sentido (existem aplicativos em que o modo somente leitura não faz sentido).

    
por 15.05.2009 / 13:53
5

Se você estiver usando o SQL Server, poderá sempre fazer a remoção de fragmentação de índice on-line a partir do SQL Server 2000. O comando DBCC INDEXDEFRAG sempre executa uma reorganização online. Eu escrevi especificamente como uma alternativa online ao DBCC DBREINDEX.

No SQL Server 2005 em diante, o comando ALTER INDEX ... REORGANIZE substitui o DBCC INDEXDEFRAG e também está online sempre. Também em 2005 em diante, com o Enterprise Edition, você pode fazer a reconstrução de índice online usando ALTER INDEX ... REBUILD ... WITH (ONLINE = ON). Há alguns bloqueios de tabela de curto prazo exigidos no início e no final da operação, portanto, não é tão on-line quanto REORGANIZE (e a reconstrução de índice na maioria das vezes não é um termo de marketing tão bom :-). Você pode até mover índices para novos grupos de arquivos usando CREATE INDEX ... WITH DROP_EXISTING e especificando ONLINE = ON.

Obrigado

    
por 19.05.2009 / 19:25
3

Tarefas gerais de manutenção

A maioria das tarefas de manutenção pode ser feita sem colocar o site ou o aplicativo offline se você tiver replicação de banco de dados . Você removerá um banco de dados do conjunto de réplicas, aplicará o que precisar e o conectará novamente ao seu conjunto de réplicas. Enquanto estiver desligado, outros bancos de dados manterão a solução em execução.


Alterando o esquema do banco de dados

Quando você precisar atualizar seu esquema de banco de dados , será forçado a reduzir sua solução por alguns minutos (ou para um estado de somente leitura) SE as quebras de alteração a versão antiga. Se seu novo esquema apenas criar tabelas ou campos, ele não afetará uma versão antiga 1 , portanto, esse tipo de alteração de esquema pode ser feito online 2 e usando uma Implementação do Blue-Green para que seu aplicativo obtenha alta disponibilidade.

Se o novo esquema renomear um campo existente ou removê-lo, para atingir 100% do tempo de atividade, você precisará seguir estas etapas:

Renomeando um campo

  1. Se você precisar renomear de A para B, aplique uma alteração de esquema que adicione um novo campo B e duplique um conteúdo. Além disso, mantenha A intacta.
  2. Implante um novo aplicativo que use o campo B e não use o campo A.
  3. Aplique uma alteração de esquema que remova A.

Removendo um campo

  1. Não aplique nenhuma alteração de esquema.
  2. Implante um novo aplicativo que não use o campo que será removido.
  3. Aplique uma alteração de esquema que remova o campo.


Nota 1 : algumas ferramentas ORM, como o .NET Entity Framework, associam cada alteração de esquema a um ID de migração. Portanto, quando você implanta uma nova versão de esquema, os aplicativos antigos são quebrados instantaneamente. Também é evitável se você desativar este verifique .

Nota 2 : se o seu novo esquema adicionar uma restrição única, uma chave check ou uma chave estrangeira, o comando alter table pode precisar de algum tempo significativo se você tiver milhares de linhas. Enquanto a tabela de alteração está sendo processada, a tabela será bloqueada até mesmo para seleções e isso pode levar a alguns tempos limite de consulta, dependendo do tamanho dos seus dados.

    
por 04.09.2015 / 05:27
2

As opções disponíveis dependem em grande parte de qual mecanismo de banco de dados você está usando. Você vai querer começar tomando todas as ações necessárias para permitir backups on-line do seu banco de dados, preferencialmente permitindo gravações enquanto o backup está em andamento. Isso normalmente requer logging linear de transações, o que também deve permitir que você recupere seu banco de dados para um ponto específico no tempo rolando para frente através dos logs de transação.

As reorgs de tabela e índice podem ser um pouco mais complicadas, mas esperamos que seu mecanismo de banco de dados permita pelo menos acesso somente leitura aos objetos enquanto eles estão sendo reorganizados. Caso contrário, talvez seja necessário criar uma maneira de seus aplicativos usarem temporariamente um clone somente leitura da tabela. Se o seu DBMS oferecer pouca manutenção on-line, você terá que fazer compensações na camada de aplicação para redirecioná-lo para uma cópia parcial ou completa dos dados.

Independentemente do custo, a replicação de banco de dados é quase sempre um recurso complexo para gerenciar. Pior ainda é a replicação bidirecional, que teoricamente permitiria que seus aplicativos alterassem os dados no banco de dados secundário, mesmo quando o banco de dados primário estivesse inativo para manutenção. A replicação não é impossível, mas exige uma quantidade razoável de planejamento e teste para se comportar de maneira confiável na produção.

    
por 22.07.2009 / 22:06