Pular para o conteúdo
  • Este tópico contém 5 respostas, 4 vozes e foi atualizado pela última vez 12 anos, 9 meses atrás por Avatar de Ricardo Portilho ProniRicardo Portilho Proni.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #102919
    Avatar de jmdoliveirajmdoliveira
    Participante

      Bom dia a todos

      Sou novo com Oracle, trabalho com SQL Server e agora surgiu a necessidade de administrar bases Oracle.
      No sql, eu costumo fazer o tuning de queries baseado nos wait times das mesmas e vi que no Oracle também é possível fazer o mesmo, usando as views administrativas.

      Gostaria de saber se estou no caminho certo, estou querendo basear a minh aquery nas views V$SESSION e V$SQLTEXT para obter os dados da sessão, wait, tempo de wait e a query.

      Também gostaria de saber como é o mecanismo da V$SESSION para eu não ler um registro antigo, pois pelo que vi, os dados dessa view persistem até que a sessão seja finalizada.

      Agradeço a todos pela ajuda.

      #102931
      Avatar de vierivieri
      Participante

        No sql server o principal recurso é a ferramente SQL PROFILER correto?

        ou o SET STATISTICS no QA.

        No oracle vc usa o enterprise manager , statspak, explain plan,
        AWR , etc… sempre com recurso de WAITS por TEMPO.

        algumas querys avulsas tb ajudam a indicar:

        PROMPT ======================================================================
        PROMPT ======================================================================
        PROMPT Consumo de memoria por usuários
        PROMPT ======================================================================

        SET LINESIZE 200

        COLUMN username FORMAT A20
        COLUMN module FORMAT A20
        COLUMN osuser FORMAT A10

        SELECT a.osuser,a.status,a.inst_id,
        NVL(a.username,'(oracle)’) AS username,
        a.module,
        a.program,
        trunc(b.value/1024) AS memory_kb
        FROM gv$session a,
        gv$sesstat b,
        gv$statname c
        WHERE a.sid = b.sid
        AND a.inst_id = b.inst_id
        AND b.statistic# = c.statistic#
        AND b.inst_id = c.inst_id
        AND c.name = ‘session pga memory’
        AND a.program IS NOT NULL
        ORDER BY b.value DESC;

        PROMPT ======================================================================
        PROMPT ======================================================================
        PROMPT PROCESSOS USUARIOS
        PROMPT ======================================================================

        Select p.spid, p.addr, s.sid, s.serial#, s.username, s.osuser, s.status, s.server, s.logon_time, s.sql_hash_value, TO_CHAR (s.last_call_et / 3600, ‘009.99’) inatividade, s.machine, s.program, p.pga_used_mem, p.pga_alloc_mem, p.pga_freeable_mem, pga_max_mem, sql.sql_text
        From v$session s, v$process p, v$sql sql
        Where s.username is not null
        And s.paddr = p.addr (+)
        And s.sql_address = sql.address
        — and s.sid = 1082
        Order by s.last_call_et desc;

        PROMPT ======================================================================
        PROMPT ======================================================================
        PROMPT EXECUÇÔES LONGAS
        PROMPT ======================================================================

        SET LINESIZE 200
        COLUMN sid FORMAT 9999
        COLUMN serial# FORMAT 9999999
        COLUMN machine FORMAT A30
        COLUMN progress_pct FORMAT 99999999.00
        COLUMN elapsed FORMAT A10
        COLUMN remaining FORMAT A10

        SELECT s.inst_id,
        s.sid,
        s.serial#,
        s.username,s.osuser,
        s.module,
        ROUND(sl.elapsed_seconds/60) || ‘:’ || MOD(sl.elapsed_seconds,60) elapsed,
        ROUND(sl.time_remaining/60) || ‘:’ || MOD(sl.time_remaining,60) remaining,
        ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct
        FROM gv$session s,
        gv$session_longops sl
        WHERE s.sid = sl.sid
        AND s.inst_id = sl.inst_id
        AND s.serial# = sl.serial#;

        ======

        WAITS

        SET LINESIZE 200
        SET PAGESIZE 1000

        COLUMN username FORMAT A20
        COLUMN event FORMAT A30
        COLUMN wait_class FORMAT A15

        SELECT s.inst_id,
        NVL(s.username, ‘(oracle)’) AS username,
        s.sid,
        s.serial#,
        sw.event,
        sw.wait_class,
        sw.wait_time,
        sw.seconds_in_wait,
        sw.state
        FROM gv$session_wait sw,
        gv$session s
        WHERE s.sid = sw.sid
        AND s.inst_id = sw.inst_id and sw.event not in (‘SQL*Net message from client’)
        ORDER BY sw.seconds_in_wait asc;

        isso é somente a ponta do iceberg, este assunto é extenso!!!!

        #102932
        Avatar de Victor ArmbrustVictor Armbrust
        Mestre

          Olá jmdoliveira

          Dá uma olhada: http://victor-dba.blogspot.com/2012/02/ … mance.html

          Logo vou postar mais scripts.

          Abs
          Victor

          #102935
          Avatar de jmdoliveirajmdoliveira
          Participante

            Bom dia

            Obrigado pela ajuda, estou estudando as queries que voces postaram mas tenho algumas dúvidas:

            • Em uma sessão, podem ocorrer mais de 1 wait por query certo? Como obtenho essas informações, inclusive o comando SQL?
            • Se eu resolver manter um histórico de waits dessas queries ( oq ue já faço hoje no SQL), como eu descartar as queries já lidas de uma sessão e obter somente a que está sendo executada?

            Obs: A minha idéia não é ter 100% de precisão mas uma boa amostra do que está ocorrendo no server. Supondo que uma query demore uns 5s para executar, se eu disparar a query de análise a cada 200ms por exemplo, terei um total de 25 leituras dessa query

            Obrigado.

            #102944
            Avatar de vierivieri
            Participante

              Se vc analisar friamente e com calma o resultado das querys que eu te enviei, nelas estão todas as respostas das suas perguntas.

              #102955
              Avatar de Ricardo Portilho ProniRicardo Portilho Proni
              Participante

                Minha dica para uma análise global de desempenho em um determinado período de tempo:

                http://itweb.com.br/blogs/por-que-o-oracle-esta-lento/

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