v$SORT_USAGE.SQL_ID 不是會話當前的執行的SQL ID

kewin發表於2011-09-02
v$SORT_USAGE.SQL_ID 不是會話當前的執行的SQL ID
Kevin Zou
2011-9-2

資料庫的臨時表空間使用率較高,在查詢那個會話在使用臨時表空間時,發現檢視v$SORT_USAGE.SQL_ID 不是會話當前的執行的SQL ID。
當前使用了臨時段的會話:
SYS@hr9prd>select username,session_addr,sql_id,blocks from v$sort_usage;

USERNAME                       SESSION_ADDR     SQL_ID            BLOCKS
------------------------------ ---------------- ------------- ----------
SYSADM                         07000003CF4AAAB8 cka9cd1fxjsyf       8704
SYSADM                         07000003C9477278 an24bnt74vjj7        128
SYSADM                         07000003C947C858 74nqkqnrq57p2        128
SYS                            07000003CA4BA160 9babjv8yq8ru3        256
SYS                            07000003C84A9850 a96buqnd9gfnf     180992
SYS                            07000003C84A9850 a96buqnd9gfnf     861440
SYS                            07000003C84A9850 a96buqnd9gfnf        128
SYS                            07000003C84B1920 bmj0tpq5j7m17        128
SYSADM                         07000003CF4DF000 an24bnt74vjj7        128

發現SYS使用者的在使用較多的臨時段。通過SQL_ID檢視其執行的SQL:
SYS@hr9prd>SELECT   /*+ ORDERED */
  2           sql_text
    FROM v$sqltext a
   WHERE a.sql_id = '&sql_id'
ORDER BY piece ASC  3    4    5  ;
Enter value for sql_id: a96buqnd9gfnf
old   4:    WHERE a.sql_id = '&sql_id'
new   4:    WHERE a.sql_id = 'a96buqnd9gfnf'

SQL_TEXT
----------------------------------------------------------------
alter user sys tempo

這個SQL是我曾經執行過的,但不會佔用這麼多的臨時段。
通過V$SESSION 和V$SORT_USAGE聯合來查詢:
 SYS@hr9prd>select s.username, s.status, s.prev_sql_id, s.sql_id, u.sql_id
  2  from v$session s, v$sort_usage u
where s.SADDR = u.session_addr  3  ;

USERNAME                       STATUS                   PREV_SQL_ID   Current SQ     V$SORT_USAGE.SQL_ID
------------------------------ ------------------------ ------------- ------------- -------------
SYSADM                         ACTIVE                   cka9cd1fxjsyf 07r07hppftnd1 cka9cd1fxjsyf
SYSADM                         ACTIVE                   bfubyxbqd8vbh bmmyrbb7n3pa4 1vd8n1t6vzv1t
SYSADM                         INACTIVE                 74nqkqnrq57p2               74nqkqnrq57p2
SYS                                 INACTIVE                 9babjv8yq8ru3               9babjv8yq8ru3
SYS                                 ACTIVE                   a96buqnd9gfnf       bt6tw6204sj44      a96buqnd9gfnf
SYS                                 ACTIVE                   a96buqnd9gfnf      bt6tw6204sj44       a96buqnd9gfnf
SYS                                 ACTIVE                   05qwx9346vy5k     538hpu9pg0gb7    05qwx9346vy5k
SYSADM                         ACTIVE                   an24bnt74vjj7       gmcba0bqsar5t      an24bnt74vjj7


看到V$SORT_USAGE.SQL_ID其實對應的V$SESSION.PREV_SQL_ID的欄位,也就是會話執行SQL的前一個SQL。
-THE END-

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/40239/viewspace-706477/,如需轉載,請註明出處,否則將追究法律責任。

相關文章