Melhores Práticas de Data Warehousing com SQL Server 2008.doc
description
Transcript of Melhores Práticas de Data Warehousing com SQL Server 2008.doc
Práticas Recomendadas para Data
Warehousing com o SQL Server 2008
Arquivo Técnico do SQL Server
Autores: Mark Whitehorn, Solid Quality Mentors; Keith Burns, Microsoft
Revisor Técnico: Eric N. Hanson, Microsoft
Publicado: Julho de 2008
Aplica-se a: SQL Server 2008
Resumo: Há evidências consideráveis de que projetos de data warehousing de sucesso
freqüentemente geram um retorno de investimento muito alto. Ao longo dos anos foi coletada uma
grande quantidade de informação sobre os fatores que levam a uma implementação bem ou mal-
sucedida. Eles estão encapsulados aqui, em um conjunto de práticas recomendadas, que são
apresentadas com referência particular aos recursos do SQL Server 2008. A aplicação de práticas
recomendadas em um projeto de data warehouse é um dos melhores investimentos que você
pode fazer no sentido de estabelecer uma infra-estrutura de Business Intelligence de sucesso.
Introdução
O Microsoft SQL Server 2008 representa uma excelente escolha para a construção e manutenção
de data warehouses em empresas de todos os tamanhos.
O termo Business Intelligence (BI) descreve o processo de extrair informações de dados. Os dados
operacionais na maioria das empresas são mantidos em sistemas baseados em transações com
funções específicas (RH, Vendas, Finanças e etc.). Freqüentemente a informação solicitada pelos
responsáveis por decisões dentro da empresa requer dados de vários sistemas operacionais. De
fato, quanto mais geral a pergunta, como “Qual é nosso lucro atual?”, mais sistemas operacionais
provavelmente serão envolvidos em fornecer os dados.
Uma parte integrante de qualquer sistema de BI é o data warehouse – um repositório central de
dados que é regularmente renovado a partir de sistemas de origem. Os dados novos são
transferidos a intervalos regulares (geralmente à noite) por processos de ETL (extract, transform,
and load - extração, transformação e carregamento).
Tipicamente os dados no data warehouse são estruturados como um esquema em estrela [Kim08],
embora também possa ser estruturado como dados relacionais normalizados [Inmon05] ou um
híbrido dos dois. Não importa qual estrutura é escolhida, depois de os dados novos serem
carregados no data warehouse, muitos sistemas de BI copiam subconjuntos dos dados para data
marts de função específica em que os dados são tipicamente estruturados como um cubo de OLAP
multidimensional como mostrado na Figura 1.
Figura 1: Plano geral de um data warehouse
Data warehouses têm sido construídos de uma forma ou de outra há mais de 20 anos. No começo
de sua história tornou-se aparente que construir um data warehouse de sucesso não é uma tarefa
trivial. O relatório do IDC de 1996 [IDC96] é um estudo clássico do estado do data warehousing na
época. Paradoxalmente, foi usado tanto por defensores como por detratores do data warehousing.
Os defensores alegavam que ele provava como o data warehousing é eficaz, citando que, para os
63 projetos estudados, o retorno do investimento (ROI) médio em três anos era pouco mais de 400
por cento. Quinze daqueles projetos (25 por cento) apresentaram um ROI de mais de 600 por
cento.
Os detratores mantinham que o relatório era uma condenação inflamada das práticas de data
warehouse na época porque de 45 projetos (com exceções descontadas), 34 por cento falharam
em retornar até mesmo o custo do investimento após cinco anos. Um warehouse que não
apresentou nenhum retorno naquele tempo não é um bom investimento.
Os dois conjuntos de números são precisos e, juntos, refletem as descobertas gerais do próprio
documento que diz “Uma das histórias mais interessantes é encontrada na variedade de
resultados. Embora as 45 organizações incluídas na análise do resumo tenham relatado resultados
de ROI entre 3% e 1,838%, a faixa total variou de – 1,857% a 16.000%!”
De maneira preocupante, a tendência para o fracasso de projetos de data warehouse continua
hoje em dia: alguns apresentam um enorme ROI, outros claramente fracassam. Em um relatório
alguns anos depois (2005), a Gartner predisse que “Mais de 50 por cento dos projetos de data
warehouses terão aceitação limitada ou serão fracassos em 2007” (Gartner press release [Gart07]).
Isso significa que não aprendemos nada nesse meio-tempo? Não, aprendemos muito sobre como
criar data warehouses de sucesso e um conjunto de data warehouses e outro de práticas
recomendadas evoluíram. O problema parece ser que nem todo mundo no campo tem
conhecimento dessas práticas.
Neste documento nós cobrimos alguns dos recursos de data warehousing mais importantes do SQL
Server 2008 e descrevemos práticas recomendadas para usá-los eficientemente. Além disso,
cobrimos algumas das práticas recomendadas mais gerais para se criar um projeto de data
warehouse de sucesso. Seguir essas práticas recomendadas não pode, é claro, garantir que seu
projeto de data warehouse terá sucesso; mas melhorará imensamente suas chances. E é
inegavelmente verdadeiro que aplicar práticas recomendadas é o investimento mais eficaz em
termos de custo que você pode fazer em um data warehouse.
Um documento complementar [Han08] discute como escalonar seu data warehouse com o SQL
Server 2008. Este documento enfoca o planejamento, projeto, modelagem e desenvolvimento
funcional da infra-estrutura de seu data warehouse. Consulte o documento complementar para
mais detalhes sobre questões de desempenho e escalonamento associados com configuração,
consultas e gerenciamento de data warehouses.
Benefícios do Uso de Produtos Microsoft para Data Warehousing e Business Intelligence
Sistemas de BI são, inevitavelmente, complexos. Os dados de origem são mantidos em um
conjunto de aplicativos operacionais e bancos de dados distintos. Um sistema de BI deve
transformar esses conjuntos heterogêneos em um conjunto coeso, preciso e oportuno de
informações úteis.
Várias arquiteturas diferentes podem ser empregadas com sucesso para data warehouses;
contudo, devem envolver:
Extrair dados de sistemas de origem, transformá-los e depois carregá-los em um data
warehouse
Estruturar os dados no warehouse como tabelas de forma normal ou em um esquema em
estrela/floco de neve que não é normalizado
Mover os dados para data marts, onde freqüentemente são gerenciados por um mecanismo
multidimensional
Relatar em seu sentido mais amplo, o que ocorre a partir de dados no warehouse e/ou data
marts: criar relatórios pode tomar qualquer forma, de resultados e planilhas do Microsoft Office
Excel® impressos através de análise multidimensional rápida a data mining.
O SQL Server 2008 fornece todas as ferramentas necessárias para executar essas tarefas
[MMD07].
O SSIS (SQL Server Integration Services) permite a criação e manutenção de rotinas de ETL.
Se você usar o SQL Server como uma fonte de dados, o recurso de Captura de Dados de
Alterações (Change Data Capture) simplifica muito o processo de extração.
O mecanismo de banco de dados do SQL Server detém e gerencia as tabelas que formam seu
data warehouse.
O SSAS (SQL Server Analysis Services) gerencia uma forma multidimensional dos dados,
otimizada para relatórios rápidos e facilidade de compreensão.
O SSRS (SQL Server Reporting Services) possui uma grande variedade de capacidades de
relatórios, inclusive excelente integração com o Excel e Microsoft Office Word. O PerformancePoint
Server™ facilita a visualização de dados multidimensionais.
Além disso, o MOSS (Microsoft Office SharePoint Server®) 2007 e o Microsoft Office 2007
proporcionam um ambiente de usuário final integrado e fácil de usar, permitindo que você
distribua por toda a sua organização análises e relatórios derivados de dos dados de seu data
warehouse. O SharePoint pode ser usado para construir soluções de portal e de painel de BI. Por
exemplo, você pode construir um aplicativo de scorecard no SharePoint que permita aos
funcionários obter uma exibição personalizada da métrica e dos KPIs (Key Performance Indicators –
Indicadores-Chave de Desempenho) dependendo do cargo deles.
Como se esperaria de uma solução fim a fim completa, o nível de integração entre os
componentes é altíssimo. O Microsoft Visual Studio® oferece uma UI consistente a partir da qual
controlar o SQL Server e o Analysis Services e, é claro, ela pode ser usada para desenvolver
aplicativos de BI em uma variedade de linguagens (Visual C#®, Visual C++®, Visual Basic.Net® e
outras).
O SQL Server é lendário por seu TCO (total cost of ownership – custo total de propriedade) baixo
em soluções de BI. Uma razão é que as ferramentas de que você precisa o acompanham sem
custo adicional — outros fornecedores cobram (e bastante) por ferramentas de ETL, mecanismos
multidimensionais e assim por diante. Outro fator é o conhecido foco da Microsoft na facilidade de
uso que, quando combinada com o ambiente de desenvolvimento integrado que o Visual Studio
proporciona, reduz significativamente o tempo de treinamento e os custos de desenvolvimento.
Práticas Recomendadas: Criando Valor para a Sua Empresa
O foco principal deste documento é em práticas técnicas recomendadas. Contudo, a experiência
demonstra que muitos projetos de data warehouse e de BI fracassam não por motivos técnicos,
mas por causa de três fatores: personalidades, lutas pelo poder e política.
Encontre um patrono
Seu patrono deve ser alguém no nível mais alto da organização, alguém com a vontade e a
autoridade de dar ao projeto o forte apoio político de que ele precisará. Por quê?
Alguns empresários aprenderam que o controle da informação significa poder. Eles podem ver o
warehouse como uma ameaça a seu poder porque ele torna informações disponíveis livremente.
Por motivos políticos, essas pessoas podem manifestar apoio total ao sistema de BI, mas, na
prática, ser efetivamente um obstáculo.
A equipe de BI pode não ter a influência necessária para superar tais obstáculos ou a inércia que
pode advir dos escalões mais altos da gerência: essa é a tarefa do patrono.
Acerte na arquitetura logo no início
A arquitetura geral de todo o sistema de BI deve ser cuidadosamente planejada nas etapas iniciais.
Um exemplo de parte deste processo é decidir sobre alinhar a estrutura com os princípios de
design de Ralph Kimball ou Bill Inmon (consulte Referências).
Desenvolva uma Verificação de Conceito
Decidir sobre um projeto de Verificação de Conceito é uma excelente maneira de conquistar apoio
e influenciar pessoas. Isso pode envolver a criação de um cubo de OLAP e o uso de software de
visualização para uma ou várias unidades de negócios. O projeto pode ser usado para mostrar a
pessoas de negócios o que podem esperar do novo sistema e também para treinar a equipe de BI.
Escolha um projeto com um escopo pequeno e bem-definido que seja relativamente fácil de
concretizar. Executar uma Verificação de Conceito requer um investimento de tempo, esforço e
dinheiro, mas, limitando o escopo, você limita os gastos e assegura um retorno rápido do
investimento.
Selecione projetos de Verificação de Conceito com base no ROI rápido
Quando escolher um projeto de Verificação de Conceito, pode ser um exercício útil conversar com
cerca de dez unidades de negócios sobre as necessidades delas. Pontue os requisitos por
dificuldade e ROI. A experiência sugere que freqüentemente há pouca relação entre o custo de
desenvolver um cubo e o ROI que ele pode gerar, portanto este exercício deve identificar vários
projetos de esforço baixo e retorno alto, cada um dos quais devendo ser excelente candidatos para
projetos de Verificação de Conceito.
Forneça projetos de alto valor incremental
Construindo as soluções mais lucrativas primeiro, um bom ROI pode ser garantido para todo o
projeto de data warehouse depois das etapas iniciais. Se o primeiro incremento custar, digamos
US$ 250.000 e o ROI for de US$ 1 milhão por ano, depois dos três primeiros meses de operação o
gasto inicial terá sido recuperado.
A facilidade de uso e alto nível de integração entre componentes de BI Microsoft são ativos
valiosos que ajudam a proporcionar resultados em tempo hábil; isso ajuda você a conquistar apoio
rápido de seus usuários comerciais e patronos. O valor permanece aparente à medida que você
constrói com base no projeto de Verificação de Conceito e começa a proporcionar benefícios na
organização.
Projetando sua solução de Data Warehouse/BI
Nesta seção discutimos duas áreas de práticas recomendadas. A primeira é composta das
diretrizes gerais de design que devem ser consideradas no início do projeto. Elas são seguidas por
orientação para especificação de hardware.
Práticas Recomendadas: Design Inicial
Mantenha o design alinhado com os requisitos analíticos dos usuários
Assim que começamos a discutir bom design de data warehouse, devemos apresentar Bill Inmon
[Inmon05] e Ralph Kimball [Kim08]. Ambos contribuíram muito para nossa compreensão de data
warehousing e ambos escrevem sobre muitos aspectos do design de warehouses. As visões deles
são freqüentemente caracterizadas das seguintes maneiras:
Inmon favorece um data warehouse normalizado.
Kimball favorece um data warehouse dimensional.
Warehouses com essas estruturas freqüentemente são mencionadas como warehouses Inmon ou
warehouses Kimball. A Microsoft não tende a nenhum dos dois e o SQL Server é perfeitamente
capaz de suportar ambos os projetos. Observamos que a maioria de nossos clientes favorece um
warehouse dimensional. Em resposta, introduzimos otimização em esquema em estrela para
acelerar consultas em grandes tabelas de fatos e de dimensões.
A indústria dos computadores entendeu como projetar sistemas transacionais desde a década de
1970. Comece com os requisitos do usuário, que podemos descrever como o modelo do Usuário.
Formalize-os em um modelo Lógico com que os usuários concordem e aprovem. Adicione os
detalhes técnicos e transforme aquilo em um modelo Físico. Depois disso, é apenas uma questão
de implementação…
Projetar um data warehouse deve seguir os mesmos princípios e focar o processo de design nos
requisitos dos usuários. A única diferença é que, para um data warehouse, aqueles requisitos não
são operacionais, mas analíticos.
Em uma grande empresa, os usuários tendem a separar-se em muitos grupos, cada qual com
diferentes requisitos analíticos. Os usuários em cada grupo geralmente articulam a análise de que
precisam (o modelo de análise de Usuário) em termos de gráficos, grades de dados (planilhas) e
relatórios impressos. Eles são muito diferentes, mas todos essencialmente representam medições
numéricas filtradas e agrupadas pelos membros de uma ou mais dimensões.
Assim, podemos capturar os requisitos analíticos de um grupo simplesmente através da
formalização das medições e dimensões usadas. Como mostrado na Figura 2, elas podem ser
capturadas junto com as informações hierárquicas relevantes em um modelo solar, que é o
modelo Lógico dos requisitos analíticos.
Figura 2: Um modelo solar usado para capturar os requisitos analíticos de usuários em termos de
medições, dimensões e estrutura hierárquica. Este é o modelo Lógico derivado do modelo de
Usuário.
Uma vez que esses requisitos analíticos tenham sido capturados com sucesso, podemos
acrescentar os detalhes técnicos. Isso transforma o modelo Lógico em Físico, o esquema em
estrela, ilustrado na Figura 3.
Figura 3: Uma representação de um esquema em estrela, que é um exemplo de modelo Físico de
requisitos analíticos
Os esquemas em estrela podem, em última análise, ser implementado como um conjunto de
tabelas dimensionais e de fatos no data warehouse e/ou como cubos (ROLAP, HOLAP ou MOLAP),
que podem ser alojados em múltiplos data marts.
Para projetar o sistema de ETL para distribuir os dados para essa estrutura, devemos entender a
natureza dos dados nos sistemas de origem.
Para distribuir a analítica que os usuários descreveram em seus requisitos, devemos encontrar os
dados apropriados nos sistemas de origem e transformá-los adequadamente. Em um mundo
perfeito, os sistemas de origem vêm com documentação excelente, que inclui nomes expressivos
de tabelas e de colunas. Além disso, os aplicativos de origem são perfeitamente projetados e
permitem que apenas dados que se enquadrem no domínio apropriado sejam inseridos. No mundo
real, os sistemas de origem raramente atendem a esses padrões exigentes.
Você pode saber que os usuários precisam analisar vendar pelo sexo do cliente. Infelizmente, o
sistema de origem é completamente não-documentado, mas você encontra uma coluna chamada
Gen (gênero: M/F) em uma tabela chamada CUS_WeX4. Investigação adicional mostra que a
coluna pode armazenar dados relacionados ao sexo do cliente. Suponha que você possa
determinar que ela contém 682.370 linhas e que a distribuição de dados é como se segue:
M 234543
F 342322
Mail 5
Femal 9
Female 4345
Yes 43456
No 54232
Male 3454
Girl 4
Agora você tem mais evidências de que essa é a coluna correta e também tem uma idéia dos
desafios que o aguardam no projeto do processo de ETL.
Em outras palavras, o conhecimento da distribuição dos dados é essencial em muitos casos, não
apenas para identificar as colunas apropriadas, mas também para começar a entender (e, em
última análise, projetar) o processo de transformação.
Use o perfil de dados para examinar a distribuição deles nos sistemas de origem
No passado, obter uma compreensão da distribuição de dados em sistemas de origem significava
executar várias consultas (geralmente GROUP BYs) nas tabelas do sistema de origem para
determinar o domínio de valores em cada coluna. As informações podiam ser comparadas àquelas
fornecidas pelos peritos em domínio e pelas transformações definidas.
O Integration Services possui uma tarefa de Criação de Perfil de Dados (Data Profiling) que torna a
primeira parte dessa tarefa muito mais fácil. Você pode usar as informações que coleta usando o
Criador de Perfil de Dados para definir regras de transformação de dados apropriadas para
assegurar que seu data warehouse contenha dados “limpos” depois do ETL, o que leva a
resultados analíticos mais precisos e confiáveis. O Criador de Perfil de Dados é uma tarefa de fluxo
de dados no qual você pode definir as informações de perfil de que precisa.
Oito perfis de dados estão disponíveis; cinco deles analisam colunas individuais:
Razão Nula de Coluna
Distribuição de Valor de Coluna
Distribuição de Comprimento de Coluna
Estatísticas de Coluna
Padrão de Coluna
Três analisam várias colunas ou relações entre tabelas e colunas:
Chave Candidata
Dependência Funcional
Inclusão de Valor
Vários perfis de dados para várias colunas ou combinações delas podem ser computados com uma
tarefa do Criador de Perfil de Dados e o resultado pode ser direcionado para um arquivo XML ou
variável de pacote. O primeiro é a melhor opção para trabalho de design de ETL. Um Visualizador
de Perfil de Dados, mostrado na Figura 4, é fornecido como um executável autônomo que pode ser
usado para examinar o arquivos XML e, assim, o perfil dos dados.
Figura 4: Visualizador de Perfil de Dados
Projete desde o início para dividir grandes tabelas, particularmente grandes tabelas de
fatos
Não importa como a indexação é boa e o hardware rápido, tabelas grandes podem levar a
operações de gerenciamento de sistema demoradas, como criação de índices e remoção de dados
antigos. Isso pode ser particularmente aparente para grandes tabelas de fatos. Assim, divida as
tabelas em partições se forem grandes. Em geral, se uma tabela for maior que 50 GB, você deve
dividi-la (consulte Gerenciamento, Consulta e Instalação de Data Warehouse Relacional mais adiante neste white
paper).
Planeje eliminar dados antigos desde o início
Uma das principais funções de um data warehouse é acompanhar o histórico de negócios da
empresa — algo que os sistemas de origem geralmente fazem de maneira particularmente ruim.
Acompanhar o histórico significa que o data warehouse adquirirá vastas quantidades de dados ao
longo do tempo. Conforme os dados envelhecem, são acessados com cada vez menos freqüência
e também de maneira diferente (tipicamente como agregações em vez dos detalhes). No fim
torna-se necessário tratar dados antigos de maneira diferente, talvez usando armazenamento
mais lento e mais barato, talvez armazenando apenas as agregações, removendo-os
completamente ou outro plano. É vital planejar isso logo no começo. A divisão em partições facilita
muito isso (consulte Gerenciamento, Consulta e Instalação de Data Warehouse Relacional mais adiante neste
white paper).
Práticas Recomendadas: Especificando o Hardware
Projete para desempenho de operação de manutenção, não apenas de consulta
Especificar o hardware nunca é fácil, mas é uma prática comum (e boa) quando se tomam
decisões sobre hardware concentrar a maior parte da atenção no desempenho das consultas pelo
simples motivo de que isso é vital. Contudo, também é importante não deixar de lado outras
considerações.
Pense sobre o desempenho de pesquisas. Uma visão simplista é que ele se escalona de maneira
linear com o tamanho dos dados. Gerações de DBAs aprenderam da maneira mais difícil que ele
freqüentemente não se dimensiona dessa maneira — dobre o tamanho dos dados e a consulta
pode demorar dez vezes mais para se executar — assim eles podem planejar os requisitos de
hardware de acordo. Mas essa é uma abordagem um tanto simplista.
Por exemplo, considere uma consulta executada em uma tabela de 1 terabyte. Seu desempenho é
limitado por muitos fatores — indexação, memória, número de linhas examinadas, número de
linhas retornadas, etc. Imagine que a consulta use índices eficientemente, examine um número
fixo de linhas e retorne apenas algumas linhas. Se executarmos a mesma consulta em 2 terabytes
de dados na mesma tabela e supusermos que a indexação foi aplicada de maneira eficiente e que
o número de linhas examinadas e retornadas não seja significativamente diferente, o tempo de
resposta é aproximadamente o mesmo. Certamente não será nada como o dobro do tempo. Em
outras palavras, o desempenho de consulta às vezes pode escalonar-se de uma forma não-linear
para nossa vantagem. Contudo, outros fatores, como tempo de backup, se escalonam de forma
linear da maneira esperada. Fazer o backup do dobro dos dados consome o dobro dos recursos
(como tempo de CPU e largura de banda de E/S), que podem afetar as especificações de hardware
necessário para atender aos seus requisitos.
Em outras palavras, quando projetamos grandes sistemas de BI, devemos ter o cuidado de
considerar todos os fatores relevantes. Isso não significa que o desempenho de consulta não seja
importante; ele ainda é a consideração mais importante. Mas também é um erro enfocar apenas
essa questão. Outros fatores, como a manutenção do sistema de BI (tanto os componentes
relacionais como os multidimensionais) também deve ser considerada cuidadosamente.
Especifique memória principal suficiente para que a maioria das consultas nunca faça
E/S
Segundo os engenheiros do Microsoft SQL Server Customer Advisory Team, na maioria dos data
warehouses os dados são acessados de maneira muito irregular. De longe, a maioria das consultas
acessa alguma proporção dos mesmos 20% do total; em outras palavras, cerca de 80% dos dados
raramente são acessados. Isso significa que, no geral, a E/S do disco para o warehouse se reduz
muito se houver memória principal suficiente para conter cerca de 20% dos dados totais.
ETL
O campo de ETL é a área mais complexa do data warehousing [Hath07]. Os dados em si são
complexos e exigem a aplicação de uma grande quantidade de técnicas e processos antes que
sejam carregados no warehouse. Elas incluem mesclagem, carimbo de data/hora, desduplicação e
sobrevivência, conversão de tipo de dados, normalização e/ou desnormalização, inclusão de
chaves substitutas e limpeza geral.
Práticas Recomendadas: Simplifique o Processo de ETL e Melhore o Desempenho
Use p SSIS para simplificar a programação de ETL
O SSIS foi projetado desde o início para simplificar o processo de desenvolvimento de seu código
de ETL. Suas ferramentas automatizadas e transformações e conectores predefinidos reduzem
muito o número de linhas de código de ETL que você tem de escrever em comparação com a
programação em uma linguagem de alto nível tradicional ou de script. É uma prática recomendada
usar o SSIS no lugar desses métodos caso a redução na quantidade de código para ETL e
simplificação da manutenção de tarefas de ETL forem importantes para você.
O SSIS fornece um conjunto abrangente de recursos para construir data warehouses, incluindo:
Uma arquitetura de pipeline escalonável que fornece uma plataforma 64 bits multithreaded
para transformar volumes de dados crescentes em janelas de lote menores,
Conectividade para RDBMs não-SQL Server, mainframes, sistemas de ERP e outras fontes de
dados heterogêneas.
Um grande número de transformações complexas para consolidar dados a partir de vários
sistemas.
Transformações de limpeza de dados avançadas para reduzir a duplicação e dados sujos.
Compatibilidade com data warehouse pela capacidade pronta de gerenciar dimensões de
mudança lenta.
Integração direta com a plataforma de BI do SQL Server BI para construir diretamente cubos
do Analysis Services e carregar diretamente em partições dele.
Extensibilidade com o poder do .NET pela incorporação de scripts personalizados e
componentes conectáveis diretamente no fluxo de integração de dados.
Simplifique o processo de transformação usando tarefas de Criação de Perfil de Dados
A nova tarefa de Criação de Perfil de Dados no Integration Services pode ser usada para
compreender-se inicialmente a natureza dos dados de origem para fins de projeto (consulte Criando
sua Solução de Data Warehouse/BI). Contudo, os perfis que ela produz também podem ser usados para
aplicar regras comerciais a dados como parte do processo de transformação. Suponha, por
exemplo, que a regra comercial diga que os dados de uma determinada fonte são aceitáveis
apenas se o número de nulos não exceder 1%. Os perfis produzidos por uma tarefa de Criação de
Perfil de Dados podem ser usados para aplicar essa regra.
Note que as tarefas de Criação de Perfil de Dados fazem o perfil de tabelas do SQL Server; dados
em outros locais devem ser carregados em tabelas de preparo antes que o perfil possa ser criado.
Simplifique usando MERGE e INSERT INTO
Quer esteja extraindo dos sistemas de origem para um ODS (Operational Data Store) ou do ODS
para as tabelas de fatos ou de dimensões, você deve gerenciar o movimento das mudanças (os
deltas) que ocorreram. Durante essa fase você freqüentemente precisa de múltiplas consultas de
DML (Data Manipulation Language – Linguagem de Manipulação de Dados) para executar um
movimento lógico dos deltas para dentro da tabela relevante. Isso é particularmente verdadeiro
quando você tem de lidar com dimensões de alteração lenta (e quem não tem?).
O SQL Server 2008 permite a você combinar essas consultas múltipas em uma instrução MERGE.
MERGE
A instrução MERGE executa operações de inclusão, atualização ou exclusão em uma tabela de
destino com base nos resultados de uma junção com uma tabela de origem.
A instrução MERGE fornece três tipos de cláusulas WHEN:
WHEN MATCHED permite que você faça UPDATE ou DELETE da linha determinada na tabela de
origem quando as linhas de origem e de destino corresponderem a algum(ns) critério(s).
WHEN NOT MATCHED [BY TARGET] permite que você faça INSERT de uma linha no destino
quando ela existir na origem, mas não no destino.
WHEN NOT MATCHED BY SOURCE permite que você faça UPDATE or DELETE da linha
determinada na tabela de destino quando ela existir no destino, mas não na origem.
Você pode especificar uma condição com cada uma das cláusulas WHEN para escolher que tipo de
operação de DML deve ser executado na linha.
A cláusula OUTPUT para a instrução MERGE inclui uma nova coluna virtual chamada $action que
você pode usar para identificar a ação de DML que foi executada em cada linha.
Para ilustrar o uso da instrução MERGE, imagine que tem uma tabela de Employee (Funcionário):
EmpID Name Title IsCurrent1 Jones Mrs. Yes2 Smith Prof. Yes3 Brown Mr Yes4 Wilson Dr. Yes5 Carlton Dr. Yes
e uma tabela de alterações:
EmpID Name Title IsCurrent1 Jones Prof. Yes6 Heron Mr. Yes
Dimensão de alteração lenta Tipo 1
Suponha que a tabela Employee seja uma dimensão de alteração lenta Tipo 1, o que significa que
as alterações no campo Title simplesmente têm permissão de substituir o valor existente e
nenhum histórico da alteração nem o valor anterior são mantidos. Suponha também que novas
linhas na origem também sejam incluídas na tabela. Você pode gerenciar este caso simples com
uma instrução MERGE:
MERGE Employee as TRG
USING EmployeeDelta AS SRC
ON (SRC.EmpID = TRG.EmpID)
WHEN NOT MATCHED THEN
INSERT VALUES (SRC.EmpID, SRC.Name, SRC.Title, 'Yes')
WHEN MATCHED THEN
UPDATE SET TRG.Title = SRC.Title
Se incluirmos uma cláusula OUTPUT como esta:
OUTPUT $action, SRC.EmpID, SRC.Name, SRC.Title;
teremos o seguinte conjunto de linhas de resultado além do efeito na tabela Funcionários:
$action EmpID Name TitleINSERT 6 Heron Mr.UPDATE 1 Jones Prof.
Isso pode ser muito útil com depuração, mas também se revela muito útil com dimensões de
alteração lenta Tipo 2.
Dimensões de alteração lenta Tipo 2
Lembre-se de que em uma dimensão de alteração lenta Tipo 2 Recall um novo registro é
acrescentado na tabela de dimensão Funcionários independentemente de se um registro de
funcionário já existe, Por exemplo, queremos preservar a linha existente para Jones, mas definir o
valor IsCurrent naquela linha em ‘Não’. Então queremos inserir as duas colunas da tabela delta (a
origem) no destino.
MERGE Employee as TRG
USING EmployeeDelta AS SRC
ON (SRC.EmpID = TRG.EmpID AND TRG.IsCurrent = 'Yes')
WHEN NOT MATCHED THEN
INSERT VALUES (SRC.EmpID, SRC.Name, SRC.Title, 'Yes')
WHEN MATCHED THEN
UPDATE SET TRG.IsCurrent = 'No'
OUTPUT $action, SRC.EmpID, SRC.Name, SRC.Title;
Esta instrução define o valor de IsCurrent em ‘Não’ na linha existente para Jones e insere a linha
para Heron da tabela delta na tabela Funcionários. Contudo, ela não insere a nova linha para
Jones, Isso não representa um problema porque podemos tratar disso com a nova funcionalidade
INSERT, descrita a seguir. Além disso, temos o resultado que, neste caso, é:
$action EmpID Name TitleINSERT 6 Heron Mr.UPDATE 1 Jones Prof.
Nova funcionalidade para INSERT
Podemos combinar a capacidade de lançar os dados com uma nova capacidade no SQL
Server 2008 fazer instruções INSERT consumirem os resultados das instruções de DML. Essa
capacidade de consumir resultados pode, é claro, ser usada com muita eficiência (e simplicidade)
como se segue:
INSERT INTO Employee (EmpID, name, Title)
SELECT EmpID, name, Title from EmployeeDelta
Se combinarmos essa nova capacidade com o resultado acima, temos a capacidade sinérgica de
extrair a linha que foi atualizada (Jones) e inseri-la na tabela Funcionários para conseguir o efeito
desejado no contexto de dimensões de alteração lenta Tipo 2:
INSERT INTO Employee( EMPID, Name, Title, IsCurrent)
SELECT EMPID, Name, Title, 'Yes'
FROM
(
MERGE Employee as TRG
USING EmployeeDelta AS SRC
ON (SRC.EmpID = TRG.EmpID AND TRG.IsCurrent = 'Yes')
WHEN TARGET NOT MATCHED THEN
INSERT VALUES (SRC.EmpID, SRC.Name, SRC.Title, 'Yes')
WHEN MATCHED THEN
UPDATE SET TRG.IsCurrent = 'No'
OUTPUT $action, SRC.EmpID, SRC.Name, SRC.Title
)
As Changes (action, EmpID, Name, Title)
WHERE action ='UPDATE';
MERGE no SQL Server 2008 foi implementado para obedecer ao padrão SQL-2006. O principal
motivo para a introdução MERGE no padrão SQL e no SQL Server 2008 é sua utilidade em
gerenciar dimensões de alteração lenta, mas vale lembrar que tanto MERGE como INSERT com
resultado têm muitas outras aplicações tanto dentro do data warehousing especificamente como
em bancos de dados em geral.
Termine todas as instruções SQL com ponto-e-vírgula no SQL Server 2008
Antes do SQL Server 2005, o Transact-SQL era relativamente relaxado a respeito do ponto-e-
vírgula; agora algumas instruções (inclusive MERGE) exigem esse terminador. Se você terminar
todas as instruções de SQL com um ponto-e-vírgula, evita problemas quando o uso deles for
obrigatório.
Se você não puder tolerar o tempo de inatividade, considere usar partições “pingue-
pongue”
Imagine que você tem uma tabela de fatos que é particionada por mês. Estamos em agosto. Você
precisa carregar os dados de hoje na partição de agosto, mas seus usuários não podem tolerar o
impacto no desempenho e conflitos de bloqueio potenciais em que você incorrerá ao carregá-los.
Copie a partição de agosto em outra tabela (uma tabela de trabalho), carregue os dados naquela
tabela, indexe-a como necessário e depois simplesmente alterne as partições entre as duas
tabelas.
Use registro mínimo para carregar dados com precisão onde você os quiser o mais
rápido possível
Gravar dados em um banco de dados tipicamente envolve dois processos de gravação em disco
separados, gravando uma vez no banco de dados e outra no log (assim as transações podem ser
revertidas ou refeitas). Quando da inclusão de dados em uma tabela existente é, de fato, possível
gravar apenas uma vez em alguns casos usando-se o recurso INSERT registrado minimamente.
O registro mínimo permite que transações sejam revertidas, mas não suporta recuperação de
ponto no tempo. Ele está disponível apenas nos modelos de registro em lotes e de recuperação
simples. No SQL Server 2008, o registro mínimo pode ser usado com instruções Transact-SQL
INSERT INTO…SELECT FROM Transact-SQL quando se insere um grande número de linhas em uma
tabela existente se forem inseridas em uma tabela vazia com um índice clusterizado e nenhum
índice não-clusterizado, ou um heap, vazio ou não, sem índices. (Para detalhes completos e
qualquer alteração mais recente, consulte os SQL Server 2008 Books Online.)
Isso estende o suporte para registro mínimo, que no SQL Server 2005 incluía operações de
importação em lotes, SELECT INTO, criação de índices e reconstrução.
Um grande benefício do registro mínimo é que ele acelera o carregamento de partições ou tabelas
vazias que estão em grupos de arquivos específicos. No SQL Server 2005, você podia conseguir
efetivamente o mesmo efeito usando uma solução de contorno que envolvia mudar o grupo de
arquivos padrão e executar um SELECT INTO para obter registro mínimo. Em seguida o grupo de
arquivos padrão seria devolvido a seu estado inicial. Agora você pode simplesmente criar uma
tabela no(s) grupo(s) de arquivos em que quiser que ela esteja, definir o esquema de partições e
em seguida carregá-la com INSERT INTO tbl WITH(NOLOCK) SELECT FROM e conseguir registro
mínimo.
O registro mínimo facilita muito colocar os dados onde você os quer e gravá-los no disco apenas
uma vez. Como um bônus adicional, o desempenho do carregamento é aumentado e a quantidade
de espaço de log necessário é reduzido.
Simplifique a extração de dados usando Captura de Dados de Alterações nos sistemas
de origem do SQL Server
O SQL Server 2008 tem um novo recurso de rastreamento de dados que é particularmente
benéfico em data warehousing. O processo de Captura de Dados de Alterações rastreia mudanças
em tabelas de usuários e as reúne em um formato relacional. Um uso típico seria rastrear
mudanças em um banco de dados operacional para inclusão posterior no warehouse.
O processo de captura coleta dados de alterações a partir do log de transações do banco de dados
e os insere em uma tabela de mudanças. Metadados sobre cada transação também são inseridos
em uma tabela para que as mudanças possam ser organizadas com relação ao tempo. Isso
permite a identificação, por exemplo, do tipo de alteração feita em cada coluna ou de colunas
alteradas em uma linha atualizada. Também é possível solicitar todas as linhas que mudaram
entre dois horários/datas. A Captura de Dados de Alterações é um grande passo na direção da
melhoria do desempenho de extração, e torna a programação da porção de captura de alterações
de suas tarefas de ETL muito mais fácil.
Simplifique e acelere o ETL com Pesquisa Aprimorada
O desempenho do componente de Pesquisa foi muito aprimorado no SQL Server 2008 Integration
Services e está muito mais fácil de programar.
Uma Pesquisa confirma se cada linha em uma seqüência possui uma correspondente em um
conjunto de dados de referência. Isso é usado freqüentemente dentro do processo de ETL para
verificar, por exemplo, a coluna ProductID em uma tabela de fatos (atuando como a fonte de
dados) em comparação com uma tabela de dimensões contendo um conjunto completo de
produtos (o conjunto de referência).
No SQL Server 2008, a transformação de Pesquisa suporta dois tipos de conexão quando se
conecta ao conjunto de dados de referência: o gerenciador de conexão de Cache e o gerenciador
de conexão de DB OLE. O conjunto de dados de referência pode ser um arquivo de cache, uma
tabela ou exibição existente ou o resultado de uma consulta SQL.
Dados de referência geralmente são armazenados em cache para eficiência e agora um fluxo de
dados pode ser usado para popular o cache. Muitas fontes potenciais podem ser usadas como
dados de referência: Excel, XML, texto, serviços da Web — qualquer coisa dentro do alcance de um
provedor ADO.Net. No SQL Server 2005, o cache podia ser populado apenas por uma consulta SQL
e uma Pesquisa podia apenas tomar dados de conexões OLE/DB específicas. O novo componente
de Transformação de Cache (Cache Transform) popula um cache definido pelo gerenciador de
conexão de Cache.
O cache não precisa mais ser recarregado cada vez que é usado: isso elimina a penalidade de
tempo incorrida pelo recarregamento a partir de uma fonte relacional. Se um conjunto de dados de
referência for usado por dois pipelines, o cache pode ser salvo em armazenamento de arquivos
permanente assim como na memória virtual para ficar disponível a várias Pesquisas dentro de um
pacote. Além disso, o formato de arquivo do cache é otimizado para velocidade e seu tamanho é
ilimitado.
O recurso miss-cache também é novo. Quando executado diretamente em um conjunto de dados,
um componente de Pesquisa pode adicionar ao cache quaisquer valores de chave a partir da fonte
onde não houver nenhum valor correspondente no conjunto de dados de referência. Assim, se a
Pesquisa tiver determinado que o conjunto de referência não contém, por exemplo, o valor 885,
não perde tempo inspecionando o conjunto de referência se ele aparecer nos dados de origem.
Sob certas condições este recurso pode produzir uma melhora de desempenho de 40%.
Finalmente, agora há um ‘resultado de Consulta sem correspondência’ (‘Lookup no match output’)
para o qual linhas ‘miss-cache’ podem ser direcionadas em vez de irem para o resultado de erro.
Configuração, Consulta e Gerenciamento de Data Warehouse Relacional
O banco de dados relacional é o coração de qualquer sistema de BI. Práticas recomendadas aqui
afetam não apenas o desempenho de todo o sistema, mas também sua flexibilidade e valor para a
empresa. Para uma discussão mais profunda sobre como obter o melhor desempenho de seu data
warehouse do SQL Server 2008 para data warehouse de larga escala, consulte o documento
complementar [Han08].
Práticas Recomendadas: Geral
Use o gerenciador de recursos para reservar recursos para trabalho importante como
carregamento de dados e para evitar consultas desgovernadas
A carga de trabalho em um data warehouse pode ser considerado como uma série de solicitações
que competem pelos recursos disponíveis. No SQL Server 2005, havia um único pool de recursos e
as solicitações competiam igualmente por eles. O gerenciador de recursos do SQL Server 2008
permite que os recursos disponíveis sejam alocados em vários pools (até 20). As solicitações são
classificadas de modo a se enquadrar em grupos específicos e estes são alocados para os pools de
recursos – muitas solicitações para cada pool de recursos. Podem-se alocar altos recursos para
processos que devem completar-se rapidamente (como o carregamento dos dados) quando são
executados. Além disso, relatórios importantes podem receber recursos suficientes para assegurar
que se completem rapidamente [Bar08].
Muitos usuários acham a imprevisibilidade de desempenho altamente frustrante. Se isso ocorrer, é
benéfico usar o gerenciador para alocar recursos de uma forma que assegure um desempenho
mais previsível. Ao longo do tempo, conforme a experiência com o gerenciador de recursos
aumenta, esperamos que isso evolua para uma prática recomendada.
Suponha, como freqüentemente é o caso, que o data warehouse seja usado para relatórios e para
processos de ETL e que seja configurado para tempo de inatividade zero ou mínimo durante
carregamentos. Em algumas empresas (apesar do que a equipe de BI possa preferir), a geração de
relatórios em tempo hábil é considerada mais importante que a conclusão do carregamento diário.
Neste caso, o grupo de carga de trabalho de relatórios receberia uma prioridade alta.
Ou, por contraste, os processos de carregamento podem receber uma prioridade alta para garantir
o tempo de inatividade mínimo que os negócios exigem.
Finalmente, vale notar que o gerenciador de recursos também permite a você monitorar o
consumo de recursos de cada grupo, o que significa que o uso de recursos pode ser mais bem
entendido, o que, por sua vez, permite um gerenciamento melhor.
Planeje cuidadosamente quando reconstruir estatísticas e índices
O otimizador de consultas usa informações das estatísticas do banco de dados (número de linhas,
distribuição de dados, etc.) para ajudar a determinar o plano de consulta ideal. Se as estatísticas
forem imprecisas, um plano menos ideal pode ser escolhido, o que degrada o desempenho da
consulta.
Se você puder dispor do tempo durante seu processo de ETL, reconstrua as estatísticas depois de
cada carregamento do data warehouse. Isso assegura que as estatísticas estejam sempre exatas.
Contudo, reconstruir estatísticas consome tempo e recursos. Além disso, o tempo entre
reconstruções é menos importante que a mudança na distribuição dos dados que ocorreu.
Quando o data warehouse é novo e está em evolução e também é relativamente pequeno, faz
sentido atualizar as estatísticas freqüentemente, possivelmente após cada carregamento.
Conforme o warehouse amadurece você pode, às vezes, reduzir a freqüência de reconstrução sem
degradar significativamente o desempenho das consultas. Se for importante reduzir o custo da
atualização de estatísticas, você pode determinar o ritmo de renovação apropriada monitorando o
desempenho das pesquisas à medida que reduz a freqüência de renovações. Tenha em mente que
se o grosso de suas pesquisas visar somente os dados carregados mais recentemente, você não
terá estatísticas para aqueles dados a menos que as atualize depois de cada carregamento. Essa é
uma situação bastante comum, e é por isso que recomendamos estatísticas após cada
carregamento do data warehouse por padrão.
Práticas Recomendadas: Data/Hora
Use o tipo correto de dados de hora/data
O SQL Server 2008 possui seis tipos de data e hora:
date
datetime2
datetime
datetimeoffset
smalldatetime
time
Eles armazenam informações temporais com graus variáveis de precisão. Escolher o tipo certo
permite que você mantenha informações de hora e data exatas de uma forma que se ajusta
melhor a seu aplicativo, poupa espaço de armazenamento e melhora o desempenho das
pesquisas. Por exemplo, muitas aplicações mais antigas do SQL Server usam datetime para
datas, mas deixam a porção da hora em branco. Isso ocupa mais espaço do que o necessário.
Agora você pode usar o novo tipo date para essas colunas, o que ocupa apenas três bytes contra
oito com datetime.
Considere usar datetime2 em algumas portas de banco de dados
datetime2 pode ser considerado uma extensão do tipo datetime existente – ele combina uma
data e um horário com base no sistema de 24 horas. Contudo, datetime2 possui uma faixa de
data maior, uma precisão fracionária padrão maior e uma precisão opcional definida pelo usuário.
A precisão é tal que ele pode armazenar frações de segundo com até sete dígitos — em outras
palavras, dentro de dez milionésimos de segundo. Esse novo recurso pode influenciar a
importação de alguns aplicativos de data warehouse.
Por exemplo o tipo de dado TimeStamp DB2 possui uma precisão de um milionésimo de segundo.
Em um aplicativo de data warehouse escrito em DB2, se a lógica do aplicativo for construída para
assegurar que novos registros sejam criados com um intervalo mínimo de um microssegundo (que
não é uma limitação particularmente onerosa), hora/data podem ser usados como uma ID
exclusiva. Podemos debater se é uma prática melhor projetar um aplicativo de banco de dados
dessa maneira, mas o fato é que isso às vezes é feito com DB2.
Antes do advento do datatime2, se um aplicativo desses fosse importado para o SQL Server, sua
lógica teria de ser reescrita porque o datetime fornece uma precisão de somente um milésimo de
segundo. Como o datetime2 é dez vezes mais preciso que o TimeStamp do DB2, o aplicativo
agora pode ser importado sem alteração na lógica.
Práticas Recomendadas: Compressão e Criptografia
Use compressão PAGE para reduzir o volume de dados e acelerar as consultas
Uma capacidade completa de compressão de dados foi adicionada ao SQL Server 2008; as
melhorias vêm em dois tipos — linha e página.
A compressão de linhas armazena todos os campos em formato de largura variável. Se os dados
forem compactáveis, a compressão de linha reduz o número de bytes necessários para armazená-
los.
A compressão de página faz o mesmo, mas a compactação ocorre entre as linhas dentro de cada
página. Um dicionário no nível da página é usado para armazenar valores comuns, que são então
referenciadas a partir das próprias linhas em vez de armazenadas de maneira redundante. Além
disso, prefixos comuns de valores de coluna são armazenados somente uma vez na página. Como
uma ilustração de como a compressão de prefixos pode ajudar, considere códigos de produto em
que os prefixos são freqüentemente similares.
Code Quantity
A-F234-10-1234 1834
A-F234-10-1235 1435
A-F234-10-1236 1237
A-F234-10-1237 1546
A-F234-10-1238 1545
A-F234-10-1239 1543
A-F234-10-1240 1756
A-F234-10-1241 1435
A-F234-10-1242 1544
Isso pode ser comprimido para:
A-F234-10-12 1000
Code Quantity
34 834
35 435
36 237
37 546
38 545
39 543
40 756
41 435
42 544
Mesmo uma coluna como Quantity (Quantidade) pode beneficiar-se da compressão. Para mais
detalhes sobre como a compressão de linhas e páginas funciona no SQL Server 2008, consulte os
SQL Server 2008 Books Online.
Tanto a compressão de página como a de linha podem ser aplicadas a tabelas e índices.
O benefício óbvio é que você precisa de mesmo espaço em disco. Em testes, houve compressão
de duas a sete vezes, com três vezes sendo típica. Isso reduz seus requisitos de disco em cerca de
dois terços.
Um benefício menos óbvio, mas potencialmente mais valioso, é encontrado na velocidade de
consulta. O ganho aqui vem de dois fatores. A E/S de disco é substancialmente reduzida porque
menos leituras são necessárias para adquirir a mesma quantidade de dados. E a percentagem dos
dados que podem ser mantidos na memória principal aumenta como uma função do fator de
compressão.
A vantagem da memória principal é o ganho em desempenho possibilitado pela compressão e
aumento de tamanho da memória principal.
O desempenho de consultas pode melhorar dez vezes ou mais se você puder colocar e manter na
memória principal todos os dados que vai consultar. Seus resultados dependem da velocidade
relativa de seu sistema de E/S, memória e CPUs. Um data warehouse moderadamente grande
pode caber completamente na memória principal de um servidor de quatro processadores
comercial que possa acomodar até 128 GB de RAM — RAM que está cada vez mais acessível em
termos financeiros. Essa quantidade de RAM pode conter todo um data warehouse típico de 400
GB, compactado. Existem servidores maiores, com até 2 terabytes de memória, disponíveis que
podem acomodar um data warehouse de 6 terabytes inteiros na RAM.
Há, é claro, o custo de CPU associado com a compressão. Isso é visto principalmente durante o
processo de carregamento. Quando a compressão de página é empregada, vimos a utilização da
CPU aumentar a um fator de 2.5. Alguns números específicos para compressão de página,
gravados durante testes em data warehouses de 600 GB e de 6 terabytes com uma carga de
trabalho de mais de cem consultas diferentes, são uma melhoria de 30 a 40% no tempo de
resposta de pesquisa com uma penalidade de tempo de CPU de 10 a 15%.
Assim, em data warehouses que não estão atualmente vinculados à CPU, você deve ver melhorias
significativas no desempenho de consultas a um custo de CPU baixo. Gravações têm mais
overhead de CPU que leituras.
Esta descrição das características de compressão deve permitir que você determine sua estratégia
de compressão ideal para tabelas e índices no warehouse. Pode não ser tão simples quanto aplicar
compressão a todas as tabelas e índices.
Por exemplo, suponha que você divida sua tabela de fatos em partições por tempo, tais como
Trimestre 1, Trimestre 2 e assim por diante. A partição atual é Trimestre 4. Ela é atualizada todas
as noites, o Trimestre 3 muito menos freqüentemente e os Trimestres 1 e 2 nunca são atualizados.
Contudo, todas são consultadas intensivamente.
Depois de fazer testes, você pode descobrir que a melhor prática é aplicar compressão de linha e
página aos Trimestres 1 e 2, compressão de linhas ao Trimestre 3 e nenhuma ao Trimestre 4.
Seu desempenho variará, é claro, e testes são essenciais para estabelecer as melhores práticas
para seus requisitos específicos. Entretanto, a maioria dos data warehouses deve obter um
benefício significativo com a implementação de uma estratégia de compressão. Comece usando
compressão de página em todas as tabelas de fato e índices delas. Se isso causar problemas de
desempenho para carregamento ou consultas, considere reverter para compressão de linhas ou
nenhuma compressão em algumas ou em todas as partições.
Se você usar compressão e criptografia, faça nessa ordem
O SQL Server 2008 permite que os dados de tabela sejam criptografados. A prática recomendada
para usar isso depende das circunstâncias (consulte acima), mas tenha em mente que muito da
compressão descrita na prática recomendada anterior depende de se encontrar padrões repetidos
nos dados. A criptografia reduz ativa e significativamente os padrões nos dados. Assim, se você
pretender usar ambos, é imprudente primeiro criptografar e depois compactar.
Use compressão de backup para reduzir o consumo de memória para armazenamento
A compressão de backup está disponível agora e deve ser usada a menos que você encontre bons
motivos para não fazê-lo. Os benefícios são os mesmo de outras técnicas de compactação — há
ganhos em velocidade e volume. Prevemos que para a maioria dos data warehouses o ganho
primário da compressão de backup é a quantidade de memória de armazenamento reduzida e o
secundário é que o backup termina mais rapidamente. Além disso, uma restauração se executa
mais rápido porque o backup é menor.
Práticas Recomendadas: Particionamento
Particione grandes tabelas de fatos
Particionar uma tabela significa dividi-la horizontalmente em componentes menores (chamados
partições). O particionamento tem vários benefícios. Essencialmente, permite que os dados sejam
separados em grupos. Isso apenas tem várias vantagens em termos de gerenciamento. Partições
podem ser colocadas em diferentes grupos de arquivos para que seu backup possa ser feito
independentemente. Isso significa que podemos posicionar os dados em diferentes eixos por
motivos de desempenho. Em data warehouses isso significa que podemos isolar as linhas que
tenham mais probabilidade de alteração e executar atualizações, exclusões e inclusões naquelas
linhas apenas.
O processamento de consultas pode ser aprimorado pelo particionamento porque ele às vezes
permite que planos de consulta eliminem partições inteiras da consideração. Por exemplo, tabelas
de fato são freqüentemente particionadas por data, como por mês, por exemplo. Assim, quando
um relatório é executado nos números de julho, em vez de acessar um bilhão de linhas, ele pode
ter de acessar apenas 20 milhões.
Índice, assim como tabelas, podem ser (e freqüentemente são) particionados, o que aumenta os
benefícios.
Imagine uma tabela de fatos de um bilhão de linhas que não esteja particionada. Cada
carregamento (tipicamente noturno) significa inclusão, exclusão e atualização naquela tabela
enorme. Isso pode incorrer em altos custos de manutenção de índice, ao ponto em que pode não
ser praticável fazer as atualizações durante sua janela de ETL.
Se a mesma tabela for particionada por tempo, geralmente somente a partição mais recente deve
ser tocada, o que significa que a maior parte da tabela (e índices) permanece intocada. Você pode
descartar todos os índices anteriores ao carregamento e reconstruí-los posteriormente para evitar
overhead de manutenção de índice. Isso pode melhorar bastante seu tempo de carregamento.
Alinhe suas exibições indexadas com as partições
O SQL Server 2008 permite que você crie exibições indexadas alinhadas com suas tabelas de fatos
particionadas e ative e desative partições das tabelas de fatos. Isso funciona se as exibições
indexadas e a tabela de fatos forem particionadas usando-se a mesma função de partição.
Tipicamente, as tabelas de fatos e as exibições indexadas são particionadas pela chave substituta
que faz referência à tabela de dimensão Data. Quando você ativa uma nova partição, ou desativa
uma antiga, não tem de descartar as exibições indexadas primeiro e depois recriá-las. Isso pode
poupar muito tempo durante o processo de ETL. De fato, pode viabilizar o uso de exibições
indexadas para acelerar suas consultas quando não era praticável antes por causa do impacto
sobre seu ciclo de carregamento diário.
Projete seu esquema de particionamento para facilidade de gerenciamento acima de
tudo
No SQL Server 2008, não é necessário criar partições para obter paralelismo, como em produtos
concorrentes. O SQL Server 2008 suporta vários threads por partição para processamento de
consultas, o que simplifica significativamente o desenvolvimento e gerenciamento. Quando você
projetar sua estratégia de particionamento, escolha a largura de sua partição para a conveniência
de gerenciamento de seu ETL e ciclo de vida de dados. Por exemplo, não é necessário particionar
por dia para obter mais partições (o que pode ser necessário no SQL Server 2005 e outros
produtos de DBMS) se o particionamento por semana for mais conveniente para o gerenciamento
do sistema.
Para melhor desempenho paralelo, inclua um predicado de faixa de data explícito na
tabela de fatos em consultas, em vez de uma junção com a dimensão Data
O SQL Server geralmente faz um bom trabalho do processamento de consultas como a seguinte,
em que um predicado de faixa de data é especificado usando-se uma junção entre a tabela de
fatos e a dimensão de data:
select top 10 p.ProductKey, sum(f.SalesAmount)from FactInternetSales f, DimProduct p, DimDate dwhere f.ProductKey=p.ProductKey and p.ProductAlternateKey like N'BK-%'and f.OrderDateKey = d.DateKeyand d.MonthNumberOfYear = 1and d.CalendarYear = 2008and d.DayNumberOfMonth between 1 and 7group by p.ProductKeyorder by sum(f.SalesAmount) desc
Contudo, uma consulta como esta normalmente usa uma junção de loop aninhado entre a
dimensão de data e a tabela de fatos, o que pode limitar o paralelismo e o desempenho geral das
consultas porque, no máximo, um thread é usado para cada linha de dimensão de data
qualificada. Em vez disso, para o melhor desempenho possível, coloque um predicado de faixa de
data explícito na coluna de chave de dimensão da tabela de fatos e certifique-se de que as chaves
da dimensão de data estejam em ordem crescente de data. A seguir está um exemplo de consulta
com um predicado de faixa de data explícito:
select top 10 p.ProductKey, d.CalendarYear, d.EnglishMonthName, sum(f.SalesAmount)from FactInternetSales f, DimProduct p, DimDate dwhere f.ProductKey=p.ProductKey and p.ProductAlternateKey like N'BK-%'and OrderDateKey between 20030101 and 20030107and f.OrderDateKey=d.DateKeygroup by p.ProductKey, d.CalendarYear, d.EnglishMonthNameorder by sum(f.SalesAmount) desc
Este tipo de consulta tipicamente obtém um plano de consulta de junção hash e se paraleliza
totalmente.
Prática Recomendada: Gerencie Vários Servidores Uniformemente
Use Gerenciamento Baseado em Diretiva para impor boas práticas em vários servidores
O SQL Server 2008 introduz o Gerenciamento Baseado em Diretiva, que possibilita declarar
diretivas (como “todos os arquivos devem ser armazenados em um disco diferente do de dados”)
em um local e depois aplicá-las a vários servidores. Assim, uma prática recomendada (um tanto
recursiva) é configurar práticas recomendadas em um servidor e aplicá-las a todos. Por exemplo,
você pode construir três data marts que extraem dados de um data warehouse principal e usam
Gerenciamento Baseado em Diretiva para aplicar as mesmas regras a todos os data marts.
Recursos Adicionais
Você pode encontrar dicas adicionais relacionadas, na maioria, a obter a melhor escalabilidade e
desempenho do SQL Server 2008 no white paper complementar [Han08]. Essas dicas cobrem uma
variedade de tópicos, inclusive configuração de armazenamento, formulação de consultas,
indexação, agregados e mais.
Análise
Existem vários excelentes white papers sobre Práticas Recomendadas para análise tais como
Práticas Recomendadas de Design de OLAP para Analysis Services 2005, Práticas Recomendadas de Processamento para
Analysis Services, e 10 Práticas Recomendadas de Desempenho de Consulta para Analysis Services. Em vez de repetir
seu conteúdo, neste white paper nós enfocamos mais especificamente práticas recomendadas
para análise no SQL Server 2008.
Práticas Recomendadas: Análise
Considere seriamente o conselho de prática recomendada oferecido por avisos dos AMO
Bom projeto é fundamental para sistemas robustos e de alto desempenho, e a disseminação de
diretrizes de práticas recomendadas encoraja o bom projeto. Uma maneira completamente nova
de indicar onde práticas recomendadas podem ser úteis está incorporada no SQL Server 2008
Analysis Services.
O SQL Server 2008 Analysis Services mostra sugestões e avisos sobre design e práticas
recomendadas em tempo real enquanto você trabalha. Eles são implementados nos AMO (Analysis
Management Objects – Objetos de Gerenciamento de Análise) e exibidos na UI como sublinhados
ondulados azuis: pairar sobre um objeto sublinhado exibe o aviso. Por exemplo, um nome de cubo
pode ser sublinhado e o aviso pode dizer:
Os grupos de medidas ‘SalesProfit’ e ‘Profit’ possuem a mesma
dimensionalidade e granularidade. Considere unificá-los para melhorar
o desempenho. Evite cubos com uma única dimensão.
Mais de 40 avisos diferentes indicam onde a prática recomendada não está sendo seguida. Os
avisos podem ser descartados individualmente ou desligados globalmente, mas nossa
recomendação é segui-las até que você tenha uma razão ativa para não fazê-lo.
Use o writeback de MOLAP no lugar do writeback de ROLAP
Para certas classes de aplicativos comerciais (previsão, orçamento, what if, e assim por diante), a
capacidade de gravar dados de volta no cubo pode ser muito vantajosa.
Por algum tempo foi possível fazer o write-back de valores de células no cubo, nos níveis de folha
e de agregação. Uma partição especial de write-back é usada para armazenar a diferença (os
deltas) entre o original e o novo valor. Este mecanismo significa que o valor original continua
presente no cubo; se uma consulta MDX solicitar o novo valor, ele acessa as duas partições e
retorna o valor agregado do original e do delta.
Contudo, em muitos casos, apesar da necessidade comercial, considerações de desempenho têm
limitado o uso do write-back.
Na implementação anterior, a partição de write-back tinha de usar armazenamento ROLAP e isso
era freqüentemente a causa de desempenho insatisfatório. Para recuperar dados era necessário
consultar a fonte de dados relacionais e isso pode ser lento. No SQL Server 2008 Analysis Services,
partições de write-back podem ser armazenadas como MOLAP, o que remove esse afunilamento.
Embora seja verdade que esta configuração pode reduzir de maneira insignificante a velocidade da
operação de confirmação de write-back (tanto a tabela de write-back como a partição de MOLAP
devem ser atualizadas), o desempenho de consulta melhora muito na maioria dos casos. Um teste
no local de uma atualização de dois milhões de células mostrou uma melhoria de desempenho de
cinco vezes.
Use o backup do SQL Server 2008 Analysis Services em vez de cópia de arquivo
No SQL Server 2008 Analysis Services, o subsistema de armazenamento de backup foi reescrito e
seu desempenho foi bastante aprimorado, como mostrado na Figura 5.
Figura 5: Desempenho de backup no SQL Server 2005 Analysis Services versus SQL Server 2008
Analysis Services. X = Tempo, Y=Volume de dados
O backup agora é escalonado de forma linear e pode lidar com um banco de dados do Analysis
Services de mais de um terabyte. Além disso, as limitações no tamanho do backup e de arquivos
de metadados foram eliminadas. Sistemas lidando com grandes volumes de dados agora podem
adotar o sistema de backup e abandonar a cópia de sistema de arquivos brutos e apreciar os
benefícios da integração com o sistema transacional e da execução de backup em paralelo com
outras operações.
Embora a extensão fique inalterada, o formato do arquivo de backup mudou. Ele é totalmente
compatível com versões anteriores, assim é possível restaurar no SQL Server 2005 Analysis
Services um banco de dados com backup feito no SQL Server 2005 Analysis Services. Não é
possível, porém, salvar arquivos no formato antigo.
Escreva MDX mais simples sem se preocupar com o desempenho
Um novo recurso, computação em bloco (também conhecido como computação subespacial), foi
implementado no SQL Server 2008 Analysis Services e um dos principais benefícios que oferece é
desempenho de consulta MDX aprimorado. NO SQL Server 2005, contornos complexos eram
possíveis em alguns casos; agora o MDX pode ser escrito de maneira muito mais simples.
Cubos comumente contêm dados esparsos: é freqüente haver relativamente poucos valores em
uma grande quantidade de nulos. No SQL Server 2005 Analysis Services, consultas que tocavam
um grande número de nulos podiam realizar um cálculo com um valor nulo pela simples razão de
que mesmo que fosse logicamente inútil executar um cálculo com um valor nulo a consulta
processaria inutilmente todos os valores nulos da mesma forma que não-nulos.
A computação em bloco trata dessa questão e aumenta muito o desempenho dessas consultas. A
estrutura interna de um cubo é altamente complexa e descrição que se segue sobre como a
computação em bloco funciona é uma versão simplificada do tema todo. Ela dá, contudo, uma
idéia de como o ganho em velocidade é atingido.
O cálculo de MDX calcula um total acumulado de dois anos consecutivos:
CREATE MEMBER CURRENTCUBE.[Measures].RM
AS ([Order Date].[Hierarchy].PrevMember,[Measures].[Order Quantity])+
Measures.[Order Quantity],
FORMAT_STRING = "Standard",
VISIBLE = 2 ;
Estas tabelas mostram pedidos de pequenos subconjuntos de produtos e ilustram que há
pouquíssimos valores para os principais produtos e, 2003 e 2004:
2003 2004Produto 1 Produto 2 2 Produto 3 Produto 4 5Produto 5 Produto 6 Produto 7 3 1Produto 8 Produto 9
Esta consulta:
SELECT [Order Date].[Hierarchy].[all].[2004] on columns,
[Dim Product].[Product Key].[All].children on rows
From Foo
Where Measures.RM
retorna a medida RM calculada para todos os produtos pedidos em 2004.
No SQL Server 2005 Analysis Services, o resultado é gerando tomando o valor de uma célula de
2004 (o ano atual), encontrando-o na célula correspondente para o ano anterior e resumindo os
valores. Cada célula é tratada dessa maneira.
Esta abordagem contém dois processos lentos. Primeiro, para cada célula, o processador de
consultas navega até o período anterior para ver se um valor está presente. Na maioria das
estruturas hierárquicas sabemos que se dados para uma célula estiverem presentes em 2003,
estarão lá para todas as células daquele ano. A viagem para ver se há dados para o período
anterior precisa ser realizada apenas uma vez, que é o que acontece no SQL Server 2008 Analysis
Services. Esta faceta da computação em bloco acelera consultas independentemente da proporção
de valores nulos no cubo.
Depois, a soma de cada par de valores é calculada. Com um cubo esparso, uma alta proporção dos
cálculos resulta em nulo e tempo é desperdiçado fazendo-se esses cálculos. Se olharmos as
tabelas anteriores, é fácil ver que somente os cálculos dos produtos 2, 4 e 7 terão resultados que
não são nulos. Assim, no SQL Server 2008 Analysis Services, antes que qualquer cálculo seja
executado, linhas nulas são removidas dos dados de ambos os anos:
2003Produto 2 2Produto 7 3
2004Produto 4 5Produto 7 1
Os resultados são comparados:
2003 2004Produto 2 2 Produto 4 5Produto 7 3 1
e os cálculos realizados somente nas linhas que gerarão um resultado significativo.
O ganho de velocidade pode ser impressionante: em teste, uma consulta que levava dois minutos
e 16 segundos no SQL Server 2005 Analysis Services levou apenas oito segundos no SQL
Server 2008 Analysis Services.
Escalone horizontalmente se precisar de mais capacidade de hardware e o preço for
importante
Para melhorar o desempenho sob carga, você pode escalonar vertical ou horizontalmente.
Escalonar verticalmente é de uma simplicidade inegável: coloque o cubo em um servidor grande
de alto desempenho extra. Esta é uma excelente solução – é rápida e fácil e a decisão correta em
muitos casos. Contudo, também é cara porque esses servidores custam mais por CPU que vários
servidores melhores.
Versões anteriores do Analysis Services ofereciam uma solução de escalabilidade horizontal que
usava vários servidores eficazes em termos de custo. Os dados eram replicados nos servidores e
uma solução de balanceamento de carga, como o Microsoft NLB (Network Load Balancing –
Balanceamento de Carga de Rede) era instalado entre os clientes e os servidores. Isso funcionava,
mas incorria em custos adicionais de configuração e manutenção constante.
O SQL Server 2008 Analysis Services possui uma solução de escalabilidade horizontal chamada
SSD (Scalable Shared Database). Seu funcionamento é muito semelhante ao recurso de SSD no
mecanismo de banco de dados relacional do SQL Server 2005. Ele é formado por três
componentes:
Banco de dados de somente leitura – permite que um banco de dados seja designado para
‘somente leitura’
Alocação de armazenamento de banco de dados – permite que um banco de dados resida fora
da pasta Dados do servidor
Banco de dados de anexação/desanexação – um banco de dados pode ser anexado a ou
destacado de qualquer caminho UNC
Usados juntos, esses componentes facilitam construir uma solução de escalabilidade horizontal
para cubos de somente leitura do Analysis Services. Por exemplo, você pode conectar quatro blade
servers a um banco de dados de somente leitura compartilhado em uma SAN, e direcionar
consultas do SSAS a qualquer dos quatro, melhorando assim sua taxa de transferência a um fator
de quatro com hardware barato. O melhor tempo de resposta possível a consultas continua
limitado pelos recursos de um servidor individual, já que apenas um servidor executa cada
consulta.
Relatórios
Esta seção oferece práticas recomendadas para diferentes aspectos da criação de relatórios, tais
como melhorar o desempenho.
Práticas Recomendadas: Apresentação de Dados
Permita que usuários de TI e comerciais criem relatórios simples e complexos
Relatórios sempre caíram entre duas opiniões — pessoal de TI ou comercial deve projetá-los? O
problema é que usuários comerciais entendem o contexto comercial no qual os dados são usados
(o significado dos dados), enquanto o pessoal de TI entende a estrutura subjacente dos dados.
Para ajudar os usuários comerciais, no SQL Server 2005, a Microsoft introduziu o conceito de um
modelo de relatório. Ele foi construído por gente de TI para os usuários comerciais que então
escrevia relatórios com ele usando uma ferramenta chamada Configurador de Relatórios. Ele será
fornecido com o SQL Server 2008 e funcionará como antes.
Uma ferramenta nova, o Configurador de Relatórios, dirigida diretamente ao usuário avançado, foi
aperfeiçoada no SQL Server 2008. Este produto autônomo, completo com uma interface do Office
System 12, ostenta os recursos de layout completos do Designer de Relatórios e está disponível
como um download da Web.
Profissionais de TI eram bem servidos no SQL Server 2005 por uma ferramenta chamada Designer
de Relatórios no Visual Studio, que lhes permitia criar relatórios bastante detalhados. Uma versão
aperfeiçoada do Designer de Relatórios é fornecida com o SQL Server 2008 e é mostrada na Figura
6.
Figura 6: Designer de Relatórios no Visual Studio
Apresente dados da maneira mais acessível possível
Tradicionalmente, dados de grade foram apresentados aos usuários em tabelas, matrizes e listas.
Cada qual tinha suas forças, que é outra maneira de dizer que cada qual tem suas fraquezas. O
SQL Server 2008 Reporting Services combina as três em uma região de dados chamada Tablix.
Na Figura 7, a tabela à esquerda mostra o crescimento percentual e a matrix à direita mostra os
números reais.
Figura 7: Uma tabela e uma matriz
A Tablix mostrada na Figura 8 combina estes e acrescenta alguns totais.
Figura 8: Uma região de dados Tablix combinando recursos de tabela e de matriz
A região de dados Tablix dá aos usuários muito mais controle sobre o layout que tabelas, listas e
matrizes. Ela também permite a eles adicionar grupos de colunas, especificar aninhamentos
arbitrários em cada eixo, omitir cabeçalhos de linhas e de colunas opcionalmente e ter vários
membros linha/coluna paralelos em cada nível.
Apresente dados em relatórios que podem ser entendidos facilmente
A razão para gerar relatórios é transformar dados em informações para o usuário comercial. Muitos
acham gráficos mais fáceis de entender que números. O SQL Server 2008 Reporting Services
introduz o mostrador, uma nova forma de resultado visual. Um mostrador exibe um único valor a
partir dos dados. Como a Figura 9 mostra, mostradores são particularmente úteis para se criar
exibições fáceis de ler que comparam vários valores.
Figura 9: Exemplos dos mostradores que podem ser criados no SSRS
Os gráficos também estendidos para incluir polares, de faixas e de formas. A Figura 10 mostra
apenas um subconjunto dos disponíveis.
Figura 10: Um grande número de gráficos está disponível no SQL Server 2008 Reporting Services
Várias séries de dados agora podem ser exibidas em mais de um eixo, o usuário tem o controle
sobre quebras de escala no eixo e há suporte para formulas de tempo de execução.
Apresente dados a usuários em ambientes familiares
Relatórios agora podem ser processados como documentos do Word compatíveis com versões
anteriores e incluindo o Word 2000. Além disso, o processador de Excel foi aprimorado e agora
suporta recursos como regiões de dados aninhados, células mescladas e sub-relatórios.
Práticas Recomendadas
Estruture sua consulta para retornar apenas o nível de detalhe exibido no relatório
Use agregação no nível do relatório somente para subtotais no relatório, não para linhas de
detalhes. Lembre-se de que o agregado mais comumente usado, Sum, pode ser calculado em
qualquer ordem e ainda produzir o mesmo resultado. Embora outros agregados comumente
usados não possam, freqüentemente permitem decomposição em componentes mais simples e
reutilizáveis.
Por exemplo, se você estiver tentando mostra uma média em vários níveis de agrupamento e
também quiser subtotais, em vez de retornar linhas de detalhe e agregar tudo no relatório, você
pode decompor o cálculo em somas e contas. Depois pode reconstituir a média no relatório usando
este tipo de divisão:
Sum(Fields!Sum.Value)/Sum(Fields!Count.Value)
evitando assim a necessidade de passar linhas de detalhe para o relatório. Deixe que o banco de
dados faça o resumo e agregação em massa e use o SSRS para reunir e formatar resultados para
exibição.
Filtre usando parâmetros que são passados para a consulta
Como regra geral é melhor filtrar na consulta que no relatório (SELECT * FROM xyz WHERE field =
@param). Entretanto, se você fizer isso não poderá criar um instantâneo histórico do relatório sem
bloquear o valor do parâmetro. Se os usuários precisarem mudar o valor do parâmetro no
instantâneo, a prática recomendada é devolver todos os dados ao relatório e filtrar dentro dele.
Classifique dentro da consulta
O SSRS utiliza operações de classificação internamente, assim a ordem dos dados retornados da
consulta não são alterados dentro de cada instância de grupo, permitindo assim que a
classificação seja realizada na consulta.
Contudo, uma classificação que é baseada em valores de agregados é muito mais conveniente (e
geralmente mais eficiente) realizada no próprio relatório.
Evite usar sub-relatórios dentro de um agrupamento
Cada instância de sub-relatório é uma execução de consulta separada e um passo de
processamento separado para o SSRS. Para relatórios de detalhes mestres, é muito mais eficiente
simplesmente juntar os dados-mestres e de detalhes em sua consulta e depois agrupar pela
chave-mestra no relatório, exceto em casos em que o número de registros-mestres for pequeno
(em cujo caso o uso de sub-relatórios não é uma questão de desempenho).
Há dois casos em que sub-relatórios podem ser necessários:
Quando os dados mestres e de detalhes estiverem em fontes de dados diferentes. Puxar os
dados para um único data warehouse é recomendado neste caso. Se não for possível, servidor
conectado ao SQL Server ou recursos de conjunto de linhas aberto devem ser considerados.
Quando houver vários conjuntos independentes de registros de detalhes para cada registro-
mestre. Um exemplo pode ser exibir uma lista detalhada de vendas e devoluções de cada cliente.
Neste caso, relatórios detalhados são recomendados em vez de sub-relatórios embutidos, a menos
que o número de relatórios-mestres seja pequeno.
Limite os dados em gráficos ao que o usuário puder ver
Embora possa ser tentador incluir uma grande quantidade de detalhes em gráficos para aumentar
a exatidão, é melhor pré-agrupar os dados na consulta ou no relatório, limitando o número de
pontos de dados. Desenhar centenas de pontos em um espaço que ocupa apenas alguns pixels
degrada o desempenho e não faz nada para aumentar o apelo visual do gráfico.
Pré-classifique e pré-agrupe os dados em sua consulta
Você normalmente pode melhorar o desempenho agrupando e classificando os dados na consulta
para corresponderem à ordem de classificação exigida pelo relatório.
Use drillthrough em vez de drilldown quando volumes de dados de detalhes forem
grandes
Embora o mecanismo de processamento por demanda do SQL Server 2008 otimize a maioria dos
cálculos para itens que não são exibidos, tenha em mente que todos os dados são recuperados
para cada linha de detalhe, mesmo se seu estado de detalhamento inicial tenha recolhido tudo
para o nível mais alto de agregação. Além disso, todo agrupamento, classificação e filtragem
devem ser executados independentemente do estado de visibilidade ou de detalhamento. Assim,
se o usuário estiver tipicamente apenas interessado em ver uma pequena porcentagem dos dados
de detalhe, um relatório de detalhamento associado é uma escolha melhor.
Evite expressões complexas no cabeçalho e rodapé da página
Se o cabeçalho ou rodapé da página contiver expressões complexas (qualquer coisa ale de um
campo simples ou referência de parâmetro), o SSRS deve assumir que ele pode incluir uma
referência ao número total de páginas. Como resultado, o relatório todo deve ser paginado antes
que a primeira página seja processada. Caso contrário, a primeira página pode ser processada e
retornada imediatamente ao usuário, que não terá de esperar que o relatório inteiro seja paginado
primeiro.
Desative CanGrow em caixas de texto e AutoSize em imagens, se possível
Alguns processadores são mais eficientes se os tamanhos de todos os objetos do relatório forem
conhecidos e fixos.
Não retorne colunas de sua consulta que não for usar
Como todos os dados na consulta devem ser recuperados (e armazenados) pelo servidor de
relatórios, é mais eficiente retornar somente as colunas que serão usadas em seu relatório. Se o
conjunto de resultados não puder ser controlado (como quando os resultados são retornados de
um procedimento armazenado), é eficiente remover as definições de campo do conjunto de dados.
Embora as colunas extras sejam recuperadas, isso pelo menos evitará que sejam armazenadas.
Práticas Recomendadas: Arquitetura e Desempenho do Sistema
Mantenha o catálogo e o servidor de relatórios no mesmo computador
O Reporting Services gera e usa um banco de dados que é essencialmente um catálogo. Ele é
usado durante o processamento de relatórios para uma variedade de tarefas, inclusive gerenciar
os dados retornados de consultas. Embora seja possível armazenar esse banco de dados em um
servidor diferente do servidor de relatórios, fazer isso exige que os dados do relatório sejam
enviados por push desnecessariamente através da rede, o que reduz a execução de relatórios. É
uma prática muito mais recomendada manter o banco de dados do catálogo no servidor de
relatórios para evitar esse tráfego na rede e os atrasos associados.
Considere colocar o Reporting Services em um servidor diferente de seu data
warehouse
Embora puxar os dados das consultas pela rede reduza a velocidade das coisas, é benéfico não
deixar seu data warehouse e o SSRS competindo pela memória e pelo tempo de processamento.
Conclusão
Projetar e construir um data warehouse empresarial pode ser um grande esforço com um custo
expressivo. Data warehouses não são construídos como demonstrações de excelência técnica; são
investimentos feitos pela empresa e visam a proporcionar um alto retorno. Como documentos do
IDC e da Gartner demonstram, muito freqüentemente esses projetos têm mais características de
uma aposta que de um investimento inteligente – um retorno potencialmente alto, mas um alto
risco simultâneo de fracasso e perda.
Muito se aprendeu sobre fatores que estão associados com projetos de sucesso. Eles foram
destilados em várias práticas recomendadas, mudas das quais estão descritas aqui, abrangendo
processos comerciais, design e implementação técnica usando o SQL Server 2008. De fato, muitos
dos novos recursos do SQL Server 2008 foram projetados especificamente para permitir que essas
práticas recomendadas sejam implementadas facilmente.
Como uma proporção do esforço total exigido para se criar um data warehouse, aplicar essas
práticas recomendadas é barato e, ainda assim, fazer isso pode ter um grande impacto no sucesso
(e, portanto, no ROI) do projeto como um todo.
Para mais informações:
Site do SQL Server
SQL Server TechCenter
SQL Server Developer Center
Este documento foi útil? Envie-nos seus comentários. Diga em uma escala de 1 (ruim) a 5
(excelente), como classificaria este documento e porque o classificou assim? Por exemplo:
Está dando uma nota alta devido aos bons exemplos, excelentes capturas de tela,
redação clara ou outro motivo?
Está dando uma nota baixa devido a exemplos ruins, capturas de tela indistintas,
redação vaga?
Estes comentários nos ajudarão a melhorar a qualidade dos white papers que publicamos. Envie-nos
seu feedback.
Referências
[Kim08] Ralph Kimball et al., The Data Warehouse Lifecycle Toolkit: Practical Techniques for
Building Data Warehouse and Business Intelligence Systems, 2ª ed. John Wiley & Sons, 2008.
[Inmon05] William H. Inmon, Building the Data Warehouse: 4ª ed. John Wiley & Sons, 2005.
[IDC96] The Foundations of Wisdom: A Study of the Financial Impact of Data Warehousing.
International Data Corporation (IDC), 1996
[Gart07] More Than 50 Percent of Data Warehouse Projects Will Have Limited Acceptance or Will
Be Failures Through 2007: Gartner Business Intelligence Summit, Chicago, Março 2005
(http://www.gartner.com/it/page.jsp?id=492112).
[Han08] Eric N. Hanson et al., Scaling up Your Data Warehouse with SQL Server 2008, trabalho em
andamento, 2008.
[MMD07] William McKnight, Choosing Microsoft SQL Server 2008 for Data Warehousing, 2007.
Graeme Malcolm, Business Intelligence in SQL Server 2008, 2007.
Michelle Dumler, Microsoft SQL Server 2008 Product Overview, 2007.
[Hath07] Kamal Hathi, An Introduction to SQL Server 2008 Integration Services, 2007.
[Bar08] Boris Baryshnikov, SQL Server 2008 Resource Governor, trabalho em andamento, 2008.