競合するクエリを表示する方法
Enterprise Editionでは、 Enterprise Managerを使用してブロッキング セッションと関連するクエリを追跡できます。( 10gドキュメントのEnterprise Manager )
この記事で詳しく説明されているように、このための SQL クエリを作成することもできます: Oracle ブロッキング セッションの追跡
記事の SQL (ブロッキング セッションのリスト):
select blocking_session, sid, serial#, wait_class, seconds_in_wait
from v$session
where blocking_session is not NULL
order by blocking_session;
アクティブなクエリの一覧表示 ( Ask Ananthaから):
SELECT a.USERNAME, a.STATUS, b.sql_text
FROM V$SESSION a
INNER JOIN V$SQLAREA b ON a.SQL_ADDRESS= b.ADDRESS;
さまざまなクエリによって取得されたロックを表示する方法。
このクエリは、セッション ID を教えてくれます ( Oracle フォーラムから):
線サイズを 150 に設定します。正面を向いてください。col sid_serial フォーム a13 col ora_user for a15; a35 の col object_name; a10 の col object_type; a15 の col lock_mode; a8 の col last_ddl; a10 の col ステータス。
sid_serial で中断します。
SELECT l.session_id||','||v.serial# sid_serial,
l.ORACLE_USERNAME ora_user,
o.object_name,
o.object_type,
DECODE(l.locked_mode,
0, 'None',
1, 'Null',
2, 'Row-S (SS)',
3, 'Row-X (SX)',
4, 'Share',
5, 'S/Row-X (SSX)',
6, 'Exclusive',
TO_CHAR(l.locked_mode)
) lock_mode,
o.status,
to_char(o.last_ddl_time,'dd.mm.yy') last_ddl
FROM dba_objects o, gv$locked_object l, v$session v
WHERE o.object_id = l.object_id
and l.SESSION_ID=v.sid
order by 2,3;
1 つのクエリを完了するのにかかる時間
SearchOracleのこの SQL で追跡できます
SELECT *
FROM
(select
username,opname,sid,serial#,context,sofar,totalwork ,round(sofar/totalwork*100,2) "% Complete"
from v$session_longops)
WHERE "% Complete" != 100
私が使用する可能性のあるその他の提案、その他のアプローチまたはツール
さて、Googleが思い浮かびます...