Partições Oracle - Pedro F. Carvalho

Propaganda
Pedro F. Carvalho
Analista de Sistemas
[email protected]
Gerente de Projetos
São José do Rio Preto - SP
O que é Tabela Particionada?
As tabelas particionadas, ou melhor dizendo, particionamento de dados, é um método
que a Oracle implantou desde sua versão 8, onde divide fisicamente as tabelas
grandes em diversos segmentos menores de dados, tornando o acesso aos dados mais
rápido e seu gerenciamento mais fácil. Uma tabela particionada pode ter N partições,
essas partições funcionam como tabelas normais (NÃO PARTICIONADAS), sendo que
cada partição pode ter sua própria configuração de storage, tablespace e índice, a
única diferença que podemos considerar entre uma tabela normal e uma tabela
particionada, é que a tabela particionada será sempre dependente estruturalmente da
tabela básica (Lembrar do conceito de herança de OO, Pai e Filho), ou tabela que
originou as partições, e a tabela normal funciona de forma independente de qualquer
outra tabela.
Para fixar a explicação, abaixo tem dois tipos de tabelas, a tabela A que é particionada
e a tabela B que é uma tabela normal.
TABELA A
SQL > CREATE TABLE PEDRO1
2(
3 col1 number(5) not null,
4 col2 varchar2(50) not null,
5 col3 date not null
6)
7 tablespace TBS_PEDRO_1
8 partition by range (col3)
9 (partition SEMESTRE1 values less than (to_date("01-JUL-2006","DD-MON-YYYY"))
tablespace TBS_PEDRO_1,
10 partition SEMESTRE2 values less than (to_date("01-JAN-2007","DD-MON-YYYY"))
tablespace TBS_PEDRO_2);
TABELA B
SQL > CREATE TABLE PEDRO2
2(
3 col1 number(5) not null,
4 col2 varchar2(50) not null,
5 col3 date not null) tablespace TBS_PEDRO_1;
Perceba a diferença estrutural entre as tabelas A (PEDRO1) e B (PEDRO2), na tabela A
utilizei um particionamento chamado RANGE (ou intervalo), onde criamos duas
partições, a partição SEMESTRE1, que irá armazenar todos os registros da tabela
PEDRO1 até a data 31-MAY-2006, equivalente a 1º semestre do ano, e a partição
SEMESTRE2 que irá armazenar todos os registros até 31-DEC-2006, equivalente ao 2º
semestre do ano.
Pedro F. Carvalho
Analista de Sistemas
[email protected]
Gerente de Projetos
São José do Rio Preto - SP
As partições SEMESTRE1 e SEMESTRE2 estão armazenando os dados de forma
independente fisicamente, podendo estar em tablespaces diferentes, como se fosse a
tabela B (PEDRO2).
Acesso aos dados
Umas das diferenças que notamos quando trabalhamos com tabelas particionadas, e a
forma de acessarmos os dados. A estrutura lógica do Oracle, pode enxergar diferentes
formas de acesso, como mostra abaixo:
SQL > SELECT * FROM PEDRO1 PARTITION (SEMESTRE1);
ou
SQL > SELECT * FROM PEDRO1 WHERE COL3 < to_date("31-MAY-2006","DD-MONYYYY");
O acesso lógico dos dados pode ser feita para cada partição, assim podemos ter mais
performance e uma facilidade maior na administração dos dados, o acesso a tabela B,
pode ser feita normalmente, como um SELECT normal.
SQL > SELECT * FROM PEDRO2;
Para matar um pouco a curiosidade, caso queira fazer os testes em casa, habilite o
plano de execução (SQL*PLUS - set autotrace on) e veja as diferentes formas que o
optimizador Oracle irá acessar os dados e tire as próprias conclusões. Agora podemos
imaginar o que o mundo do particionamento pode nos oferecer, imaginamos que a
tabela A (PEDRO1) tenha 10.000.000 de registros e a tabela B (PEDRO2) tenha a
mesma quantidade, você consegue saber qual tabela apresentará o resultado mais
rápido caso eu faça o SELECT abaixo:
SQL > SELECT * FROM ... WHERE COL3 BETWEEN to_date("01-SEP-206","DD-MONYYYY") AND to_date("31-SEP-2006","DD-MON-YYYY");
Vamos lá! Lógicamente a TABELA A irá apresentar o resultado mais rápido, porque a
cláusula do SELECT acima está limitando apenas os resultados em SETEMBRO, e
SETEMBRO equivale a partição SEMESTRE2, então o optimizador Oracle, irá realizar
um FULL SCAN PARTITION apenas na partição SEMESTRE2, e caso a tabela tenha
5.000.000 na partição SEMESTRE1 e outros 5.000.000 na partição SEMESTRE2, a
consulta será pelo menos a metade do tempo da tabela B, pois na tabela B, o
optimizador será obrigado a fazer um FULL SCAN TABLE nos 10.000.000 para obter o
resultado.
Isso o que podemos chamar de facilidade de consulta e adminsitração, pois nesse
mundo maravilhoso do particionamento, caso queira fazer um EXPORT dos dados para
outro banco de dados, podemos apenas exportar a tabela e a partição que precisamos,
Pedro F. Carvalho
Analista de Sistemas
[email protected]
Gerente de Projetos
São José do Rio Preto - SP
e na tabela B, teriamos que fazer um EXPORT utilizando a cláusula WHERE para
conseguir o mesmo resultado.
Download