transponer scripts registros multiple español ejemplos dinamico dinamica consulta columns columnas awr 12c oracle

scripts - ¿Cómo verificar la base de datos Oracle para consultas de larga ejecución?



oracle transponer registros columnas (5)

Este muestra SQL que actualmente está "ACTIVO": -

select S.USERNAME, s.sid, s.osuser, t.sql_id, sql_text from v$sqltext_with_newlines t,V$SESSION s where t.address =s.sql_address and t.hash_value = s.sql_hash_value and s.status = ''ACTIVE'' and s.username <> ''SYSTEM'' order by s.sid,t.piece /

Esto muestra bloqueos. A veces las cosas van despacio, pero es porque está bloqueado esperando un bloqueo:

select object_name, object_type, session_id, type, -- Type or system/user lock lmode, -- lock mode in which session holds lock request, block, ctime -- Time since current mode was granted from v$locked_object, all_objects, v$lock where v$locked_object.object_id = all_objects.object_id AND v$lock.id1 = all_objects.object_id AND v$lock.sid = v$locked_object.session_id order by session_id, ctime desc, object_name /

Esta es una buena opción para encontrar operaciones largas (p. Ej. Escaneos completos de tablas). Si se debe a muchas operaciones cortas, no aparecerá nada.

COLUMN percent FORMAT 999.99 SELECT sid, to_char(start_time,''hh24:mi:ss'') stime, message,( sofar/totalwork)* 100 percent FROM v$session_longops WHERE sofar/totalwork < 1 /

Mi aplicación, que usa una base de datos Oracle, va lento o parece haberse detenido por completo.

¿Cómo puedo averiguar qué consultas son más caras, para poder investigar más?


Pruebe esto, le dará consultas que se ejecutan actualmente por más de 60 segundos. Tenga en cuenta que imprime varias líneas por consulta en ejecución si el SQL tiene varias líneas. Mire el sid, el número de serie para ver qué pertenece juntos.

select s.username,s.sid,s.serial#,s.last_call_et/60 mins_running,q.sql_text from v$session s join v$sqltext_with_newlines q on s.sql_address = q.address where status=''ACTIVE'' and type <>''BACKGROUND'' and last_call_et> 60 order by sid,serial#,q.piece


Puede generar un informe AWR (Repositorio automático de cargas de trabajo) desde DB. Ejecutar desde la línea de comandos de SQL * Plus:

SQL> @ $ ORACLE_HOME / rdbms / admin / awrrpt.sql

Lea el documento relacionado con la forma de generar y comprender el informe de AWR. le dará una visión completa del rendimiento de DB y el problema de los recursos. una vez que estemos familiarizados con el informe de AWR, será útil encontrar el mejor recurso de SQL.

En 12C EM express UI también podemos generar AWR.


v $ session_longops Si busca sofar! = totalwork verá los que no se han completado pero las entradas no se eliminan cuando finaliza la operación, por lo que también puede ver un montón de historia allí.


Step 1:Execute the query column username format ''a10'' column osuser format ''a10'' column module format ''a16'' column program_name format ''a20'' column program format ''a20'' column machine format ''a20'' column action format ''a20'' column sid format ''9999'' column serial# format ''99999'' column spid format ''99999'' set linesize 200 set pagesize 30 select a.sid,a.serial#,a.username,a.osuser,c.start_time, b.spid,a.status,a.machine, a.action,a.module,a.program from v$session a, v$process b, v$transaction c, v$sqlarea s Where a.paddr = b.addr and a.saddr = c.ses_addr and a.sql_address = s.address (+) and to_date(c.start_time,''mm/dd/yy hh24:mi:ss'') <= sysdate - (15/1440) -- running for 15 minutes order by c.start_time / Step 2: desc v$session Step 3:select sid, serial#,SQL_ADDRESS, status,PREV_SQL_ADDR from v$session where sid=''xxxx'' //(enter the sid value) Step 4: select sql_text from v$sqltext where address=''XXXXXXXX''; Step 5: select piece, sql_text from v$sqltext where address=''XXXXXX'' order by piece;