Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #89285
    ramasine
    Participante

      Caros,

      Estou montando uma rotina que captura de x em x tempos, sql pesados na base de dados:

      SELECT a.DISK_READS/a.EXECUTIONS “DSK_RDS_EXE”, a.DISK_READS DISK_READS, a.USERS_OPENING USERSO, a.ROWS_PROCESSED ROWSP, a.EXECUTIONS EXECUTIONS,
      — a.SQL_FULLTEXT SQL_TEXT — 10g
      a.SQL_TEXT SQL_TEXT — 9i
      — t.SQL_TEXT SQL_TEXT
      FROM V$SQLAREA a, V$SQLTEXT t — V$SQLTEXT_WITH_NEWLINES t
      WHERE a.HASH_VALUE=t.HASH_VALUE
      AND a.DISK_READS > 100000
      AND a.EXECUTIONS > 0
      AND a.DISK_READS/a.EXECUTIONS > 2000
      ORDER BY a.DISK_READS/a.EXECUTIONS DESC, t.HASH_VALUE, t.PIECE

      Queria trazer tb ou o program, ou o SID, do que está sendo executado, tentei mais alguns JOINS, mas sem sucesso..

      Alguma sugestão?

      O display da query é este:

      DSK_RDS_EXE DISK_READS USERSO ROWSP EXECUTIONS SQL_TEXT
      ———— ———— —— ———— ———- ——————————————————————————–
      218,784 218,784 0 1,194,490 1 select nca_num_seq,tca_num_seq,cam_ano_ini_cam from INC_CAL_APU_02 where cam_ano
      _ini_cam =2006

      #89286
      Marcio68Almeida
      Participante

        Bom dia…
        O v$sqlarea “a” se une ao v$session “s” pela seguinte cláusula :
        And s.sql_address = a.address
        Você tem que tomar cuidado para que a sua consulta não comece a aparecer entre as mais custosas do banco…
        Você pode utilizar a seguinte consulta :
        Select s.address, s.last_load_time, s.first_load_time,
        TO_CHAR ((s.cpu_time / s.executions) / 1000, '999,999,999.9999') tempo_cpu,
        TO_CHAR ((s.elapsed_time / s.executions) / 1000, '999,999,999.9999') tempo_decorrido, s.executions,
        p.object_owner, p.object_name, p.cost, p.cardinality, p.bytes, p.io_cost, p.filter_predicates,
        w.active_time, w.estimated_optimal_size, w.last_memory_used, w.total_executions, w.active_time
        From v$sql_plan p,
        v$sql s,
        v$sql_workarea w
        Where p.address = s.address
        And p.address = w.address (+)
        And p.hash_value = w.hash_value (+)
        And p.id = w.operation_id (+)
        And p.options = 'FULL'
        And p.object_owner not like '%SYS%'
        And SUBSTR (last_load_time, 1, 10) = TO_CHAR (sysdate, 'yyyy-mm-dd')
        -- And (p.cardinality > 100
        -- or p.cost > 50)
        And p.filter_predicates is not null
        And s.executions > 1
        And (s.elapsed_time / 1000) > 1
        Order by tempo_decorrido desc --(cost + cardinality) desc

        Essa consulta aliada a esta :
        Select sql_text from v$sqltext where address = '9FF6A340' order by piece;

        poderá te trazer boas informações…

        #89290
        David Siqueira
        Participante

          Marcelo, veja se essa query aqui te ajuda:

          select
          sql_text,
          username,
          disk_reads_per_exec,
          buffer_gets,
          disk_reads,
          parse_calls,
          sorts,
          executions,
          rows_processed,
          hit_ratio,
          first_load_time,
          sharable_mem,
          persistent_mem,
          runtime_mem,
          cpu_time,
          elapsed_time,
          address,
          hash_value
          from
          (select sql_text,
          username,
          round((a.disk_reads/decode(a.executions,0,1,a.executions)),2)disk_reads_per_exec,
          a.disk_reads,
          a.buffer_gets,
          a.parse_calls,
          a.sorts,
          a.executions,
          a.rows_processed,
          100 - round(100*a.disk_reads/greatest(a.buffer_gets,1),2) hit_ratio,
          a.first_load_time,
          sharable_mem,
          persistent_mem,
          runtime_mem,
          cpu_time,
          elapsed_time,
          address,
          hash_value
          from
          v$sqlarea a,
          all_users b
          where
          a.parsing_user_id=b.user_id
          and
          b.username not in ('SYS','SYSTEM')
          order by 3 desc)
          where rownum < 21;

          Abraço!!!

          #89292
          ramasine
          Participante

            Valeu mesmo David e Márcio!!
            Já estou finalizando o processo!!

            #89307
            vieri
            Participante

              qdo terminar posta os scripts ai ramasine..

              []s

              #89326
              ramasine
              Participante

                Claro meu velho!!!
                To montando a shell, e terminando coloco aqui!!

                #89334
                Ricardo Portilho Proni
                Participante

                  Oi Ramasine !

                  Algo muito parecido já existe e está pronto no Oracle.
                  SPREPORT para =10g.

                  Conhece? Atende?

                  Abraço !

                  #89336
                  ramasine
                  Participante

                    Grande Ricardo, The Certified Men !! 🙂
                    Sim, se for o Statspack que fala sim, já coleto diariamente..tb!

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