- Este tópico contém 5 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por
VitorLeandro.
-
AutorPosts
-
8 de junho de 2010 às 9:38 pm #94457
mpvargas
ParticipanteCaros Amigos,
A Oracle recomenda que as tabelas maiores que 2GB devem ser particionadas. Está certa essa informação?
Sendo assim, tenho 6 tabelas com mais de 2GB.
É recomendável particionar todas essas tabelas?
Existe algum limite para particionar, digo, algum parâmetro relacionado ao particionamento de tabelas?
É recomendável particionar os indices também?Obrigado.
8 de junho de 2010 às 10:25 pm #94461CleitonHanzen
ParticipanteOpá..
Intaum, nunca trabalhei muito com particionamento, mas acredito que o particionamento é interessante em bancos muito grandes, particularmente acho que tabelas de 2GB não são grandes (já trabalhei em ambientes com tabelas de 50GB que não estavam particionadas e a performance era excelente), com grandes quantidade de usuários conectados e principalmente com infra-estrutura que suporte tal implantação.
No quesito infra-estrutura, deverá existir vários discos (fazendo com que a leitura das tabelas seja feito em discos diferentes otimizando o I/O).
Lembro também que a feature PARTITIONING somente está disponível na versão Enteprise Edition e existe custo a parte para a utilização da mesma.
Logo, vi esse tipo de implantação em ambientes DW.
8 de junho de 2010 às 10:30 pm #94462mpvargas
ParticipanteValeu Cleiton
Obrigado pela dica.E qto aos indices, vale a pena particionar?
8 de junho de 2010 às 11:12 pm #94463Sousa04
ParticipanteEsse link aqui contém umas informações adicionais sobre o particionamento
http://imasters.uol.com.br/busca/?q=tab … onada&s=23
8 de junho de 2010 às 11:17 pm #94464Regis Araujo
ParticipanteSalve Senhores..!!
Olha eu me intrometendo.. heheh..!!
Vargas.. o particionamento de indices tbm é indicado quando vc particiona a tabela.. pois quando ele for ler uma partição da tabela não precisará ler a arvore de indices toda.. vai ler apenas apenas a partição de indice pertinente a partição da tabela..!! Tornando a sua consulta muito mais rapida..!!
Bom.. mas é como o Clayton falou.. 2gb não é uma tabela grande.. mas vc tem que ver o conteudo tbm.. os tipos de dados que são inseridos.. pois não adianta nada vc particionar uma tabela q quando for rodar um select, não utilize a chave de partição..
O interessante em particionar tabela é quando os selects são feitos pela chave de partição, evitando assim um FULL TABLE SCAN na tabela toda..
Um exemplo é uma tabela que possua campo DATA e vc particiona ela por mes.. e os selects são efetuados sempre nas ultimas 2 partições.. isto vai evitar uma leitura completa da tabela..!
Imagina vc particionar uma tabela de clientes.. vc pode particionar por ESTADO_ORIGEM ou por DATA_CADASTRO só que todos os selects são efetuados pelo NOME ou pelo CPF.. o seu particionamento não adiantou de nada, pois para retornar as informações será necessário varrer toda a tabela..!!
Bom.. esta são minhas ressalvas sobre particionamento..!! Particionamento é OTIMO, mas somente quando 90% ou mais dos selects irão usar a chave de partição (capo pelo qual o particionamento foi efetuado) como clausula de filtro…!!
Abraços..!
9 de junho de 2010 às 12:27 am #94466VitorLeandro
Participantempvargas,
Como eu trabalho com muito com Data wharehouse, utilizo pra caramba particionamento.
Realmente, a Oracle aconselha particionar tabelas com mais de 2 GB, porem na própria documentação (documento de Partitioning / VLDB), fala-se muito sobre tabelas pequenas tirarem proveito do particionamento.
Não existe muito regra, para quando particionar tabelas não tao grandes, mas vai muito do tato com o seu negócio. Exemplo: Se você faz muitas consultas entre intervalos de data, um particionamento por range na data talvez seja ideal.
Lembre-se da queles casos onde o FULL SCAN é mais rápido que o index. Se for um FULL SCAN apenas na partição desejada é melhor ainda, e sem gastar espaço com index.Sobre o numero de partições por tabela, você pode consultar o capitulo “Logical Database Limits”, que explica tudo e mais um pouco. Me recordo que no 11GR2, o limite de partições por tabela é de 1024K-1.
Sobre os índexes, procuro sempre criá-los locais, sempre que possível. Os ídexes são particionados juntamente com as partições da tabela. A manutenção é muito mais fácil, pois operações de DDL nao inutilizam o index.
Outra vantagem dos indexes locais, é que mesmo que uma consulta não utilize a chave da partição, ela poderá acessar o index utilizando HASH, lendo varias particiões ao mesmo tempo, se este for o caminho menos custoso.
Particionamento por range de data é muito bom, aliado com compressão é melhor ainda!
Você pode pegar as principais querys que rodam nestes objetos e verificar qual a melhor forma de particioná-los. Alem do custo, compare, I/O (buffer gets, fisical reads, sequential read).
pesquise sobre: partition pruning / partition wise-join
-
AutorPosts
- Você deve fazer login para responder a este tópico.