zoukankan      html  css  js  c++  java
  • 关于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慢慢找吧。。

    另外,其他通过dba_hist_sess_history追溯历史时刻temp表空间占用问题的,

    云和恩墨:TEMP表空间不足、热块竞争经典案例

    或者案例:是谁用了我的临时表空间?

    这两例,和上边一样均无法找出“隐藏于幕后”的占用临时表空间的语句的会话,

    只能找出那个时候正在使用临时表空间的SQL的会话。

    这里提供一下该脚本:

    select instance_number,to_char(a.sample_time,'yyyy-mm-dd hh24:mi:ss') sample_time,sum(temp_space_allocated)/1024/1024 mb,sql_id
    from dba_hist_active_sess_history a
    where a.temp_space_allocated is not null and a.sample_time between to_date('2020-10-27 12:49:00','yyyy-mm-dd hh24:mi:ss') and to_date('2020-10-27 12:51:00','yyyy-mm-dd hh24:mi:ss')
    group by instance_number,to_char(a.sample_time,'yyyy-mm-dd hh24:mi:ss'),sql_id
    order by 1,2;
    
    
    13:55:30 SYS@test1(1222)> select instance_number,to_char(a.sample_time,'yyyy-mm-dd hh24:mi:ss') sample_time,sum(temp_space_allocated)/1024/1024 mb,sql_id
    13:57:01   2  from dba_hist_active_sess_history a
    13:57:01   3  where a.temp_space_allocated is not null and a.sample_time between to_date('2020-10-27 12:49:00','yyyy-mm-dd hh24:mi:ss') and to_date('2020-10-27 12:51:00','yyyy-mm-dd hh24:mi:ss')
    13:57:01   4  group by instance_number,to_char(a.sample_time,'yyyy-mm-dd hh24:mi:ss'),sql_id
    13:57:01   5  order by 1,2;
    
    INSTANCE_NUMBER SAMPLE_TIME                                                MB SQL_ID
    --------------- -------------------------------------------------- ---------- -------------------------
                  1 2020-10-27 12:50:24                                         1 4b4pkcjgtxbqq
                  1 2020-10-27 12:50:34                                      1815 4b4pkcjgtxbqq
                  1 2020-10-27 12:50:44                                      3583 4b4pkcjgtxbqq
                  2 2020-10-27 12:50:01                                         1 f27uxgwvkdcgv
    
    Elapsed: 00:01:20.12

    其他

    https://blogs.sap.com/2013/06/10/oracle-wrong-sqlid-in-view-vsortusage-vtempsegusage-and-how-to-handle-it-in-11202-or-higher/

  • 相关阅读:
    [Docker] redis 全配置
    Dubbo的负载均衡策略&容错策略
    Dubbo部分知识点总结
    如何win10 上访问虚拟机(linux)上redis方法
    Linux_centOS_5.7_64下如何安装jdk1.8&mysql
    java高级&资深&专家面试题-行走江湖必备-持续更新ing
    springCloud微服务调用失败【CannotGetJdbcConnectionException: Failed to obtain JDBC Connection】
    synchronized、volatile区别、synchronized锁粒度、模拟死锁场景、原子性与可见性
    ThreadLocal什么时候会出现OOM的情况?为什么?
    volatile、ThreadLocal的使用场景和原理
  • 原文地址:https://www.cnblogs.com/PiscesCanon/p/13896643.html
Copyright © 2011-2022 走看看