¿Cómo encontrar las últimas declaraciones SQL dentro de la base de datos?


Respuestas:


17

Aquí está el SQL para hacer el trabajo. Abierto para juicio.

Paso 1: Determine las ID de instalación y las ID de usuario.

SELECT inst_id,sid FROM gv$session WHERE username='<ENTER-USERNAME>';

Paso 2:

SELECT 
      s.sid
     ,s.CLIENT_INFO
     ,s.MACHINE
     ,s.PROGRAM
     ,s.TYPE
     ,s.logon_time
     ,s.osuser
     ,sq.sorts
     ,sq.DISK_READS
     ,sq.BUFFER_GETS
     ,sq.ROWS_PROCESSED
     ,sq.SQLTYPE
     ,sq.SQL_TEXT
 FROM gv$session s    
    , gv$sql sq
WHERE s.SQL_HASH_VALUE = sq.HASH_VALUE
  AND s.inst_id = :inst_id -- replace with instID from above
  AND s.sid = :sid -- replace with ID from above
  AND sq.inst_id = s.inst_id

Es posible que se devuelvan varios ID e ID de instancia. Por lo tanto, depende de la elección de los usuarios sobre cómo usar estos datos en una interfaz web, etc.


Solo una pequeña nota: Oracle admite (no in... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
tengo

1
'inst_id' representa la identificación de la instancia, no significa identificación de instalación.
milagro173

13

La consola de Oracles Enterprise Monitor muestra una gran cantidad de información sobre qué consultas SQL toman la CPU máxima, los cuellos de botella, la actividad principal en la base de datos, el bloqueo de SQL y otros.

Para un enfoque histórico, puede usar los informes AWR de Oracle para identificar áreas que le conciernen.

texto alternativo

ingrese la descripción de la imagen aquí


1
Por curiosidad: AWR es una herramienta disponible para todas las licencias de Oracle y ¿podría usarla solo a través de la línea de comandos?
Sebastian Roth

2
Lo siento, debería haberlo mencionado, por lo que sé, AWR requiere una licencia por separado: Oracle Tuning & Diagnostic Pack . Prefiero usar AWR desde la consola de Enterprise Manager. He sido bendecido con el privilegio (!) De utilizar la consola de Enterprise Manager. También descubrí que puede usar SQL Developer para monitorear SQLs, pero eso requiere la licencia anterior
Sathyajith Bhat

1
Oracle Enterprise Manager (OEM) es muy agradable. Podemos monitorear el estado de nuestra base de datos casi en tiempo real con gráficos actualizados automáticamente. Tenemos un gran monitor colgado en una pared que muestra OEM para nuestras bases de datos primarias 24x7 y es muy beneficioso para identificar problemas a medida que ocurren.
ScottCher

4

También puede usar V$SQL, hay varias columnas interesantes, RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXTetc.

Esto le daría las 10 declaraciones principales por lectura de disco (nota: esto es acumulativo para todas las ejecuciones):

select sql_id,child_number from
(
select sql_id,child_number from v$sql
order by disk_reads desc
)
where rownum<11

Si la declaración aún se encuentra en V$SQL_PLANusted, puede obtener un plan de explicación real para la consulta:

select * from table(dbms_xplan.display_cursor('sql_id',child_number));

También me gusta usar V$SQL_PLANya que contiene buena información. Si tu statistics_level=ALLpuedes usar V$SQL_PLAN_STATISTICS.


2

Para SQL reciente:

select * from v$sql

Para la historia:

select * from dba_hist_sqltext
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.