usuario sobre salida procedimiento privilegios permisos parametros leer esquema ejemplos ejecutar dinamico developer dar consultar con comandos almacenado oracle sqlplus execution

sobre - Tiempo de ejecución de la consulta de Oracle



oracle pivot dinamico (4)

Me gustaría obtener el tiempo de ejecución de la consulta en Oracle. No quiero el tiempo que Oracle necesita para imprimir los resultados, solo el tiempo de ejecución.

En MySQL es fácil obtener el tiempo de ejecución desde el shell.

¿Cómo puedo hacer esto en SQL * Plus ?


Recomiendo ver las lecturas coherentes / lógicas como un mejor proxy para "trabajo" que el tiempo de ejecución. El tiempo de ejecución puede verse sesgado por lo que está sucediendo en el servidor de la base de datos, cuánta información hay en el caché, etc.

Pero si REALMENTE desea el tiempo de ejecución de SQL, la vista V $ SQL tiene tanto CPU_TIME como ELAPSED_TIME.


Utilizar:

set serveroutput on variable n number exec :n := dbms_utility.get_time; select ...... exec dbms_output.put_line( (dbms_utility.get_time-:n)/100) || '' seconds....'' );

O posiblemente:

SET TIMING ON; -- do stuff SET TIMING OFF;

... para obtener las centésimas de segundos que transcurrieron.

En cualquier caso, el tiempo transcurrido puede verse afectado por la carga del servidor / etc.

Referencia:


Uno puede emitir el comando SQL * Plus SET TIMING ON para obtener tiempos de reloj de pared, pero no se puede tomar, por ejemplo, recuperar el tiempo de ese trivial.

La configuración de AUTOTRACE, cuando se usa como SET AUTOTRACE TRACEONLY , suprimirá la salida, pero seguirá realizando todo el trabajo para satisfacer la consulta y enviará los resultados a SQL * Plus, que la suprimirá.

Por último, se puede rastrear la sesión de SQL Plus y calcular manualmente el tiempo que se tarda en esperar en los eventos que son la espera del cliente, como " Mensaje de red de SQL al cliente", "Mensaje de red de SQL * del cliente".


select LAST_LOAD_TIME, ELAPSED_TIME, MODULE, SQL_TEXT elapsed from v$sql order by LAST_LOAD_TIME desc

Ejemplo más complicado (no olvide borrar o sustituir PATTERN ):

select * from ( select LAST_LOAD_TIME, to_char(ELAPSED_TIME/1000, ''999,999,999.000'') || '' ms'' as TIME, MODULE, SQL_TEXT from SYS."V_/$SQL" where SQL_TEXT like ''%PATTERN%'' order by LAST_LOAD_TIME desc ) where ROWNUM <= 5;