Particionamento
Bom dia Pessoal!!!
Depois de muito tempo prometendo escrever no meu Blog do GPO, cá estou eu falando sobre uma feature “antiga” e muito pouco explorada pela maioria dos DBA’s: Particionamento.
O que é Particionamento:
Particionamento é criar dentro de um único objeto Lógico, várias estruturas de armazenamento organizadas por determinada hierarquia (faixa de tempo, faixa de negócio, código, lista), afim de dividir o objeto gigante em pequenos pedaços, agilizando as os operações de acesso a este objeto.
Analogia:
Imagine que você queira procurar em um baralho de Truco, o Zap. Poxa, será que preciso pesquisar todas as 40 cartas até achá-lo? E se eu dividisse previamente as 40 cartas em dois bolos de 20 cartas, um bolo de pretas e um bolo de vermelhas. Sabendo que o zap é preto, precisarei pesquisar somente as cartas pretas, ou seja 20 cartas, 50% menos de I/O e consequentemente muito menos tempo de pesquisa e CPU.
Podemos tambem criar 4 bolos, por faixa de numeros. 1 a 10, 11 a 20 e assim por diante. Sabendo que o Zap é o numero 4, apenas a partição 1 a 10 precisará ser lida! Tudo depende no negócio.
Benefícios:
Com o particionamento, você divide suas grandes estruturas em diversas pequenas estruturas, otimizando as pesquisas e sem gastas nem um MB pra isso. Os índexes são estruturas para auxiliar as pesquisas, porem, em tabelas enormes, facilmente os indexes ultrapassam 20 ou mais GB. Além do espaço, os indexes precisam ser lidos para que depois seja lido rowid correspondente na tabela. É necessário a leitura de duas estruturas para apenas um resultado!. E isso gasta I/O, tempo e CPU, não é de graça! Em muitas ocasiões o particionamento além de consumir nada de recurso, ainda torna determinadas pesquisas mais rápidas do que com a utilização de um index não particionado.
Técnicas:
Partition Pruning:
Essa técnica é baseada na fatia ou poda dos Dados. É a principal técnica de particionamento onde você elimina o excesso de leituras físicas, tendo então o tempo de resposta muito diminuído, por não precisar ler o objeto como um todo
EX: Digamos que você precise selecionar todos os items de notas fiscais que foram emitidas no intervalo entre Janeiro de 2007 até Dezembro de 2007. Imagine também que essa tabela pertence a um sistema não tão antigo, mas que possui um montante de 800 milhões de linhas até hoje e o inicio de cadastros começou em 1997, ou seja, esses dados estão distribuídos em mais de 13 anos!
Se for uma coisa atípica, dá pra agendar via Schedule ou Job o preenchimento do resultado, mas os gestores de hoje precisam dessas informações, e muitas vezes não possuem um DW para se encarregar da tarefa. (aí sobra pro DBA).
Partindo do pressuposto de que a tabela não é particionada, imagine selecionar 61 milhões de registros de uma tabela de 800 milhões? Índex? Uma tabela como essa, provavelmente recebe DMLs o tempo todo! Qualquer lentidão, ocorrerá em dor de cabeça, prejuízos financeiros e de imagem!
Agora, imagine que essa tabela possuísse um particionamento por Range (faixa) de data, digamos 6 em 6 meses… Apenas 2 partições precisariam ser lidas! Das 26 partições! Para retornar o mesmo resultado!
Bem, nos próximos post’s irei aprofundar mais e mais nessa incrível feature!!!
Um abraço a todos!!