Estoy buscando una consulta, que devolverá una lista de sentencias SQL de alta carga. No quiero usar ninguna herramienta de Oracle como ADDM o AWR. Necesito una declaración de consulta, que devolverá sentencias SQL de alta carga.¿Cómo identificar SQL de alta carga en Oracle, usando vistas de Oracle?
Respuesta
Puede consultar directamente las tablas AWR, que puede ser la forma más sencilla.
O, una técnica simple que solía usar en Oracle 8i sin estadísticas habilitadas, era seleccionar el SQL con la mayor relación de ejecución de búfer entre v $ sql. Se puede jugar con esta consulta sólo para buscar las consultas de alta densidad de ejecución, o los que hacen alta S física, etc.
Las tablas AWR y ASH dará una mejor información, pero esto podría ser un primer paso simple:
select a.sql_id, a.ratio, a.executions
from
(
select sql_id, buffer_gets/executions ratio, executions
from v$sql
where executions > 10
order by 2 desc
) a
where rownum <= 10
para encontrar rápidamente si tiene procesos que tienen sus recursos correr larga mira v $ sesson_long_ops:
SELECT * FROM v$session_longops
véase: http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm
Yo aconsejaría que echar un vistazo a esto también: http://docs.oracle.com/cd/B28359_01/server.111/b28274/instance_tune.htm
, entonces puede tomar el SID para encontrar el SQL que se está ejecutando:
SELECT sql_text FROM v$session s
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address
WHERE sid=&sid
Si está ejecutando Unix También puede echar un vistazo en el comando top
(top10
o topas
en diferentes sabores de Unix) puede entonces tomar los identificadores de proceso de las consultas que consumen la mayor cantidad de CPU y luego usar lo siguiente para obtener el sql ofensor.
SELECT
s.username,
sa.sql_text
FROM v$process p
INNER JOIN v$session s ON p.addr=s.paddr
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address
WHERE s.username IS NOT NULL AND p.spid=&SPID
- 1. Oracle: ¿Cómo convierto hexadecimal a decimal en Oracle SQL?
- 2. Usando LINQ to SQL con Oracle
- 3. Oracle SQL usando Como por un comodín
- 4. Connect en Oracle SQL
- 5. Oracle SQL Query logging
- 6. ¿Qué hace (+) en Oracle SQL?
- 7. Ver expansión en Oracle
- 8. oracle pl/sql arrays
- 9. Usando el Cursor de Ref en Oracle SQL Developer
- 10. MAX (FECHA) - SQL ORACLE
- 11. plegar automáticamente las vistas en línea de Oracle en Vim usando .vimrc
- 12. ORACLE SQL listagg function
- 13. Generar inserción sql en Oracle
- 14. Límite de argumento SQL en Oracle
- 15. Cómo usar Rollback/Commit en Oracle SQL
- 16. Copiando datos entre esquemas de Oracle usando SQL
- 17. Ubicación de spool Oracle
- 18. Variables de tabla en Oracle PL/SQL?
- 19. Comparaciones avanzadas de cadenas en Oracle SQL
- 20. Número de filas en Oracle SQL Select?
- 21. Intervalo de fechas en PL/SQL (Oracle)
- 22. Promedio de fechas en Oracle sql
- 23. Oracle SQL Developer y PostgreSQL
- 24. ¿Cómo puedo generar el script de exportación de la base de datos Oracle usando Oracle SQL Developer?
- 25. ¿Cómo imitar Oracle Materialized Views en MS SQL Server?
- 26. oracle pl/sql Error de DBMS_LOCK
- 27. ORACLE SQL Intervalos de intervalo de fechas
- 28. Oracle sql developer color coding
- 29. Cómo dividir sentencias Oracle sql para ADO.NET
- 30. Oracle SQL Developer Environment codificación
Thx for replay. ¿Podría mostrarme qué consulta debo usar para obtener datos de AWR? Declaraciones sql más caras. Como en esta imagen: http://docs.oracle.com/cd/B19306_01/server.102/b28051/tdppt_sqlid.htm#BABECDJG? BTW. ¿Qué tal v $ sqlarea vista? – Marshall
Muchas de esas estadísticas en tiempo real provienen de las tablas de ASH. Si fuera a iniciar el administrador de la empresa, podría rastrear su sesión y ver qué SQL está ejecutando para generar esos gráficos. Eche un vistazo a v $ active_session_history y vea lo que puede averiguar. –