Me gusta obtener las últimas declaraciones ejecutadas dentro de mi base de datos, junto con indicadores de rendimiento.
Como tal, me gusta saber qué declaraciones SQL fueron más intensivas en CPU / DISCO.
Me gusta obtener las últimas declaraciones ejecutadas dentro de mi base de datos, junto con indicadores de rendimiento.
Como tal, me gusta saber qué declaraciones SQL fueron más intensivas en CPU / DISCO.
Respuestas:
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.
in
... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
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.
También puede usar V$SQL
, hay varias columnas interesantes, RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT
etc.
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_PLAN
usted, 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_PLAN
ya que contiene buena información. Si tu statistics_level=ALL
puedes usar V$SQL_PLAN_STATISTICS
.