Документ создан: 11.02.2010

Длительные запросы

26.01.2010 г.

Иногда возникает необходимость просмотреть длительные запросы, выполняемые в данный момент в определённой сессии. Нижеприведённый код выводит информацию о действии, выполненном объёме, общем объёме, проценте выполнения, единицах, времени, прошедшем с момента старта, и об оставшемся времени выполнения.

SELECT decode(
			target_desc
			,NULL
			,decode(target,NULL,opname, concat(opname, concat (' - ',target)))
			,decode(target,NULL,concat(opname, concat (' : ',target_desc))
			,concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) action
		,sofar
		,totalwork
		,round(sofar*100/totalwork,2) percent
		,units
		,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (elapsed_seconds, 'second'),'hh24:mi:ss') elapsed_time
		,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (time_remaining, 'second'),'hh24:mi:ss') time_remaining
FROM v$session_longops
WHERE sid = 492 AND serial# = 2611;

В этом случае нужно предварительно получить sid и serial#, например, так:

select sid,serial# from v$session where username='SCOTT' and machine like 'myhost%';

то же, что и в первом случае, но для всех активных сессий:

SELECT decode(
			target_desc
			,NULL
			,decode(target,NULL,opname, concat(opname, concat (' - ',target)))
			,decode(target,NULL,concat(opname, concat (' : ',target_desc))
			,concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) action
		,sofar
		,totalwork
		,round(sofar*100/totalwork,2) percent
		,units
		,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (elapsed_seconds, 'second'),'hh24:mi:ss') elapsed_time
		,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (time_remaining, 'second'),'hh24:mi:ss') time_remaining
FROM v$session_longops
WHERE (sid,serial#) in (select sid,serial# from v$session where status='ACTIVE');
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate