[oracle_br] Re: Duvidas sobre particionamento

2012-11-13 Por tôpico J. Laurindo Chiappa
  Só uma pergunta : vc Captou em e-mails anteriores que, como ferramenta de 
Performance, o Particionamento só serve para aquelas situações em que nos seus 
SQLs majoritariamente vc vai ler Múltiplos registros de uma tabela Gigante E 
via full table scan/fast index scan, sim ? Se hoje vc faz acesso via index key, 
acessando um único registro (por exemplo, consultando-se o número da NF no seu 
caso) o particionamento NÂO vai ser efetivo para a performance, já que não há 
eliminação de registros, sim ??? Outro ponto também bem explicitado é que para 
que a Eliminação de partições possa ocorrer, vc tem que estar pesquisando / 
acessando principalmente os dados dentro de UMA partição, ok ? Assim, se vc 
particionar por Mês E a esmagadora maioria das consultas for de NFs dentro de 
um mês ok, pode haver melhora de performance, MAS se vc particionar por Dia E a 
esmagadora maioria das consultas for de NFs dentro de um range de múltiplos 
dias, o RDBMS Vai ter que ficar visitando N partições, o que vai exigir N 
leituras de N segmentos diferentes - facilmente isso Pode ser pior para a 
performance do que um único e suculento segment scan em paralelo, okdoc ???
   Isso posto : tranquilamente para casos em que a chave é única e vc quer que 
o RDBMS distribua múltiplos registros em partições arbitrárias, vc poderia 
usar HASH PARTITIONING, veja na doc do 10g mais refs sobre isso... Caso não se 
aplique a situação de usar um HASH (digamos, porque o algoritmo de hash do 
RDBMS não fez uma separação equilibrada/proporcional de registros), sim, vc até 
poderia usar RANGE PARTITION com a condição de range sendo um MOD no id único 
do regsitro, ok , MAS Realmente tenha CERTEZA do exposto acima , ie : QUE 
realmente não vão haver consultas por uma só NF E QUE normalmente a maioria das 
queries realmente será satisfeita consultando-se uma só das partições, sim ?? 
Caso contrário é bem provável que vc não obtenha retorno desse trabalho... 
   
[]s

  Chiappa

--- Em oracle_br@yahoogrupos.com.br, Claudio Junior csjunior@... escreveu

 Ola pessoal
 
 Obrigado por terem respondido os emails. Achei muito interessante mas
 infelizmente a versão 10 não ajuda muito mesmo.
 
 Sobre o particionamento  a header provavelmente vai ser pela data mesmo.
 Acreditamos que seja a melhor solução para este caso pois as consultas são
 sempre feitas baseando na data e assim não teremos uma boa melhora.
 
 Agora, sobre as details, apareceram umas ideias. Uma delas é utilizar a
 função mod pelo id da nota fiscal para determinar a partição. Exemplo, 100
 partições e a chave seria mod(id_da_nota, 100). O que vcs acham desta ideia?
 
 Att.
 
 
 --
 Claudio da Silva Junior
 csjunior@...
 
 
 Em 31 de outubro de 2012 11:40, Régis Pradela pradelarf@...escreveu:
 
  Claudio, bom dia!
 
  Neste caso  o Reference Partitioning seria muito útil, mas, como seu Oracle
  é 10gr2 não temos este tipo de particionamento.
  Minha sugestão, baseada nas informações que você falou, seria:
 
  1. Particionar a tabela de notas fiscais mensalmente:
  - Eu disse mensalmente, mas para definir este intervalo acredito que o
  ideal
  seria medir o volume da dados gerados.
 
  2. Tabela de descrição:
  - É difícil dizer a melhor chave para particionamento sem saber as
  principais queries que rodam sobre estas tabelas.
  Dica: Verificar pela V$SQL quais os SQLs que incidem sobre esta tabela e
  veja os filtros utilizados, após isto estude cada campo e verifique o qual
  possui um intervalo melhor definido.
  - Num chute, ignorando a dica acima e baseado nas informações que você
  passou, eu faria o particionamento pelo numero da nota com um intervalo
  baseado em mais ou menos o numero de notas que são gerados durante o
  período
  de particionamento da tabela de Notas, Ex:
  - A tabela de notas está particionada mensalmente e eu sei, baseado em
  números / levantamentos que fiz, que tenho uma média de 1000 notas/mês.
  Neste caso faria um particionamento da tabela de detalhes pelo numero da NF
  de 1000 em 1000.
 
  Capitou a idéia?
  Espero ter ajudado.
  --
  R.P.
  DBA Oracle
  Blog: www.rpradela.com.br
 
  Oracle Database 11g Administrator Certified Professional
  Oracle Database 11g Administrator Certified Associate
  Oracle Database 10g Real Applications Clusters Administrator Certified
  Expert (OCE)
  Oracle Enterprise Linux Certified Implementation Specialist (OCE)
  Oracle Database 11g Data Warehousing Certified Implementation Specialist
  Oracle Exadata 11g Certified Implementation Specialist
 
  From:  Claudio Junior csjunior@...
  Reply-To:  oracle_br@yahoogrupos.com.br
  Date:  terça-feira, 30 de outubro de 2012 18:56
  To:  oracle_br@yahoogrupos.com.br
  Subject:  [oracle_br] Duvidas sobre particionamento
 
 
 
 
 
 
  Pessoal
 
  Gostaria de obter opiniões do pessoal da lista sobre particionamento
  de tabelas.
 
  Estou tentando melhorar um esquema de tabelas no qual temos a seguinte
  estrutura:
 
  1. tabela de notas fiscais que tem um 

[oracle_br] Re: Duvidas sobre particionamento

2012-10-31 Por tôpico ederson2001br
Alô Cláudio,

Olha, definir particionamento para mensal ou trimestral, o ideal é vc ter a 
idéia de volume.

Exemplo: 
-Desejo definir uma particionamento que terá aproximadamente, 2.000.000 de 
linhas
-Contagem trimestral: 4.500.000 linhas
-Média mensal...: 1.500.000 linhas

Neste caso, sua partição indicada seria particionar por mês.

Para o particionamento, use algo como NF_ANO_MES_PART que conterá o mês e o ano 
da data de geração da nota, no formato MM (mes e ano invertidos).

Se a necessidade indicar melhor por trimestre, vc pode usar a concatenação do 
(ano || quartil) para a sua partição com to_char(sysdate,'') || 
to_char(to_number(to_char(sysdate,'q')),'fm09').

Desta forma, vc terá uma boa separação de partições. Lembre-se que o índice 
também deve ser particionado.


Ederson Elias
DBA Oracle
http://br.linkedin.com/pub/ederson-elias/24/8b/8b0

--- Em oracle_br@yahoogrupos.com.br, Claudio Junior csjunior@... escreveu

 Pessoal
 
 Gostaria de obter opiniões do pessoal da lista sobre particionamento
 de tabelas.
 
 Estou tentando melhorar um esquema de tabelas no qual temos a seguinte
 estrutura:
 
 1. tabela de notas fiscais que tem um campo data que podemos utilizar
 para gerar o particionamento. A ideia é fazer particionamento para o
 mês ou trimestre;
 2. tabela de detalhe da nota fiscal no qual não temos a nota. O
 particionamento vai ter que ser feito baseado no código da nota
 fiscal, ou se possível através do particionamento da primeira tabela.
 
 A pergunta é se é melhor ter o particionamento desta forma, ou se em
 ultimo caso é melhor fazermos o particionamento baseado em outra chave
 que não seja a data, tipo o código da nota fiscal?
 
 A utilização da data é muito interessante pois a maioria das consultas
 são feitas utilizando a data como referencia.
 
 A versão do oracle é:
 
 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
 PL/SQL Release 10.2.0.4.0 - Production
 CORE  10.2.0.4.0  Production
 TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
 NLSRTL Version 10.2.0.4.0 - Production
 
 Agradeço a atenção
 
 Claudio Jr.
 --
 Claudio da Silva Junior
 csjunior@...