sql-server - una - ver historial de consultas en sql server
Oracle: ¿hay alguna herramienta para rastrear consultas, como Profiler para el servidor sql? (12)
trabajo con el servidor sql, pero debo migrar a una aplicación con Oracle DB. para rastrear las consultas de mi aplicación, en el Servidor Sql uso la maravillosa herramienta Profiler. ¿Hay algo equivalente para Oracle?
Aparentemente, no hay una pequeña y barata utilidad que pueda ayudar a realizar esta tarea. Sin embargo, hay 101 maneras 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
Encontré una solución fácil
Paso 1. conectarse a DB con un usuario administrador usando PLSQL o sqldeveloper o cualquier otra interfaz de consulta
Paso 2. ejecutar 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 qué se ejecuta en Oracle y el orden sin usar una herramienta específica.
Este es un documento de Oracle que explica cómo rastrear consultas SQL, incluidas algunas herramientas (SQL Trace y tkprof)
Existe una herramienta comercial FlexTracer que se puede utilizar para rastrear consultas SQL de Oracle
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 eficiente de recuperar los datos.
Oracle proporciona el enunciado '' explain plan
'' 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 una ID especial, o usar una tabla de plan diferente) es:
explain plan for <sql query>
El análisis de esos datos se deja para otra pregunta, o su investigación adicional.
Pruebe PL / SQL Developer tiene una agradable interfaz gráfica de usuario fácil de usar para el generador de perfiles. Es muy bueno probar la prueba. Juro por esta herramienta cuando trabajo en bases de datos Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
Puede utilizar The Oracle Enterprise Manager para supervisar 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 mire la pestaña SQL de cada sesión.
Hay otras formas. El administrador de la empresa solo pone colores bonitos a 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 la herramienta Explain PLAN FOR, TRACE y muchas otras formas de instrumentalización. Hay algunos informes en el administrador de la empresa para las consultas SQL más costosas. También puede buscar consultas recientes guardadas en el caché.
The Catch Capture todos los SQL ejecutados entre dos puntos en el tiempo. Al igual que la forma en que SQL Server también lo hace.
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, usted simplemente habilitaría el rastreo de sesión para ese usuario, pero hay dos problemas potenciales con ese enfoque.
- La primera es que muchas aplicaciones basadas en web mantienen un conjunto de conexiones de bases de datos persistentes que se comparten entre múltiples usuarios.
- El segundo es que algunas aplicaciones se conectan, ejecutan algunos SQL y se desconectan muy rápido, lo que dificulta la habilitación del seguimiento de la sesión (por supuesto, podría usar un desencadenante de inicio de sesión para habilitar el seguimiento de la sesión en este caso).
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 conteniendo una instantánea de la base de datos en un punto particular. Las tablas se consultarán para generar una lista de todos los SQL ejecutados 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.
Tome 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 /
Haga 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 mostrará una lista de todos los hashes 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;
/
Éste mostrará el hash y el SQL mismo: configure las páginas 999 líneas 100 break 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. Poner en orden No olvides eliminar las tablas de instantáneas una vez que hayas terminado:
drop table sql_exec_before
/
drop table sql_exec_after
/
Viendo que acabo de votar una pregunta reciente como un duplicado y apunté en esta dirección. . .
Un par más - en SQL * Plus - SET AUTOTRACE ON - dará un plan de explicación y estadísticas para cada instrucción ejecutada.
TOAD también permite el perfil del lado del cliente.
La desventaja de ambos es que solo le informan el plan de ejecución de la declaración, pero no cómo llegó el optimizador a ese plan, para eso necesitará un rastreo de menor nivel en el servidor.
Otra información importante para comprender son las instantáneas de Statspack: son una buena forma de ver el rendimiento de la base de datos en general. El plan de explicación, etc., es bueno 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.
intente esto (también es gratis): http://www.aboves.com/Statement_Tracer_for_Oracle.exe
Es una herramienta para Oracle para capturar consultas ejecutadas de forma similar al Analizador de SQL Server. Herramienta indispensable para el mantenimiento de aplicaciones que utilizan este servidor de base de datos.
puedes descargarlo desde el sitio oficial iacosoft.com
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''
- Descubre el número de serie de sid y de serie que te interesan:
select sid, serial# from v$session
where ...your_search_params...
--puedes empezar a rastrear con 10046 evento, 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;
- Desactivar el seguimiento con configuración 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 vinculación se agregan al archivo de rastreo 8 - se agregan esperas 12 - se agregan los valores de las variables de vinculación y se agregan los eventos de espera * /
--como si quieres rastrear tu propia sesión con mayor nivel:
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 rastreo sin procesar:
select value from v$parameter p
where name=''user_dump_dest''
--name 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, use TKPROF
para hacer que el archivo de rastreo 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 rastreo:
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;
/
Solo un poco traducido http://www.sql.ru/faq/faq_topic.aspx?fid=389 Original es más completo, pero de todos modos, esto es mejor que lo que otros publicaron en mi humilde opinión