Pular para o conteúdo
  • Este tópico contém 5 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por VitorLeandro.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #94457
    mpvargas
    Participante

      Caros 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.

      #94461
      CleitonHanzen
      Participante

        Opá..

        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.

        #94462
        mpvargas
        Participante

          Valeu Cleiton
          Obrigado pela dica.

          E qto aos indices, vale a pena particionar?

          #94463
          Sousa04
          Participante

            Esse link aqui contém umas informações adicionais sobre o particionamento

            http://imasters.uol.com.br/busca/?q=tab … onada&s=23

            #94464
            Avatar photoRegis Araujo
            Participante

              Salve 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..!

              #94466
              VitorLeandro
              Participante

                mpvargas,

                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

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.