Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como encontrar o histórico waitevent da sessão Oracle


Neste post, veremos as diferentes consultas para recuperar o histórico waitevent da sessão Oracle.

O histórico de eventos de espera em uma sessão específica desde o início pode ser encontrado usando a consulta abaixo

definir linhas 120 trimspool no
col event head Formato “Aguardado” a30
col total_waits head Formato “Total|Aguarda” 999.999
col tw_ms head Formato “Aguardado|por (ms)” 999.999,99
col aw_ms head Formato “Average|Wait (ms)” 999.999,99
col mw_ms head Formato “Max|Wait (ms)” 999.999,99
selecionar evento, total_waits, time_waited10 tw_ms,
espera_média
10 aw_ms, max_wait*10 mw_ms
de v$session_event
onde sid =&1
/


Suponha que queremos ver o histórico de eventos de espera da sessão em determinado período para obter o evento de espera somente nesse período

Então podemos usar a consulta ASH abaixo para extrair os dados

SQL> SELECT event,count()
FROM dba_hist_active_sess_history a
WHERE a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') AND
to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') e session_id=1853 e SESSION_SERIAL#=19 agrupar por evento;
CONTAGEM DE EVENTOS(
)

sincronização de arquivo de log 88



SQL> SELECT module,count()
2 FROM dba_hist_active_sess_history a
3 WHERE a.sample_time BETWEEN to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') AND
4 to_date('12-OCT-2016 15:04:00′,'DD-MON-AAAA HH24:MI:SS') e session_id=1853 e SESSION_SERIAL#=19 e event ='log file sync' agrupar por módulo;
MODULE COUNT(
)

e:FND:cp:FNDICM 88



Suponha que queremos saber o histórico do evento de espera da última hora, então a consulta abaixo pode ser usada

coluna sample_time formato a30
selecione sample_time, session_state, event, sql_id
de v$active_session_history
onde session_id =&1 e sample_time> SYSDATE – 30/(24*60)
ordenar por 1;

Caso de uso importante para a técnica.

Suponha que queremos saber o que uma sessão específica estava esperando durante um determinado período e o que a estava bloqueando

Podemos usar a consulta abaixo para obter o evento de espera e outras coisas importantes

col event format a30
col sample_time format a25
selecione session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
de v$active_session_history
onde session_id =19
e sample_time entre
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy hh:mi:ss PM')
e
to_date( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
pedir por sample_time;

Agora, se o evento for enq:TX – contenção de bloqueio de linha, sabemos que determinada sessão o bloqueará.

selecione sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
de v$active_session_history
onde sample_time entre
to_date('9-DEC-16 01.25.00 PM' ,'dd-MON-aa hh:mi:ss PM')
e
to_date('9-DEC-16 02.25.00 PM','dd-MON-aa hh:mi:ss PM ')
e session_id =19
e event ='enq:TX – contenção de bloqueio de linha'
ordenar por sample_time;

Blocking_session mostrará o ID da sessão em que a sessão foi bloqueada. Podemos extrair a instrução sql também usando sql_id obtido acima para a sessão bloqueada.

Consultas semelhantes podem ser usadas para identificar as informações da sessão de bloqueio e tomar as ações corretivas adequadas

Informações importantes

Você deve ter visto que usamos frequentemente o histórico de sessões ativas e o arquivo de histórico de sessões ativo para essas consultas

O que é Histórico de sessões ativas

O Active Session History pesquisa o banco de dados para identificar as sessões ativas e despeja informações relevantes sobre cada uma delas - como o ID do usuário, o estado, a máquina da qual está conectado e o SQL que está executando - em uma área especial no sistema global área (SGA) da instância do banco de dados chamada de buffer ASH

Arquivo de histórico de sessão ativo

O Active Session History coleta informações sobre sessões ativas da instância do banco de dados a cada segundo. Dependendo da atividade do banco de dados, isso levará a muitos dados coletados dentro do buffer ASH, mas como o buffer ASH é uma estrutura residente na memória, ele tem apenas uma quantidade finita de espaço. Além disso, quando a instância fica inativa, a memória da instância desaparece com ela. Portanto, o Oracle Database arquiva as informações do buffer ASH em uma tabela de banco de dados para torná-las persistentes. Esses dados de tabela arquivados são visíveis em uma visualização chamada DBA_HIST_ACTIVE_SESS_HISTORY



Artigos relacionados

Consultas úteis do Oracle ASH (Active Session History)

Como descobrir qual lado está fazendo a varredura completa da tabela

Como encontrar detalhes da sessão no banco de dados Oracle

O que é tempo de banco de dados e sessões ativas médias, sessão ativa no oracle

como encontrar sessão gerando muitos refazer