sql >> Base de Datos >  >> RDS >> Oracle

Cómo encontrar el historial de eventos de espera de la sesión de Oracle

En esta publicación, veremos las diferentes consultas para recuperar el historial de eventos de espera de la sesión de Oracle.

El historial de eventos de espera en una sesión específica desde el inicio se puede encontrar mediante la siguiente consulta

set lines 120 trimspool on
col evento head “Esperado por” formato a30
col total_waits head “Total|Waits” formato 999,999
col tw_ms head “Esperado|for (ms)” formato 999,999.99
col aw_ms head “Average|Wait (ms)” formato 999,999.99
col mw_ms head “Max|Wait (ms)” formato 999,999.99
select event, total_waits, time_waited10 tw_ms,
espera_promedio
10 aw_ms, max_wait*10 mw_ms
desde v$session_event
donde sid =&1
/

Supongamos que queremos ver el historial de eventos de espera de la sesión en un período particular para obtener el evento de espera solo en ese período

Entonces podemos usar la siguiente consulta ASH para extraer los datos

SQL> SELECT event,count()
FROM dba_hist_active_sess_history a
DONDE 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') y session_id=1853 y SESSION_SERIAL#=19 agrupar por evento;
CONTADOR DE EVENTOS(
)

sincronización de archivos de registro 88

SQL> Módulo SELECCIONAR, contar ()
2 DESDE dba_hist_active_sess_history a
3 DONDE a.sample_time ENTRE to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') Y
4 hasta la fecha('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') y session_id=1853 y SESSION_SERIAL#=19 y event ='log file sync' grupo por módulo;
MODULE COUNT(
)

e:FND:cp:FNDICM 88

Supongamos que queremos conocer el historial de eventos de espera de la última hora, luego se puede usar la siguiente consulta

columna sample_time formato a30
seleccione sample_time, session_state, event, sql_id
desde v$active_session_history
donde session_id =&1 y sample_time> SYSDATE – 30/(24*60)
ordenar por 1;

Caso de uso importante para la técnica.

Supongamos que queremos saber qué sesión en particular esperó durante cierto período y qué la estaba bloqueando

Podemos usar la siguiente consulta para obtener un evento de espera y otras cosas importantes

col event format a30
col sample_time format a25
select session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
from v$active_session_history
where session_id =19
y sample_time between
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy hh:mi:ss PM')
and
to_date( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
ordenar por sample_time;

Ahora, si el evento es enq:TX – contención de bloqueo de fila, sabemos que cierta sesión lo bloqueará.

select sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
from v$active_session_history
where sample_time between
to_date('9-DEC-16 01.25.00 PM' ,'dd-LUN-aa hh:mi:ss PM')
y
to_date('9-DIC-16 02.25.00 PM','dd-LUN-aa hh:mi:ss PM ')
y session_id =19
y evento ='enq:TX – contención de bloqueo de fila'
ordenar por sample_time;

Blocking_session mostrará la identificación de la sesión en la que se bloqueó la sesión. Podemos extraer la instrucción sql también usando sql_id obtenido anteriormente para la sesión bloqueada.

Se pueden usar consultas similares para identificar la información de la sesión de bloqueo y luego tomar las medidas correctivas adecuadas

Información importante

Debe haber visto que hemos utilizado el historial de sesiones activas con frecuencia y el archivo de historial de sesiones activas para estas consultas

¿Qué es el Historial de sesión activa

El historial de sesiones activas sondea la base de datos para identificar las sesiones activas y vuelca información relevante sobre cada una de ellas, como el ID de usuario, el estado, la máquina desde la que está conectado y el SQL que está ejecutando, en un área especial en el sistema global. área (SGA) de la instancia de la base de datos denominada búfer ASH

Archivo de historial de sesiones activas

El historial de sesiones activas recopila información sobre las sesiones activas de la instancia de la base de datos cada segundo. Dependiendo de la actividad de la base de datos, eso generará una gran cantidad de datos recopilados dentro del búfer ASH, pero debido a que el búfer ASH es una estructura residente en la memoria, solo tiene una cantidad finita de espacio. Además, cuando la instancia se cae, la memoria de la instancia se desvanece con ella. Por lo tanto, Oracle Database archiva la información del búfer ASH en una tabla de base de datos para que sea persistente. Los datos de esta tabla archivada son visibles en una vista llamada DBA_HIST_ACTIVE_SESS_HISTORY

Artículos relacionados

Oracle ASH (Historial de sesión activa) Consultas útiles

Cómo encontrar qué sid está haciendo un escaneo completo de la tabla

Cómo encontrar los detalles de la sesión en la base de datos de Oracle

¿Qué es el tiempo de base de datos y las sesiones activas promedio, sesión activa en Oracle?

cómo encontrar una sesión que genere muchas rehacer