1. 程式人生 > 實用技巧 >關於Doc ID 317441.1提供的檢視當前使用臨時表空間的SQL存在的問題

關於Doc ID 317441.1提供的檢視當前使用臨時表空間的SQL存在的問題

關於Doc ID 317441.1提供的檢視當前使用臨時表空間的SQL存在的問題

How Do You Find Who And What SQL Is Using Temp Segments (Doc ID 317441.1)

對於10.1以上的版本,該文件提供如下SQL查詢,稍微改造了下。

SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks*8/1024 use_temp_mb, c.sql_text
FROM v$session a, v$tempseg_usage b, v$sqlarea c
WHERE
a.saddr = b.session_addr AND c.address= a.sql_address AND c.hash_value = a.sql_hash_value ORDER BY b.tablespace, b.blocks;

但實際上使用如下語句查詢後,存在一些其他會話也在使用temp空間。

set line 300
col username for a25
col tablespace for a10
col sql_id for a13
col prev_sql_id for a13
col SEGTYPE for a10
col contents for a10
select s.sid, s.serial#, s.username, s.sql_id, s.prev_sql_id, --u.sql_id, u.tablespace, u.contents, u.segtype, u.extents, u.blocks, round(((u.blocks * P.VALUE) / 1024 / 1024), 2) MB from v$session s, v$sort_usage u, SYS.V_$SYSTEM_PARAMETER P where s.saddr = u.session_addr AND UPPER(P.NAME) = 'DB_BLOCK_SIZE
' order by MB DESC;
View Code
14:38:42 SYS@test2(2217)> set line 300
14:45:17 SYS@test2(2217)> col username for a25
14:45:17 SYS@test2(2217)> col tablespace for a10
14:45:17 SYS@test2(2217)> col sql_id for a13
14:45:17 SYS@test2(2217)> col prev_sql_id for a13
14:45:17 SYS@test2(2217)> col SEGTYPE for a10
14:45:17 SYS@test2(2217)> col contents for a10
14:45:17 SYS@test2(2217)> select s.sid,
14:45:18   2  s.serial#,
14:45:18   3  s.username,
14:45:18   4  s.sql_id,
14:45:18   5  s.prev_sql_id,
14:45:18   6  --u.sql_id,
14:45:18   7  u.tablespace,
14:45:18   8  u.contents,
14:45:18   9  u.segtype,
14:45:18  10  u.extents,
14:45:18  11  u.blocks,
14:45:18  12  round(((u.blocks * P.VALUE) / 1024 / 1024), 2) MB
14:45:18  13  from v$session s, v$sort_usage u, SYS.V_$SYSTEM_PARAMETER P
14:45:18  14  where s.saddr = u.session_addr
14:45:18  15  AND UPPER(P.NAME) = 'DB_BLOCK_SIZE'
14:45:18  16  order by MB DESC;

       SID    SERIAL# USERNAME                  SQL_ID        PREV_SQL_ID   TABLESPACE CONTENTS   SEGTYPE       EXTENTS     BLOCKS         MB
---------- ---------- ------------------------- ------------- ------------- ---------- ---------- ---------- ---------- ---------- ----------
      1374       3955 XXXXXXX_XXXX                            38mq996b6vyf9 TEMP       TEMPORARY  LOB_DATA         6777     867456       6777
      1308       1925 XXXXXXX_XXXX              4s5t8xn6xtksd 4s5t8xn6xtksd TEMP       TEMPORARY  LOB_DATA         1272     162816       1272
      1374       3955 XXXXXXX_XXXX                            38mq996b6vyf9 TEMP       TEMPORARY  LOB_INDEX         261      33408        261
      1308       1925 XXXXXXX_XXXX              4s5t8xn6xtksd 4s5t8xn6xtksd TEMP       TEMPORARY  LOB_INDEX          92      11776         92
      2213      40587 XXXXXXX                                 gcshr3q6xnhu6 TEMP       TEMPORARY  LOB_DATA            2        256          2
      2039      60903 XXXXXXX_XXX                             4d3s1h918g6kn TEMP       TEMPORARY  LOB_DATA            2        256          2
       995       2333 XXXXXXX_XXX                             4d3s1h918g6kn TEMP       TEMPORARY  LOB_DATA            2        256          2
       998       2205 XXXXXXX_XXXXXXXX                        f7rwpfmt8qbds TEMP       TEMPORARY  LOB_DATA            1        128          1
       879      42597 XXXXXXX_XX                              75p9dz19bafvz TEMP       TEMPORARY  LOB_DATA            1        128          1
      1256       2839 XXXXXXX_XXXX                            cvy6vzrh3m9ug TEMP       TEMPORARY  LOB_DATA            1        128          1
       843         15 DBSNMP                                  520mkxqpf15q8 TEMP       TEMPORARY  LOB_DATA            1        128          1
       620      27071 DBSNMP                                  520mkxqpf15q8 TEMP       TEMPORARY  LOB_DATA            1        128          1
       419      11859 XXXXXXX_XXXX                            f7rwpfmt8qbds TEMP       TEMPORARY  LOB_DATA            1        128          1
        68       1683 DBSNMP                                  520mkxqpf15q8 TEMP       TEMPORARY  LOB_DATA            1        128          1
      1403       5365 XXXXXXX                                 43x5v5s6c4hmv TEMP       TEMPORARY  LOB_DATA            1        128          1
      1458        443 XXXXXXX_XXX                             6cs5y9sk09bv7 TEMP       TEMPORARY  LOB_DATA            1        128          1
      1521      25765 QA_XXXXXXX_XXX                          17wjjj5cghz9r TEMP       TEMPORARY  LOB_DATA            1        128          1
      1625          3 DBSNMP                                  g1n7yg84rqj0y TEMP       TEMPORARY  LOB_DATA            1        128          1
      1952       1091 XXXXXXX_XXXX                            1jhknmxn3zwn7 TEMP       TEMPORARY  LOB_DATA            1        128          1
      2234       1095 XXXXXXX_XXXX                            f7rwpfmt8qbds TEMP       TEMPORARY  LOB_DATA            1        128          1
      2039      60903 XXXXXXX_XXX                             4d3s1h918g6kn TEMP       TEMPORARY  LOB_INDEX           1        128          1
       995       2333 XXXXXXX_XXX                             4d3s1h918g6kn TEMP       TEMPORARY  LOB_INDEX           1        128          1
      2089         47 SYSTEM                                  53zazd5rv1ca9 TEMP       TEMPORARY  LOB_DATA            1        128          1
      1018         17 DBSNMP                                  520mkxqpf15q8 TEMP       TEMPORARY  LOB_DATA            1        128          1

24 rows selected.

Elapsed: 00:00:00.06

可以發現,比如sid=1374的那一行中,prev_sql_id為38mq996b6vyf9,這條sql經過確認並不會消耗sql語句。

這是因為會話1374曾經執行過消耗了大量臨時表空間的SQL,然後後續有執行了其他SQL,因此Doc ID 317441.1提供的SQL就沒捕捉到1374會話。

因此,想要找出實際的情況,不推薦使用Doc ID 317441.1提供的SQL,用我上邊另外的SQL查詢即可。

至於如何找出會話1374實際消耗temp空間的SQL,用v$open_cursor慢慢找吧。。