Pergunta

Estou familiarizado com as visualizações indexadas do SQL Server (ou visualizações materializadas do Oracle), e as usamos em nossos aplicativos OLAP.Eles têm o recurso muito interessante de poder usurpar um plano de execução e remapeá-lo para a visualização indexada sem precisar alterar o código existente.

Ou seja.Digamos que eu tenha um SPROC que foi uma associação muito cara.

SELECIONE [ALGUMAS COLUNAS]
FROM Tabela1 INNER JOIN Tabela2 [DETALHES]
JONE INTERNO TABELA3 [Bunch More Juns] ...

Se eu criei uma visualização indexada que continha um conjunto de resultados semelhante, o Query Optimizer provavelmente enviará o SPROC para minha visualização indexada, em oposição às tabelas base, e obterei um grande aumento de desempenho.

Agora digamos que eu queira usar visualizações indexadas em um OLTP!? Quero dizer, a maioria dos OLTPs (como este site) são relativamente pesados ​​em termos de leitura. Se eles tiverem junções caras, poderíamos acelerá-los bastante E potencialmente reduzir a contenção de bloqueio (http://www.codinghorror.com/blog/archives/001166.html).Melhor ainda é que você não precisaria alterar nenhum código, apenas criar a visualização indexada.

Mas isso também significa que o banco de dados fica maior, pois precisamos manter uma cópia desses dados na visualização indexada...

Alguém já usou visualizações indexadas para resolver problemas de contenção ou velocidade em um OLTP?Por que nunca vi isso em uso?

Foi útil?

Solução

As visualizações materializadas podem ser úteis para relatórios de OLTP, especialmente quando um grande número de linhas é agregado para obter os resultados.Os requisitos de espaço dependem completamente da quantidade de dados que você está salvando.Pense nisso como um cache.

O equilíbrio complicado é entre o quão recentes os dados precisam ser para os relatórios e o impacto que você pode ter no desempenho do OLTP.Se os dados um tanto obsoletos estiverem OK, você poderá agendar as atualizações nas visualizações durante um período em que a atividade do sistema estiver baixa.

A única vez que não consegui e precisei de dados muito atuais, acabei usando algum desenvolvimento customizado.Cada atualização na tabela base disparava um gatilho que gravava um registro em uma tabela de transações.A visualização analisou um agregado armazenado em cache, além do delta armazenado na tabela de transações.Conforme os recursos do sistema permitiram, as transações foram aplicadas à tabela agregada como transações delta.Isso me permitiu até os segundos dados, bom desempenho nos relatórios (a única agregação que aconteceu foram as transações recentes) e pouca carga no banco de dados (apenas dobrando o tamanho de cada gravação, sem recalcular um agregado enorme todas as vezes).

Infelizmente, sua manutenção era complexa e não usava ferramentas integradas simples.Se você puder esperar pelos dados do relatório, geralmente é melhor usar as visualizações materializadas integradas e adiar a atualização.

Outras dicas

Usamos visualizações materializadas para agilizar as coisas onde trabalho.Na maioria das vezes, para relatórios do sistema OLTP.Muitos de nossos relatórios são executados em um data warehouse, mas como atualizamos o warehouse durante a noite, até o momento os dados precisam vir das tabelas OLTP.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top