Cómo encontrar consultas lentas en Oracle con AWR y v$sql
Antes de optimizar necesitas saber qué consulta consume los recursos. Oracle guarda esa información; solo hay que leerla bien.
- 1
Encuentra el SQL más costoso en memoria
v$sql muestra consultas activas o recientes ordenadas por tiempo transcurrido o lecturas.
SELECT sql_id, elapsed_time/1e6 seg, executions, buffer_gets, sql_text FROM v$sql ORDER BY elapsed_time DESC FETCH FIRST 20 ROWS ONLY; - 2
Genera un reporte AWR
AWR compara dos snapshots y resume los eventos de espera y el Top SQL del periodo. Requiere licencia Diagnostics Pack.
SQL> @?/rdbms/admin/awrrpt.sql - 3
Revisa el plan real de un SQL
Usa el SQL_ID para ver el plan que Oracle ejecutó, no solo el estimado.
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('a1b2c3d4e5f6g', NULL, 'ALLSTATS LAST')); - 4
Estima con EXPLAIN PLAN
Para una consulta que aún no corre, revisa el plan estimado y busca full scans inesperados.
EXPLAIN PLAN FOR SELECT * FROM pedidos WHERE fecha > SYSDATE - 30; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
// el error común
Optimizar por el tiempo total sin dividir entre ejecuciones engaña: una consulta que corre un millón de veces puede pesar más que una lenta que corre una vez.
// cuándo conviene un experto
Si el sistema va lento y no logras aislar la causa, o el plan cambia sin razón aparente, conviene un diagnóstico dirigido. En dba.mx hacemos tuning de SQL con techo cerrado.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.