SQL Server - banco de dados separado para relatórios?


19

No nosso SQL Server, temos um banco de dados para cada um dos nossos aplicativos da web. Para relatórios, usamos o Reporting Services e todos os dados do relatório (incluindo parâmetros do relatório) são provenientes de procedimentos armazenados.

Os procedimentos armazenados estão no mesmo banco de dados que os dados no relatório. Assim, por exemplo, os procs que atendem aos relatórios de estoque estão no banco de dados de estoque. Alguns relatórios mostram informações de mais de um banco de dados e o proc estará em um desses bancos de dados de origem. Os parâmetros do relatório obtêm seus dados de procs em um banco de dados corporativo que possui dados como lojas, funcionários etc.

Isso significa que todos os relatórios têm pelo menos uma conexão com o banco de dados Enterprise e outra conexão com outro banco de dados - e algumas vezes mais do que isso.

Minha pergunta é: existe o benefício de mover os procs de relatórios para um banco de dados "Relatórios" separado . Conheço os benefícios de mover relatórios para outro servidor e não estou falando sobre isso - isso seria no mesmo servidor.

As coisas que podem afetar isso são:

  • Ter mais de uma conexão com o banco de dados para um relatório afeta a velocidade do relatório?
  • O processo de geração de relatórios em um banco de dados separado dos dados nos impediria de usar visualizações indexadas?
  • Você achou mais fácil / mais difícil administrar seus relatórios em um banco de dados separado?

Por favor, deixe-me saber o que você pensa.


Minhas perguntas são: Quando você move o RS e / ou o DW para outro servidor, você tem um Mecanismo de Banco de Dados existente nesse (s) novo (s) servidor (es)? ou você está usando o mecanismo de banco de dados original? - Então você precisa ter um mecanismo de banco de dados separado para todos os servidores SQL? Obrigado, - Dom

Sim, temos um mecanismo de banco de dados separado em cada servidor: servidor db e servidor DW. Desde que fizemos a pergunta, mantivemos nosso design original de manter os relatórios no mesmo banco de dados (e, portanto, no mesmo servidor) que os dados de origem. Também movemos os dados para um servidor de armazém de dados onde os usuários os acessam por meio de cubos do SQL Server Analysis Services.

Respostas:


17

A resposta é: sim, há um benefício em fazê-lo. Os relatórios no banco de dados operacional usarão muitos recursos e interferirão no desempenho do sistema operacional. Lembre-se de que o desempenho do banco de dados está sujeito a restrições mecânicas (as cabeças do disco se movem para frente e para trás e a latência rotacional enquanto aguardamos o setor certo aparecer sob a cabeça). Você tem duas opções amplas para uma estratégia de geração de relatórios:

  1. Replicar seu banco de dados em outro servidor e mover os sprocs de relatórios para ele. Os relatórios são executados no servidor replicado. Esse é o menor esforço e pode reutilizar seus relatórios e procedimentos armazenados existentes.
  2. Crie um data warehouse que consolide os dados de seus sistemas de produção e os transforme em um formato mais amigável para geração de relatórios . Se você tiver muitos relatórios estatísticos ad-hoc que possam ser feitos de forma aceitável a partir de um instantâneo a partir do 'fechamento dos negócios ontem', um data warehouse poderá ser a melhor abordagem.

Construir um armazém de dados e alavancar tecnologias como OLAP, onde faz sentido, aumenta suas opções para fornecer relatórios rápidos e confiáveis, com o menor impacto possível no sistema de processamento de transações.

2

Eu acho que depende muito do tipo de SP que você está executando. Se eles forem pesados ​​e puderem afetar outras coisas em execução no servidor de banco de dados, eu os moverei. Caso contrário, eu tentaria manter o perto do banco de dados no qual eles estão realmente reportando, se achar que é muito mais fácil manter e acompanhar. Apenas ter o relatório próximo ao banco de dados real também pode afetar o desempenho, mas se você estiver em uma configuração padrão e não mover uma quantidade enorme de dados, seria uma pequena diferença, eu acho.

Eu também achei este artigo útil.


1

Eu recomendaria não mover os procedimentos armazenados para outro banco de dados por vários motivos. Do ponto de vista do desenvolvimento, você deve reproduzir dois bancos de dados sempre que quiser fazer alterações. Como conseqüência, agora você irá sincronizar o esquema do banco de dados "dados" e os procedimentos armazenados do segundo com as versões de produção. No que diz respeito à recuperação de desastres e backup / restauração, agora você precisa se preocupar com a restauração de 2 bancos de dados apenas para colocar seu sistema em funcionamento.

Ao testar, você também adicionou complexidades. Você terá mais pontos de falha em relação às permissões, versões, etc. Agora, se houver mais de uma pessoa trabalhando em iniciativas diferentes nos bancos de dados, você gastará mais tempo coordenando esforços. Agora imagine que são 3 da manhã, o sistema está inoperante e você precisa procurar as permissões em todos os bancos de dados e garantir que ninguém tenha deixado uma função ou procedimento no banco de dados errado durante o desenvolvimento.


1

Eu recomendo que você use dois bancos de dados.

A derivação de relatórios de um banco de dados 'ativo' causa problemas de desempenho.

Além disso, como o banco de dados de relatórios é principalmente para pesquisas, você pode personalizar os índices aqui para obter melhor desempenho. (O banco de dados ativo teria inserções que seriam afetadas negativamente por determinados índices)


0

Outra abordagem é mover as tabelas de relatórios para separar o esquema e separar o grupo de arquivos. Os arquivos no grupo de arquivos de relatórios podem ser movidos para longe dos discos rígidos de dados. Isso facilita muito a administração, desenvolvimento futuro e gerenciamento de acesso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.