RANGE-HASH e RANGE-LIST O COMPOSITE PARTITION é um método de particionamento composto, unindo os três métodos discutidos anteriormente. Como os métodos Range, Hash e List Partition. Existem dois tipos de combinação de particionamento, como o RANGE-HASH (Método Range Partition + Método Hash Partition) e RANGE-LIST (Método Range Partition + Método List Partition). O método Range Partition sempre deverá ser o primeiro na criação do particionamento e não existe a composição HASH-LIST. Caso tente realizar essa operação, irá acusar erro durante a criação da tabela. Porém, algumas dúvidas já vão surgindo quando vamos nesse novo método de particionameto, com a seguinte pergunta: Mas, o que pode me ajudar o Composite Partition em relação aos outros? Primeiramente, todos os pontos positivos dos outros métodos de particionamento serão utilizados e,também, a organização dos dados fisicamente fica muito mais fácil de se gerenciar. Por exemplo, imaginamos que existe um tabela de 500 GB, particionada somente por Range Partition, afim de armazenar histórico de datas de vendas de produtos para uma determinada loja. Então, como cada partição (segmento) da tabela é para um dia do ano (365 Partições), em cada partição da tabela teremos uma tablespaces específica ou tablespaces para cada mês, até agora maravilha, conseguimos fazer um distribuição dos dados entre os FileSystems e diminuição de I/O. Agora, imagine os meses que existem datas comemorativas, como, por exemplo, Junho e Dezembro, que temos os Dias dos Namorados e Natal. Um grande crescimento de inserções de registros é esperado, podendo ocasionar "gargalos" nas partições dos respectivos dias, dependendo também dos outros datafiles que podem estar no mesmo FileSystem. A fim de melhorar essa distribuição, podemos particionar a tabela utilizando o método composite partition usando Range-Hash partition. Assim, para cada dia do ano ou mês, podemos ter uma partição por Range e subpartiticionar por hash para efeitos de balanceamento dos dados entre os datafiles em diferentes FileSystems, evitando totalmente esses "gargalos" de I/O vindos das transações. É uma composição que ajudaria em muito ter ganhos de performace. Tudo bem, percebemos que o Composite Partition usando Range-Hash foi muito útil, então, para que particionar utilizando Range-List partition? Isso irá depender muito da regra de negócio da sua empresa, por exemplo, acima utilizamos Range-Hash partition, para uma tabela de histórico de vendas de produtos para uma única loja. Agora, se sua empresa tem várias lojas pelo Brasil, poderia utilizar sem problemas o Range-List, álias, seria o mais adequado, pois para cada dia
do ano ou mês, você teria subpartições para cada loja ou um conjunto de lojas. Ganhando performance nas consultas e futuros processos de carga. Abaixo seguem algumas simples estruturas e descrições das opções das tabelas utilizando as duas variações de particionamento do Composite Partition. Composite Partition : Range-Hash Partition. SQL > CREATE TABLE HIST_VND_PROD_SP 4 dt_saida date default sysdate) 5 PARTITION BY RANGE (dt_saida) SUBPARTITION BY HASH (txtnome) SUBPARTITIONS 4 STORE IN (TBS1,TBS2) 6 (PARTITION P23_12_2006 VALUES LESS THAN (TO_DATE('24-12-2006','DD- 7 PARTITION P24_12_2006 VALUES LESS THAN (TO_DATE('25-12-2006','DD- STORE IN (TBS3,TBS4), 8 PARTITION P25_12_2006 VALUES LESS THAN (TO_DATE('26-12-2006','DD- 9 (SUBPARTITION SP_25_12_2006 TABLESPACE TBS5, 10 SUBPARTITION SP_25_12_2006 TABLESPACE TBS6)); Observe que utilizamos várias formas de armazenamento das subpartições em diferentes tablespaces, para organização física extrema dos dados e para maiores ganhos de performance. Na linha 5, mencionamos a cláusula SUBPARTITIONS 4 STORE IN (TBS1,TBS2), onde será criada automaticamente pelo sistema 4 subpartições para cada partição, armazenadas nas tablespaces específicas após a opção STORE IN. Na linha 7, mudamos sua origem de armezenamento de forma explícita. Nas linhas 9 e 10, especificamos o nome de cada subpartição, para identificar ao máximo o local de acesso. E facilita o optimizador em consultas usando SELECT... FROM tabela PARTITION (nome_da_particao). Caso não queira colocar um nome para subparticionamentos, o Oracle automaticamente cria nomes seguindo seu padrão SYS_SUBPn (Onde N é um número natural sequêncial), como feito nas linhas 6 e 7. Continuando nas tabelas Range-Hash, existe um opção de criar templates de subpartições, como no exemplo abaixo: SQL > CREATE TABLE HIST_VND_PROD_SP
4 dt_saida date default sysdate) 5 PARTITION BY RANGE (dt_saida) SUBPARTITION BY HASH (txtnome) 6 SUBPARTITION TEMPLATE 7 (SUBPARTITION SP_TESTE1 TABLESPACE TBS1, 8 SUBPARTITION SP_TESTE2 TABLESPACE TBS2, 9 SUBPARTITION SP_TESTE3 TABLESPACE TBS3, 10 SUBPARTITION SP_TESTE4 TABLESPACE TBS4) 11 (PARTITION P1 VALUES LESS THAN (TO_DATE('23-9-2006','DD- 12 PARTITION P2 VALUES LESS THAN (MAXVALUE)); Essa opção cria um conjunto de subpartições para cada partição, então, todas as partições do exemplo serão armazenadas nas tablespaces TBS1, TBS2, TBS3 e TBS4. Recomendo que utilize essa opção para tabelas que tenha pouco acesso e pouco volume de dados. Com o Range-Hash, primeiramente os dados são separados usando o algoritmo do Range-Partition e depois o Oracle usa o algoritmo HASH para distribuir os dados de forma uniforme, sempre mantendo um balanceamento, assim diferentes dos métodos anteriores, o Oracle cria diversos segmentos de dados para uma única partição e distribui o volume de dados entre eles. Usando o Range-List, perceba poucas diferenças: Composite Partition : Range-List Partition. SQL > CREATE TABLE HIST_VND_PROD 4 txtloja char(2) not null, 5 dt_saida date default sysdate) 6 PARTITION BY RANGE (dt_saida) SUBPARTITION BY LIST (txtloja) 7 (PARTITION P25_12_2006 VALUES LESS THAN (TO_DATE('26-12-2006','DD- 8 (SUBPARTITION NORDESTE VALUES ('BA','PE','AL') TABLESPACE 9 SUBPARTITION SUDESTE VALUES ('SP','RJ') TABLESPACE TBS_SUDESTE, 10 SUBPARTITION SUL VALUES ('RS','SC') TABLESPACE TBS_SUL), 11 (PARTITION P01_12_2006 VALUES LESS THAN (TO_DATE('02-01-2007','DD- 12 (SUBPARTITION NORDESTE VALUES ('BA','PE','AL') TABLESPACE 13 SUBPARTITION SUDESTE VALUES ('SP','RJ') TABLESPACE TBS_SUDESTE, 14 SUBPARTITION SUL VALUES ('RS','SC') TABLESPACE TBS_SUL));
É mais fácil analisar essa estrutura de tabela, pois percebemos que todos os valores estão definidos e para cada subpartição criada está especificado seu lugar de armazenamento. Isso facilita em muito a administração dos dados e suas partições, assim, como excelentes ganhos de performance nas consultas. Seguindo o mesmo estudo do Range-Hash, o Oracle também irá vários segmentos de dados para Range-List, porém, não haverá mistura dos dados, pois como estamos utilizando método de List Partition, para cada segmento das subpartições terá valores definidos, assim, pode acontecer de segmentos terem valores diferentes para cada ocasião. Nas tabelas particionadas por Range-List também podem utilizar template para facilitar a criação, seguindo o mesmo exemplo das Range-Hash, segue: SQL > CREATE TABLE HIST_VND_PROD 4 txtloja char(2) not null, 5 dt_saida date default sysdate) 6 PARTITION BY RANGE (dt_saida) SUBPARTITION BY LIST (txtloja) 7 SUBPARTITION TEMPLATE 8 (SUBPARTITION NORDESTE VALUES ('BA','PE','AL') TABLESPACE 9 SUBPARTITION SUDESTE VALUES ('SP','RJ') TABLESPACE TBS_SUDESTE, 10 SUBPARTITION SUL VALUES ('RS','SC') TABLESPACE TBS_SUL) 11 (PARTITION P25_12_2006 VALUES LESS THAN (TO_DATE('26-12-2006','DD- 12 PARTITION P26_12_2006 VALUES LESS THAN (TO_DATE('27-12-2006','DD- 13 PARTITION P27_12_2006 VALUES LESS THAN (TO_DATE('28-12-2006','DD- ); Seguindo a mesma estrutura de template do Range-Hash, as quatro subpartições serão criados para cada partição, sem muitos segredos e dificuldades. Dica: Assim como existe tabelas particionadas, também existem índices particionados, quando forem utilizar o método Composite Partition, sempre utilizem Índices locais (INDEX LOCAL), por questões de manutenção e organização. Vamos ficando por aqui, com essa última coluna sobre tabelas particionadas, conseguimos uma visão geral sobre todas suas estruturas e funcionamento. A Composite Partition é um resumo da utilização em conjunto de todos os três tipos de particionamentos. Agregando suas funcionalidades e pontos positivos que podem ajudar em muito questões de manutenção e performance.
Assim como nessa coluna e nas outras três sobre Particionamento, existem muitas opções que podem ser exploradas, a utilização desses recursos para ambientes de Data WareHouse (DW) e OLTP são indiscutiveis. Vale a pena dar uma olhada na documentação da Oralce que pode ser encontrada em : http://download-east.oracle.com/docs/cd/b19306_01/server.102/b14231/toc.htm