Pular para o conteúdo
  • Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por David Siqueira.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #90452
    thiagofm
    Participante

      Amigos,

      Estou com dúvidas quanto a detectar que determinada tablespace está fragmentada a ponto de precisar de um reorg, tanto as tablespaces criadas para armazenar índices quanto as de dados

      Procurei material, li bastante e ainda não cheguei a uma conclusão satisfatoria sobre como agir pro-ativamente para não ter problemas de performance por fragmentação de tablespaces

      abs!

      #90510
      MauroLacerda
      Participante

        Caro Thiago,
        Bom dia,

           Sua duvida me gerou algumas também. Em minha pesquisa encontrei um link que me ajudou um pouco.
        

        Vou posta-lo e torço para que ele te ajude também.

        abs.

        http://eduardolegatti.blogspot.com/2008 … space.html

        #90511
        David Siqueira
        Participante

          Olá rapaziada!!!

          Bem em caso de fragmentação ha alguns scripts que podem ser rodados e com isso detectar se ha um alto indice de fragmentação em suas tablespaces ( tabelas e indices), um outro indicativo são os usuários finais, pois se alguem reclama sobre determinado processo que era rápido e tão logo ficou lento há uma grande chance de ser fragemntação, pois caso tenha ocorrido uma limpeza de dados , a tabela muito facilmente se encontrara com bloco livres não-aglutinados, obrigando o Oracle a ler uma fileira de blocos e mais blocos até encontar o dado que procura.

          Sugiro que usem as ferramentas Oracle para identificar sinais de possiveis contenções , é uma analise detalhada e minuciosa, visto que terão que coletar informações, usem para isso STATSPACK , AWR etc.

          segue alguns scripts que ja usei :

          --------------

          Script 1

          set lin 150
          comp sum of nfrags totsize freesize on report
          break on report

          set numformat 999,999,990

          col sname justify l for a15
          col tbs for a15
          col nfrags heading 'Free|Frags'
          col maxfrag justify c heading 'Largest|Frag (Kb)'
          col maxnext justify c heading 'Largest|Next Extent (Kb)'
          col totsize heading 'Total|(Kb)'
          col freesize heading 'Available|(Kb)'
          col pctused heading 'Pct|Used'

          col name noprint new_value dbname
          select name from v$database;

          create or replace view aps_data_files as
          select tablespace_name,
          sum(bytes) bytes
          from dba_data_files
          group by tablespace_name;

          spool d:Pro-atividadefreespace_frag.log

          ttitle left "Database:"dbname" - Tablespace Fragmentation Report" skip 2

          select t.tablespace_name tbs,
          count(f.bytes) nfrags,
          nvl(max(f.bytes)/1024,0) maxfrag,
          t.bytes/1024 totsize,
          nvl(sum(f.bytes)/1024,0) freesize,
          (1-nvl(sum(f.bytes),0)/t.bytes)*100 pctused
          from aps_data_files t,
          dba_free_space f
          where t.tablespace_name = f.tablespace_name(+)
          group by t.tablespace_name,t.bytes;

          select fs.tablespace_name tbs,
          max(s.next_extent)/1024 maxnext,
          max(fs.bytes)/1024 maxfrag,
          max(segment_name) sname
          from dba_free_space fs,
          dba_segments s
          where fs.tablespace_name=s.tablespace_name
          group by fs.tablespace_name
          having max(s.next_extent) > max(fs.bytes);

          ttitle off
          spool off


          Script 2

          COL C1 FORMAT A20
          COL C2 FORMAT 999,999,999,999
          COL SEGMENT_NAME FOR A25
          BREACK ON OWNER ON TABLESPACE_NAME
          SELECT OWNER, TABLESPACE_NAME, SEGMENT_NAME||
          decode(SEGMENT_TYPE,'TABLE','[T]', 'INDEX', '[I]',
          'ROLLBACK','[R]', '[O]') segment_name
          , sum(BYTES) C2,
          decode(count(),1,to_char(count()),
          2,to_char(count()),
          3,to_char(count(
          )),
          4,to_char(count()),
          5,to_char(count(
          )),
          to_char(count(*))||' 5;

          Espero que os ajudem, caso queiram podem dar uma olhadinha no BLOG também :

          http://databaseguard.blogspot.com/2009/09/reorganizando-meu-banco-de-dados.html

          Abraço á todos!!!

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