Um log de visualização materializada (MV) pode ser usado para permitir que uma MV faça uma atualização rápida que modifica apenas os dados que foram alterados. No entanto, várias condições impedem que o MV use o log e, portanto, requerem uma atualização completa. A Oracle implementou uma atualização completa atômica como uma exclusão e inserção de cada registro. Isso é feito mesmo que não haja alterações nos dados.
Existe uma maneira de tornar essa replicação inteligente em relação à refazer geração ? Um MERGE seguido por um DELETE requer consultar a fonte duas vezes. Valeria a pena coletar os dados em massa para fazer uma BULK MERGE e DELETE? Existe uma maneira melhor?
Atualizar:
Eu explorei usando uma tabela temporária global como uma área de preparação. Embora eles usem menos da metade do refazer, eles ainda usam muito.
fonte
insert
As operações geram muito menos desfazerdelete
ouupdate
operações (quase nenhuma de fato). Tendo vários gtts para evitar quaisquer ops caros pode ser uma abordagem beminsert
s. Isso se aproxima dos resultados que estou vendo e é melhor, mas não tão bom quanto eu gostaria.append
dica) não são condições ideais para reduzir o refazer - executei alguns testes para mostrar o que quero dizer. Postado como resposta, porque eles não cabem em um comentárioRespostas:
Pretende-se apenas demonstrar o uso refazer de várias
insert
operações, em vez de responder a toda a pergunta. Os resultados na minha instância de 10g não são 100% determinísticos, mas o quadro geral permaneceu o mesmo toda vez que eu corria.Para as tabelas de heap, não sei por que o
insert /*+ append */
gerado refaz mais.testbed:
teste:
resultado:
fonte
Boa pergunta. Eu "resolvi" esse problema para a minha situação há algum tempo, fazendo os MVs e quaisquer índices neles NOLOGGING. Não havia sentido em minha situação - de qualquer maneira, eu estava atualizando completamente a exibição, por que precisaria refazer?
fonte