- Este tópico contém 5 respostas, 4 vozes e foi atualizado pela última vez 12 anos, 9 meses atrás por Ricardo Portilho Proni.
-
AutorPosts
-
28 de fevereiro de 2012 às 6:04 pm #102919jmdoliveiraParticipante
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.
28 de fevereiro de 2012 às 11:49 pm #102931vieriParticipanteNo 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 A10SELECT 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 A10SELECT 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 1000COLUMN username FORMAT A20
COLUMN event FORMAT A30
COLUMN wait_class FORMAT A15SELECT 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!!!!
29 de fevereiro de 2012 às 12:21 am #102932Victor ArmbrustMestreOlá jmdoliveira
Dá uma olhada: http://victor-dba.blogspot.com/2012/02/ … mance.html
Logo vou postar mais scripts.
Abs
Victor29 de fevereiro de 2012 às 3:28 pm #102935jmdoliveiraParticipanteBom 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.
29 de fevereiro de 2012 às 8:36 pm #102944vieriParticipanteSe vc analisar friamente e com calma o resultado das querys que eu te enviei, nelas estão todas as respostas das suas perguntas.
1 de março de 2012 às 3:52 pm #102955Ricardo Portilho ProniParticipanteMinha dica para uma análise global de desempenho em um determinado período de tempo:
-
AutorPosts
- Você deve fazer login para responder a este tópico.