Trabajo con el servidor SQL, pero debo migrar a una aplicación con Oracle DB. para rastrear las consultas de mi aplicación, en Sql Server utilizo la maravillosa herramienta Profiler. ¿Hay algo equivalente para Oracle?
sql-server
oracle
profiler
stefano m
fuente
fuente
sql server profiler
? ¿Qué estás usando ahora?DBMS_PROFILER
(básico y limitado, pero muy conveniente) oDBMS_HPROF
(más preciso pero requiere más configuración). Sin embargo, no conozco SQL Server, por lo que es posible que tenga un concepto de creación de perfiles diferente al de cualquiera de los paquetes de Oracle y lo que desea es más como un seguimiento en Oracle.Respuestas:
Puedes usar The Oracle Enterprise Manager para monitorear las sesiones activas, con la consulta que se está ejecutando, su plan de ejecución, bloqueos, algunas estadísticas e incluso una barra de progreso para las tareas más largas.
Ver: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
Vaya a Instancia -> sesiones y observe la pestaña SQL de cada sesión.
Hay otras formas. Enterprise Manager simplemente pone con bonitos colores lo que ya está disponible en vistas especiales como las documentadas aquí: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage
Y, por supuesto, también puede utilizar Explain PLAN FOR, la herramienta TRACE y muchas otras formas de instrumentalización. Hay algunos informes en el administrador empresarial para las consultas SQL más caras. También puede buscar consultas recientes guardadas en la caché.
fuente
Encontré una solución fácil
Paso 1. conectarse a la base de datos con un usuario administrador mediante PLSQL o sqldeveloper o cualquier otra interfaz de consulta
Paso 2. ejecute el script a continuación; en la columna S.SQL_TEXT, verá las consultas ejecutadas
SELECT S.LAST_ACTIVE_TIME, S.MODULE, S.SQL_FULLTEXT, S.SQL_PROFILE, S.EXECUTIONS, S.LAST_LOAD_TIME, S.PARSING_USER_ID, S.SERVICE FROM SYS.V_$SQL S, SYS.ALL_USERS U WHERE S.PARSING_USER_ID=U.USER_ID AND UPPER(U.USERNAME) IN ('oracle user name here') ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;
El único problema con esto es que no puedo encontrar una manera de mostrar los valores de los parámetros de entrada (para llamadas a funciones), pero al menos podemos ver lo que se ejecuta en Oracle y el orden sin usar una herramienta específica.
fuente
alter system set timed_statistics=true
--o
alter session set timed_statistics=true --if want to trace your own session
- debe ser lo suficientemente grande:
select value from v$parameter p where name='max_dump_file_size'
- Averigüe el sid y el número de serie de la sesión que le interesa:
select sid, serial# from v$session where ...your_search_params...
- puede comenzar a rastrear con el evento 10046, el cuarto parámetro establece el nivel de rastreo (12 es el más grande):
begin sys.dbms_system.set_ev(sid, serial#, 10046, 12, ''); end;
- apagar el rastreo con el ajuste de nivel cero:
begin sys.dbms_system.set_ev(sid, serial#, 10046, 0, ''); end;
/ * niveles posibles: 0 - desactivado 1 - nivel mínimo. Al igual que set sql_trace = true 4 - los valores de las variables de enlace se agregan al archivo de seguimiento 8 - se agregan las esperas 12 - se agregan los valores de las variables de enlace y los eventos de espera * /
- lo mismo si desea rastrear su propia sesión con un nivel más grande:
alter session set events '10046 trace name context forever, level 12';
--apagar:
alter session set events '10046 trace name context off';
- se ubicará el archivo con información de seguimiento sin procesar:
select value from v$parameter p where name='user_dump_dest'
--nombre del archivo (*. trc) contendrá spid:
select p.spid from v$session s, v$process p where s.paddr=p.addr and ...your_search_params...
--también puede establecer el nombre usted mismo:
alter session set tracefile_identifier='UniqueString';
- finalmente, utilícelo
TKPROF
para hacer que el archivo de seguimiento sea más legible:C:\ORACLE\admin\databaseSID\udump> C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. C:\ORACLE\admin\databaseSID\udump>
- para ver el estado del uso del archivo de seguimiento:
set serveroutput on size 30000; declare ALevel binary_integer; begin SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel); if ALevel = 0 then DBMS_OUTPUT.Put_Line('sql_trace is off'); else DBMS_OUTPUT.Put_Line('sql_trace is on'); end if; end; /
Simplemente traducido http://www.sql.ru/faq/faq_topic.aspx?fid=389 El original es más completo, pero de todos modos esto es mejor que lo que otros publicaron en mi humilde opinión
fuente
GI Oracle Profiler v1.2
Es una herramienta para que Oracle capture consultas ejecutadas de manera similar al SQL Server Profiler. Herramienta indispensable para el mantenimiento de aplicaciones que utilizan este servidor de base de datos.
puedes descargarlo desde el sitio oficial iacosoft.com
fuente
Pruebe PL / SQL Developer, tiene una interfaz GUI agradable y fácil de usar para el generador de perfiles. Es bastante bueno probar la versión de prueba. Juro por esta herramienta cuando trabajo en bases de datos Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
fuente
Dado que acabo de votar una pregunta reciente como un duplicado y apunto en esta dirección. . .
Un par más, en SQL * Plus, SET AUTOTRACE ON, proporcionará un plan explicativo y estadísticas para cada declaración ejecutada.
TOAD también permite la elaboración de perfiles del lado del cliente.
La desventaja de ambos es que solo le dicen el plan de ejecución para la declaración, pero no cómo el optimizador llegó a ese plan; para eso, necesitará un seguimiento del lado del servidor de nivel inferior.
Otro aspecto importante que hay que entender son las instantáneas de Statspack: son una buena forma de observar el rendimiento de la base de datos en su conjunto. Explicar plan, etc., son buenos para encontrar sentencias SQL individuales que son cuellos de botella. Statspack es bueno para identificar el hecho de que su problema es que una declaración simple con un buen plan de ejecución se llama 1 millón de veces en un minuto.
fuente
La captura es Capturar toda la ejecución de SQL entre dos puntos en el tiempo. Como también lo hace SQL Server.
Hay situaciones en las que es útil capturar el SQL que un usuario en particular está ejecutando en la base de datos. Por lo general, simplemente habilitaría el seguimiento de sesiones para ese usuario, pero hay dos problemas potenciales con ese enfoque.
Una solución rápida y sucia al problema es capturar todas las sentencias SQL que se ejecutan entre dos puntos en el tiempo.
El siguiente procedimiento creará dos tablas, cada una de las cuales contiene una instantánea de la base de datos en un punto en particular. Luego, se consultarán las tablas para producir una lista de todas las ejecuciones de SQL durante ese período.
Si es posible, debe hacer esto en un sistema de desarrollo silencioso; de lo contrario, corre el riesgo de recuperar demasiados datos.
Tomar la primera instantánea Ejecute el siguiente sql para crear la primera instantánea:
create table sql_exec_before as select executions,hash_value from v$sqlarea /
Consiga que el usuario realice su tarea dentro de la aplicación.
Toma la segunda instantánea.
create table sql_exec_after as select executions, hash_value from v$sqlarea /
Verifique los resultados Ahora que ha capturado el SQL, es hora de consultar los resultados.
Esta primera consulta enumerará todos los hash de consulta que se han ejecutado:
select aft.hash_value from sql_exec_after aft left outer join sql_exec_before bef on aft.hash_value = bef.hash_value where aft.executions > bef.executions or bef.executions is null; /
Este mostrará el hash y el SQL en sí: establecer páginas 999 líneas 100 romper en hash_value
select hash_value, sql_text from v$sqltext where hash_value in ( select aft.hash_value from sql_exec_after aft left outer join sql_exec_before bef on aft.hash_value = bef.hash_value where aft.executions > bef.executions or bef.executions is null; ) order by hash_value, piece /
5. Ponga en orden No olvide eliminar las tablas de instantáneas una vez que haya terminado:
drop table sql_exec_before / drop table sql_exec_after /
fuente
Oracle, junto con otras bases de datos, analiza una consulta determinada para crear un plan de ejecución. Este plan es la forma más eficaz de recuperar los datos.
Oracle proporciona la
explain plan
declaración ' ' que analiza la consulta pero no la ejecuta, sino que llena una tabla especial que puede consultar (la tabla del plan).La sintaxis (versión simple, hay otras opciones como marcar las filas en la tabla del plan con un ID especial o usar una tabla de plan diferente) es:
explain plan for <sql query>
El análisis de esos datos queda para otra pregunta, o su investigación adicional.
fuente
Existe una herramienta comercial FlexTracer que se puede utilizar para rastrear consultas SQL de Oracle
fuente
Este es un documento de Oracle que explica cómo rastrear consultas SQL, incluidas un par de herramientas (SQL Trace y tkprof)
enlace
fuente
Aparentemente, no existe una pequeña utilidad sencilla y barata que ayude a realizar esta tarea. Sin embargo, hay 101 formas de hacerlo de una manera complicada e inconveniente.
El siguiente artículo describe varios. Probablemente haya docenas más ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm
fuente