Definição de problema
Nossos usuários precisam da capacidade de consultar um banco de dados que esteja atualizado. Os dados podem ficar obsoletos por até 24 horas e isso é aceitável. Qual seria a abordagem de menor custo para obter e manter um segundo banco de dados atualizado com uma cópia de produção? Existe uma abordagem que eu não estou pensando?
carga de trabalho
Temos um aplicativo de terceiros que usamos para monitorar a atividade de negociação de ações. Durante o dia, muitas pequenas mudanças ocorrem como parte de vários fluxos de trabalho (sim, essa troca era válida. Não, isso é suspeito etc.). À noite, realizamos grandes operações baseadas em conjuntos (carregamos as negociações do dia anterior).
A solução e o problema atuais
Fazemos uso de instantâneos de banco de dados . Às 22h, descartamos e recriamos o instantâneo. O processamento ETL então começa. Obviamente, isso está sobrecarregando nosso disco, mas permite que nossos usuários consultem o banco de dados sem bloqueá-lo (eles usam um front-end do Access). Eles o usam até tarde da noite e no início da manhã, para que percebam o tempo de inatividade.
O problema com essa abordagem é duplo. A primeira é que, caso o processamento noturno falhe, e isso não é muito incomum, podemos restaurar o banco de dados, o que resulta na queda do instantâneo. O outro problema é que nossos tempos de processamento estão ultrapassando nosso SLA. Estamos tentando resolver isso trabalhando com o fornecedor depois de identificar consultas mal escritas e falta de indexação. O instantâneo do banco de dados também é um culpado nessa desaceleração, conforme evidenciado pela diferença de velocidade quando está presente versus não --- chocante, eu sei.
Abordagens consideradas
Agrupamento
Tínhamos o agrupamento de banco de dados ativado, mas isso não atendia às necessidades de disponibilizar os dados e apenas complicava a vida do administrador. Desde então, foi desligado.
Replicação do SQL Server
Começamos a olhar para a replicação na semana passada. Nossa teoria é que podemos obter um segundo catálogo levantado e sincronizado com o banco de dados de produção. Antes do início do ETL, cortaremos a conexão e a reabilitaremos apenas quando o processo ETL for concluído.
O administrador começou com a replicação de instantâneo , mas está preocupado com o fato de levar vários dias de alto uso da CPU para gerar o instantâneo, bem como o consumo de disco necessário. Ele indica que parece gravar todos os dados em arquivos físicos antes de enviá-los ao assinante, portanto, nosso banco de dados de 0,6 TB custará 1,8 TB em custos de armazenamento. Além disso, se demorar vários dias para gerar um snap, ele não caberá no SLA desejado.
Depois de ler o excelente artigo, parece que o Snapshot pode ser a maneira de inicializar os assinantes, mas gostaríamos de mudar para a replicação transacional para mantê-la sincronizada depois disso. Presumo que ativar/desativar a replicação transacional não forçará uma reinicialização completa? Caso contrário, vamos explodir nossa janela de tempo
Espelhamento de banco de dados
Nosso banco de dados está em modo de recuperação TOTAL, portanto, o espelhamento de banco de dados é uma opção, mas sei ainda menos sobre isso do que a replicação. Encontrei a resposta SO que indicava "O espelhamento de banco de dados impede que os dados sejam acessados diretamente, os dados espelhados só são acessíveis por meio de um instantâneo do banco de dados".
Log de envio
Parece que o envio de logs também pode ser uma opção, mas essa é outra daquelas coisas sobre as quais não sei nada. Seria uma solução de menor custo (implementação e manutenção) do que qualquer outra? Com base no comentário de Remus "O envio de log permite acesso somente leitura à cópia da réplica, mas desconectará todos os usuários ao aplicar o próximo log de backup recebido (por exemplo, a cada 15 a 30 minutos)." Não tenho certeza de quanto tempo esse tempo de inatividade se traduziria, de modo que isso poderia causar alguma angústia aos usuários.
MS Sync
Só ouvi falar sobre o uso do Sync no fim de semana passado e ainda não o investiguei. Eu odiaria introduzir uma nova tecnologia para algo com grande visibilidade como este problema, mas se for a melhor abordagem, que assim seja.
SSIS
Fazemos bastante SSIS aqui, portanto, gerar algumas centenas de pacotes SSIS para manter o secundário sincronizado é uma opção para nós, embora feia . Não sou fã de fazer isso, pois é uma grande sobrecarga de manutenção que prefiro que minha equipe não assuma.
Instantâneo "mágico" da SAN
No passado, ouvi falar de nossos administradores usando alguma tecnologia SAN para fazer backups instantâneos de discos inteiros. Talvez haja alguma mágica da EMC que possa ser usada para fazer cópias ultrarrápidas do mdf/ldf e possamos então desanexar/anexar o banco de dados de destino.
Backup e restauração
Acho que fazemos backups completos uma vez por semana, diferenciais todas as noites e tlogs a cada 15 minutos. Se os usuários pudessem conviver com a interrupção de 3 a 4 horas para a restauração completa, suponho que essa seja uma abordagem.
Restrições
Windows 2008 R2, SQL Server 2008 R2 (Enterprise Edition), VMWare v5 Enterprise Edition, armazenamento EMC SAN com unidades mapeadas para arquivos vmdk, backups de gerenciamento de commvault e 0,6 TB de dados no catálogo de origem. Este é um aplicativo de terceiros que hospedamos internamente. Modificar sua estrutura geralmente é desaprovado. Os usuários não podem ficar sem consultar o banco de dados e se recusam a ser constrangidos pela identificação proativa das tabelas que monitoram para realizar seu trabalho.
Nossos DBAs são puramente contratados no momento. Os titulares zarparam e ainda não os substituímos. Os administradores do aplicativo não são versados em assuntos do SQL Server e temos uma equipe de administradores de armazenamento/VM que podem ajudar/dificultar esse esforço. As equipes de desenvolvimento não estão envolvidas no momento, mas podem ser alistadas com base na abordagem. Portanto, seria preferível uma solução mais simples de implementar e manter.
Eu, estou no lado de desenvolvimento da casa, então só posso propor abordagens e não tive que lidar com o lado administrativo das coisas. Portanto, sem tempo na sela do administrador, hesito em dizer que uma abordagem seria superior a outra --- tudo parece ótimo de acordo com os documentos. Estou totalmente disposto a seguir qualquer direção que vocês sugerirem porque, a meu ver, isso só vai me tornar mais valioso como profissional de DB. Eu tenho um carrinho de mão, mas nenhuma capa do holocausto disponível .
Perguntas relacionadas
https://stackoverflow.com/questions/434982/mirroring-vs-replication
https://stackoverflow.com/questions/4303020/sync-databases-mirroring-replication-log-shipping
https://stackoverflow.com/questions/4303020/sync-databases-mirroring-replication-log-shipping
http://nilebride.wordpress.com/2011/07/24/log-shipping-vs-mirroring-vs-replication/
Editar% s
Para responder às perguntas de @onpnt
Aceitação de latência de dados
Atualmente, os usuários visualizam dados com até 24 horas de atraso. Os dados são atuais apenas a partir de 2200
Quantidade de alteração de dados em um determinado minuto, hora e dia Não tenho certeza de como quantificar isso. Horário comercial, talvez centenas de mudanças por hora. Processamento noturno, milhões de linhas por dia útil
Conectividade com o secundário
Rede interna, host virtual separado e armazenamento dedicado
Leia os requisitos na instância secundária
O grupo do Windows terá acesso de leitura ao secundário, todas as tabelas
Tempo de atividade da instância secundária
Não há uma definição forte de um requisito de tempo de atividade. Os usuários querem que esteja sempre disponível, mas estão dispostos a pagar por isso, provavelmente não tanto. Realisticamente, eu diria que 23 horas por dia seriam suficientes.
Alterações no esquema existente e em todos os objetos
Modificações pouco frequentes, talvez uma vez por trimestre para objetos de tabela. Talvez uma vez por mês para objetos de código.
Segurança
Sem necessidades especiais de segurança. As permissões de produção corresponderiam às permissões da cópia. Embora, pensando bem, possamos revogar o acesso de leitura dos usuários ao prod e permitir que eles leiam apenas a cópia ... Embora não seja um requisito.
@darin strait
Reverter para o instantâneo pode ser uma opção, mas acho que houve algum motivo para eles não terem feito isso. vou verificar com o administrador
@cfradenburg
Minha suposição era que usaríamos apenas uma dessas abordagens, mas é um bom ponto que as restaurações quebrariam as "outras" tecnologias de sincronização. Eles estão investigando o que fazer usando a mágica do snapshot da EMC. Como o administrador descreveu, eles tirariam um instantâneo às 19h e migrariam a imagem para a zona secundária. Isso deve ser concluído em 2200 e, em seguida, eles realizarão uma desanexação e reanexação do banco de dados secundário.
Embrulhar
29/10/2012 Avaliamos a mágica do snapshot da EMC e algumas outras opções de replicação, mas os DBAs decidiram que poderiam descobrir melhor o espelhamento. Votei positivamente nas respostas porque todas elas ajudaram e me deram muitas opções, bem como "lição de casa" para investigar.
A replicação é mais do que provável e eu descartaria o Sync antes disso. (de testes transacitonais da vida real no Sync Framework)
Se 3-4 horas for sua exceção de latência de dados, o envio de log provavelmente será sua melhor aposta aqui em uma cópia somente leitura. Mas quanta mudança está acontecendo no log? descubra isso monitorando-o para ver com que rapidez e quanto você precisa empurrar.
Se você não pode ir para o espelhamento ou atualizar para a empresa 2012, isso está fora, embora seja uma boa estratégia se você puder ir para a empresa, se não estiver nele.
O SSIS não se destina apenas a despejar dados, mas pode fazê-lo. Você está olhando demais em termos de transformações de pesquisa e a tarefa seria dispendiosa em tempo e recursos. Embora, como eu disse, pode fazê-lo.
Realmente, haverá um distinto estreitamento de escolhas com base na resposta a algumas perguntas
Essa será uma daquelas coisas que você precisa experimentar para descobrir o que funciona melhor. A replicação pode ser complicada, portanto, embora possa não haver um custo monetário direto, haverá sobrecarga administrativa para mantê-la.
Para expandir o Log Shipping, você não precisa restaurar os logs a cada 15 a 30 minutos. Se preferir, pode fazê-lo a cada quatro horas ou uma vez por dia. Uma solução semelhante a esta que implementei é fazer um backup completo semanal e restaurar para um banco de dados de relatórios (o que pode demorar um pouco e acontece no fim de semana). Durante a semana, são feitos backups diferenciais e restaurados no banco de dados de relatórios todas as noites. Os usuários precisam ser inicializados antes da restauração, mas como o banco de dados de relatórios é um aplicativo de horário comercial, não há problema com isso. Os dados são de um dia, o que não deve ser um problema com base em seus requisitos.
Para usar o espelhamento de banco de dados para isso, você precisa adquirir o Enterprise para poder usar instantâneos se ainda não estiver executando o Enterprise. Também não manteria os dados 100% atualizados, pois o instantâneo precisa ser descartado (o que significa que todos os usuários precisam estar fora) e recriado para obter os novos dados. No entanto, isso levaria menos tempo do que as restaurações de log ou o método que expliquei acima.
Se a atualização para o SQL 2012 for uma opção, é possível configurar um secundário somente leitura que será mantido atualizado com o banco de dados primário. Menciono isso apenas porque é provável que seja a solução mais suave.
Por mais que as pessoas se preocupem com a replicação transacional, parece uma boa opção para a sua situação. Algumas notas: