Artigo no estilo Mentoring
Neste artigo veremos como empregar a técnica de particionamento de forma a termos nossas bases de dados desfragmentadas. O entendimento deste tema é útil em situações onde é necessária a exclusão de uma quantidade alta de dados, principalmente para operações de expurgo de dados dos sistemas OLTP, a utilização da técnica de particionamento é especialmente útil, pois elimina por completo o eterno efeito colateral de fragmentação de tabela.
Um problema relativamente comum em bancos de dados é a fragmentação de tabelas. Mas é importante deixar claro que a fragmentação em tabelas acontece, primordialmente, em ambientes OLTP (On-Line Transactional Processing - Processamento de Transações On-Line) onde a quantidade de alterações (UPDATE) e exclusões (DELETE) é elevada.
Um ambiente OLTP é uma classe de sistemas que facilita a operação e gerenciamento de aplicações orientadas, normalmente, a entrada de dados e processamento de transações de consultas. OLTP também tem sido usado para se referir a processamento no qual o sistema responde imediatamente a pedidos do usuário. Um caixa eletrônico para um banco é um exemplo de uma aplicação comercial de processamento de transações on-line.
Em aplicações de grande porte, a eficiência de um sistema OLTP pode depender de um sofisticado software de gerenciamento de transações e/ou táticas de otimização de banco de dados para facilitar o processamento de um grande número de atualizações simultâneas para um banco OLTP.
Mas por qual motivo a fragmentação acontece em função de operações de UPDATE e DELETE? A fragmentação acontece devido a espaços nos blocos de dados reservados para a tabela que são liberados.
No caso de um UPDATE, isso acontecerá caso a alteração aconteça de uma forma que “diminua” o tamanho do registro em questão como, por exemplo, alterar a descrição de um produto de “Hamburger de proteína texturizada de soja” para “Hamburger de PTS”. Percebemos claramente a diminuição no tamanho da informação e, consequentemente, menos espaço de armazenamento será necessário, liberando espaço.
O caso de um DELETE é ainda mais claro, pois ao excluir um registro no banco de dados o espaço utilizado para armazená-los será imediatamente liberado.
Mas precisamos ainda entender como o Oracle gerencia o espaço para as tabelas. O espaço liberado normalmente não é reutilizado imediatamente e, em alguns casos, nunca são reutilizados deixando, por consequência, “buracos” na tabela que é justamente o que chamamos de fragmentação.
Quando os registros em uma tabela não são armazenados de forma contínua, muitas vezes utilizando inclusive blocos de dados diferentes, o impacto inevitável será a perda de performance, pois será necessário efetuar mais de uma leitura de bloco para recuperar todo o registro.
A fragmentação atua diretamente neste tipo de cenário, pois as operações de UPDATE e DELETE não liberarão o espaço livre abaixo da marca d’água da tabela (High WaterMark).
A High WaterMark, ou simplesmente HWM, é um “ponteiro” utilizado no banco de dados para indicar o espaço utilizado em um bloco. O espaço abaixo da HWM contém (ou já conteve) dados.
Se já conteve, significa que houve uma operação de DELETE ou UPDATE (reduzindo o tamanho da informação). E como o Oracle sabe que, com certeza, não há informações no bloco acima da HWM, então será efetuada a leitura do bloco apenas até a HWM quando um Full Table Scan é executado.
Full Table Scan (varredura total da tabela),
também conhecida como Sequential Scan
(varredura sequencial), é uma varredura feita no banco onde cada registro da
tabela examinada é lido em uma ordem sequencial (serial) e as colunas
encontradas são verificadas para a validação de uma condição. Full Table Scans são geralmente o método
mais lento de varredura de uma tabela devido à grande quantidade de I/O -
leitura e ...