Advanced Row Compression - Quando você a economia de espaço de compressão?

As pessoas muitas vezes me perguntam quando o espaço está liberado para Advanced Row Compression em tabelas e quando eles podem ver os benefícios de compressão

. Aí pensei que seria uma boa ideia descrever este artigo com mais detalhes (eu já me referi  a isso anteriormente no meu post de blog sobre Estatísticas críticas  para Advanced Row Compression).

Advanced Row Compression foi projetado para compactar os dados de todos os tipos de operações no segmento de tabelas, tais como inserções, atualizações e bulk loads (inserir carga directa). Advanced Row Compression será acionado e manterá os dados no formato compactado mesmo sendo modificados, garantindo a otimização da compressão. A fim de obter benefícios imediatos e para minimizar a sobrecarga de compressão, os dados sempre são comprimidos no processo em primeiro plano que está inserindo/atualizando os dados, mas a Oracle deve garantir a consistência transacional , capacidade de reverter transações e suporte para leituras consistentes e consultas AS e OF.

Embora os benefícios de compressão e técnicas de compressão utilizadas são semelhantes, dependendo da carga sobre o sistema e simultaneidade ao nível dos blocos de dados, internamente 3 tipos diferentes de compressão podem ser assumidas quando usam Advanced Row Compression.

1) Insert Direct Load Compression (Inserir a compressão de carga direta)

Insert Direct Load Compression é disparado quando os dados são inseridos através de bulk loads (carga a granel) de mecanismos tais como inserir uma dica de anexo ou usando um carregador de SQL. Neste caso, os dados está sendo inserido acima do segmento marca d'água alta (um marcador virtual no último bloco utilizado para um segmento) e podem ser gravados para blocos de dados de forma muito eficiente.

O motor de compressão tem um monte de linhas com a capacidade para trabalhar com buffer, comprimir e escrever linhas para o bloco de dados comprimido. Como resultado, a economia de espaço são imediatos. Linhas nunca são escritas em um formato sem compressão para a Insert Direct Load Compression.

2) Recursive Compression (Compressão recursiva)

Por outro lado, o Recursive compression (e mesmo para compressão Inline descrito a seguir) é iniciado nas operações DML convencionais, tais como matriz linha única ou inserções e atualizações. Estes tipos de compressão de escrever as linhas em formato sem compressão e quando os blocos de dados chegam no limite de bloqueio interno, a compressão limiar é iniciada.

Em tal cenário, a Oracle é capaz de comprimir o bloco de dados em uma transação recursiva que será imediatamente empenhada após a compressão. O espaço economizado devido à compressão é imediatamente liberada e pode ser usado por qualquer outra transação.

A compressão é iniciada pela operação do usuário DML (aka transação do usuário), mas a compressão real de dados acontece em uma transação recursiva, o destino de compressão não está ligada ao destino da transação do usuário.

3) Inline Compression (Compressão em linha)

Assim como a Recursive Compression, Inline Compression também é projetado para operações DML convencionais, como a matriz linha única ou inserções e atualizações individuais, que escrevem as linhas em formato não comprimido em primeiro lugar. Quando os blocos de dados chegar a um limite de bloqueio interno, a compressão é iniciada, comprimindo todas as linhas não comprimidas no bloco de dados.

A principal diferença entre a Recursive Compression e o Inline Compression é em torno da concorrência no bloco. Inline Compression é projetado para comprimir dados quando todas as linhas no bloco estão ativamente modificadas ou bloqueadas pela transação do usuário atual. Em tais cenários, como todas as linhas já estão bloqueadas pela transação do usuário atual, a economia de espaço de compressão pode ser associada a esta transação. Assim, a compressão está em linha com a operação do utilizador provocando isso. Isto é feito para assegurar que não há perda de simultaneidade.

O espaço salvo pelo Inline Compression pode ser usado pela operação de compressão a qualquer momento, mas estará disponível para outras transações somente quando esta transação for confirmada. Em outras palavras, o espaço liberado é reservado para a transação do utilizador e a operação de compressão só pode ser usada assim que ela assuma. Uma vez que ela assumi, o espaço é liberado para outras transações. Além disso, se a transação do usuário voltar atrás, a compressão deste bloco de dados também é revertida.

Em todo o caso, a compressão de dados acontece no processo em primeiro plano ao tentar modificar os dados no bloco e a Oracle garante a consistência de transações, bloqueio de nível de linha e de concorrência ao nível do bloco de dados. Ao tentar estimar os benefícios globais de compressão, todos os três tipos de compressão deve ser contabilizada.