下面的这些脚本都可以找到引起磁盘排序的SQL。
SELECT /*+ rule */ DISTINCT a.SID, a.process, a.serial#,
TO_CHAR (a.logon_time, 'YYYYMMDD HH24:MI:SS') LOGON, a.osuser,TABLESPACE, b.sql_text
FROM v$session a, v$sql b, v$sort_usage c
WHERE a.sql_address = b.address AND a.saddr = c.session_addr;
SELECT a.SID,TABLESPACE, b.sql_text
FROM v$session a, v$sql b, v$sort_usage c
WHERE a.sql_address = b.address AND a.saddr = c.session_addr;
select a.sid,a.username,a.program,c.sql_text from v$session a,v$tempseg_usage b,v$sql c where a.saddr=b.session_addr and a.sql_address=c.address ;
例子:
SQL> select a.sid,a.username,a.program,c.sql_text from v$session a,v$tempseg_usage b,v$sql c where a.saddr=b.session_addr and a.sql_address=c.address ;
SID USERNAME PROGRAM SQL_TEXT
---------- ---------- ---------------------------------------------------------------- ---------------------------------------------------------------------------
146 ROBINSON sqlplus.exe select a.table_name,a.comments from dict a,dict b order by a.table_name
145 ROBINSON sqlplus.exe select a.table_name,a.comments from dict a,dict b order by a.table_name
注意在10g中v$tempseg_usage 代替了v$sort_usage,在官方文档中你是找不到v$sort_usage视图的,然而v$sort_usage依然能够使用,v$tempseg_usage只是v$sort_usage的同义词。
另外要注意的是 不要直接用v$sql.hash_value与v$tempseg_usage.sqlhash连接 这样是查不到的,很鄙视这个视图,不知道ORACLE他奶奶的 为什么要这样定义这个SB视图。以前有网友也鄙视过这个SB视图,我现在再鄙视一下。