前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DBA命令速查6: 临时表空间( Temporary Tablespace)的相关确认SQL

DBA命令速查6: 临时表空间( Temporary Tablespace)的相关确认SQL

作者头像
SQLplusDB
发布2022-08-22 13:26:46
6340
发布2022-08-22 13:26:46
举报
文章被收录于专栏:Oracle数据库技术

编者按:留存一下供自己需要时查找。

【免责声明】本号文章仅代表个人观点,与任何公司无关,仅供参考。

编辑|SQL和数据库技术(ID:SQLplusDB)

临时表空间表空间信息

代码语言:javascript
复制
select * from dba_temp_free_space;

临时表空间的使用量

代码语言:javascript
复制
SELECT d.tablespace_name "Name" ,
       NVL(a.bytes / 1024 / 1024, 0) "Size(MB)",
       NVL(t.bytes, 0) / 1024 / 1024 "Used(MB)",
       NVL(t.bytes / a.bytes * 100, 0) "Used(%)",
       NVL(a.bytes - NVL(t.bytes, 0), 0)/1024/1024 "Free(MB)",
       d.status,
       a.count,
       d.contents,
       d.extent_management,
       d.segment_space_management
FROM sys.dba_tablespaces d,
    (select tablespace_name,
            sum(bytes) bytes,
            count(file_id) count
     from dba_temp_files
     group by tablespace_name) a,
    (select ss.tablespace_name ,
            sum((ss.used_blocks*ts.blocksize)) bytes
    from gv$sort_segment ss,
         sys.ts$ ts
    where ss.tablespace_name = ts.name
    group by ss.tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+) AND
      d.tablespace_name = t.tablespace_name(+) AND
      d.extent_management like 'LOCAL' AND
      d.contents like 'TEMPORARY';

查询temp表空间使用率

代码语言:javascript
复制
select  df.tablespace_name "Tablespace",
       df.totalspace "Total(MB)",
       nvl(FS.UsedSpace, 0)  "Used(MB)",
       (df.totalspace - nvl(FS.UsedSpace, 0)) "Free(MB)",
       round(100 * (1-( nvl(fs.UsedSpace, 0) / df.totalspace)), 2) "Pct. Free(%)"
FROM  (SELECT tablespace_name, round(SUM(bytes) / 1048576) TotalSpace
        FROM   dba_TEMP_files
        GROUP  BY tablespace_name) df,
       (SELECT tablespace_name, ROUND(SUM(bytes_used) / 1024 / 1024)  UsedSpace
        FROM   gV$temp_extent_pool
        GROUP  BY tablespace_name) fs  WHERE  df.tablespace_name = fs.tablespace_name(+)

查询实时使用temp表空间的sql_id和sid

代码语言:javascript
复制
set linesize 260 pagesize 1000
col machine for a40
col program for a40
SELECT se.username,
       sid,
       serial#,
       se.sql_id
       machine,
       program,
       tablespace,
       segtype,
       (su.BLOCKS*8/1024/1024) GB
  FROM v$session se, v$sort_usage su
 WHERE se.saddr = su.session_addr
 order by su.BLOCKS desc;


/*需要注意的是这里查询sql_id要用v$session视图的sql_id,而不要用v$sort_usage视图的sql_id,v$sort_usage视图里面的sql_id是不准确的*/

SQL执行时候的临时表空间使用量

代码语言:javascript
复制
SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.segtype, b.blocks, 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;


  ※blocks列是块数,大小计算如下
    例:blocks*block_size

查看历史临时表空间的使用

---某SQL历史临时表空间的使用

代码语言:javascript
复制
select distinct sample_time, session_id,program,TEMP_SPACE_ALLOCATED,
sql_id,sql_exec_start from  DBA_HIST_ACTIVE_SESS_HISTORY
 where sql_id='<SQL_ID>' order by sample_time;
代码语言:javascript
复制
select distinct sample_time, session_id,program,TEMP_SPACE_ALLOCATED,
sql_id,sql_exec_start from  GV$ACTIVE_SESSION_HISTORY 
where sql_id='<SQL_ID>'  order by sample_time;

查询历史的temp表空间的使用的SQL_ID

代码语言:javascript
复制
select a.SQL_ID,
       a.SAMPLE_TIME,
       a.program,
       sum(trunc(a.TEMP_SPACE_ALLOCATED / 1024 / 1024)) MB
  from v$active_session_history a
 where TEMP_SPACE_ALLOCATED is not null 
 and sample_time between
 to_date('&date1', 'yyyy-mm-dd hh24:mi:ss') and
 to_date('&date2', 'yyyy-mm-dd hh24:mi:ss')
 group by a.sql_id,a.SAMPLE_TIME,a.PROGRAM
 order by 2 asc,4 desc;

查看临时表空间都是被什么SQL占用?

代码语言:javascript
复制
SELECT vt.inst_id,
         vs.sid,
         vs.serial#,
         vs.machine,
         vs.saddr,
         vs.program,
         vs.module,
         vs.logon_time,
         vt.tempseg_usage,
         vt.segtype
    FROM gv$session vs,
         (  SELECT inst_id,
                   username,
                   session_addr,
                   segtype,
                   ROUND (SUM (blocks) * 8192 / 1024 / 1024 / 1024, 2)
                      tempseg_usage
              FROM gv$tempseg_usage
          GROUP BY inst_id,
                   username,
                   session_addr,
                   segtype
          ORDER BY 4 DESC) vt
   WHERE vs.inst_id = vt.inst_id AND vs.saddr = vt.session_addr
ORDER BY tempseg_usage DESC;

查询使用临时表空间会话

代码语言:javascript
复制
SELECT SE.USERNAME,
       SE.SID,
       SE.SERIAL#,
       SE.SQL_ADDRESS,
       SE.MACHINE,
       SE.PROGRAM,
       SU.TABLESPACE,
       SU.SEGTYPE,
       SU.CONTENTS FROM V$SESSION SE,
V$SORT_USAGE SU  WHERE SE.SADDR = SU.SESSION_ADDR;

有用的MOS相关文章

代码语言:javascript
复制
Note: 67534.1  VIEW: "V$SORT_USAGE" Reference Note
Note: 364417.1 How Can Temporary Segment Usage Be Monitored Over Time?
Note: 289894.1 Queries To Monitor Temporary Tablespace Usage
TEMPORARY Tablespaces : Tempfiles or Datafiles ? (Doc ID 160426.1)
Master Note: Troubleshooting Oracle Temporary Tablespaces (Doc ID 1524594.1)
Master Note: Overview of Oracle Temporary Tablespaces (Doc ID 1498442.1)
 How Do You Find Who And What SQL Is Using Temp Segments [ID 317441.1]
How Can Temporary Segment Usage Be Monitored Over Time? (Doc ID 364417.1)
ORA-1652の主な発生原因とその対処方法について(KROWN:68738) (Doc ID 1723269.1)
[10g 新機能] 一時表領域グループ(KROWN:84881) (Doc ID 1727040.1)
11g: ローカル管理一時表領域の縮小(SHRINKコマンド)(KROWN:127335) (Doc ID 1741644.1)
一時表領域(KDS:7252) (Doc ID 1772113.1)
表領域の管理(KDS:3137) (Doc ID 1771502.1)
ORA-1652 On A Temporary Tablespace With Autoextensible Files (Doc ID 303930.1)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL和数据库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档