Neste post do blog, vou explicar o tipo de tabela
Insert Time Clustering (ITC)
no Db2 para Linux, UNIX e Windows (Db2 LUW) e mostrar seu principal benefício: uma fácil recuperação de espaço.
Também vou te mostrar como você pode converter tabelas regulares em tabelas ITC em um sistema SAP no Db2 LUW.
Isso soa familiar?
As tabelas ITC estão disponíveis desde a versão 10.1 do Db2 (ver
Novas tabelas de clustering de tempo de inserção - Documentação da IBM
). Este post do blog é em grande parte idêntico a um antigo artigo da SAP (publicado pelo meu colega
johannes.heinrich
) que se baseava na versão 10.1 do Db2 e não está mais disponível. Peguei seus resultados de teste aqui e adicionei alguns links e comentários adicionais sobre as características do ITC que foram introduzidas mais tarde com a versão 10.5 do Db2.
Recuperação de espaço em tabelas Db2 regulares (= baseadas em linhas)
As tabelas Db2 podem ter um objeto de dados, índice e LOB. Vou me concentrar na recuperação de espaço no objeto de dados em tabelas Db2 regulares. Por simplicidade, vou omitir a compressão de dados, pois não altera o panorama geral.
Vamos começar do início: Design padrão do tablespace
Os dados da coluna de um objeto de dados são armazenados em páginas de um tablespace. Em uma instalação SAP padrão, os tablespaces têm um tamanho de página de 16 KB. Quando registros são inseridos em uma tabela recém-criada, as páginas de dados são preenchidas uma por uma em ordem consecutiva. Se um registro não couber em uma página, ele é inserido na próxima página. Isso significa que os dados inseridos em torno do mesmo tempo também são armazenados fisicamente juntos, o que significa que estão agrupados de acordo com seu tempo de inserção.
Problema: Espaço não utilizado fica preso com o tempo
Com o tempo, os dados da tabela existente podem ser atualizados ou excluídos pela aplicação. Se registros são excluídos, o espaço vazio pode ser reutilizado por inserções futuras na mesma tabela, desde que caibam no espaço vazio. As operações de exclusão e atualização em uma tabela implicam que, com o tempo, a ordem sequencial em que os registros foram inicialmente inseridos é perdida e mais espaço não utilizado aparece na tabela. Esse espaço não utilizado fica preso no objeto de dados de uma tabela regular e não é reutilizado automaticamente por outros objetos no mesmo tablespace. Além disso, esse espaço não utilizado preso não pode ser facilmente devolvido do tablespace para o sistema de arquivos (usando uma operação ALTER TABLESPACE).
Recuperação de espaço usando ADMIN_MOVE_TABLE e DB6CONV
Para recuperar completamente o espaço no objeto de dados de uma tabela regular do Db2, é necessária uma operação de REORG de movimentação de dados. Para realizar essa operação de REORG de recuperação de espaço, pode-se usar a rotina do Db2
ADMIN_MOVE_TABLE
que permite realizar essas operações de REORG de recuperação de espaço online. A utilidade do SAP
DB6CONV
é uma interface ABAP popular para a rotina ADMIN_MOVE_TABLE. Como benefício adicional, a rotina ADMIN_MOVE_TABLE também reorganiza o índice e o objeto LOB de uma tabela online.
Não é obrigatório realizar operações de REORG para recuperação de espaço em tabelas regulares do Db2, pois o Db2 é capaz de reutilizar o espaço quando novos dados são inseridos. No entanto, após uma operação de exclusão em massa, pode ser útil liberar facilmente e rapidamente o espaço preso no banco de dados. Reduzir o tamanho do tablespace/banco de dados também tornará os backups menores e mais rápidos.
Tecnicamente falando: O que exatamente são as tabelas ITC?
As tabelas ITC são criadas especificando a palavra-chave "ORGANIZE BY INSERT TIME" na declaração CREATE TABLE. As tabelas ITC agrupam dados regulares com base no tempo de inserção do registro, ou seja, os dados inseridos em torno do mesmo tempo são colocados próximos uns dos outros. A tecnologia de tabela ITC é baseada em tabelas de clustering multidimensional (MDC) (ver
Tabelas de clustering multidimensional - Documentação da IBM
). Em um ambiente SAP, as tabelas MDC são usadas apenas em bancos de dados do SAP Business Warehouse (SAP BW). Em comparação com as tabelas MDC, as tabelas ITC não têm dimensões de clustering definidas explicitamente. É por isso que durante a fase de design na IBM, essas tabelas eram até chamadas de "tabelas de clustering de dimensão zero". Nas tabelas ITC,