批量占满TEMP表空间问题处理与排查
创始人
2024-05-24 00:48:37
0

批量占满TEMP表空间问题处理与排查

  • 应急处置
  • 问题排查
    • 查看占用TEMP表空间高的SQL
    • 获取目标SQL执行计划
      • 方法一:EXPLAIN PLAN FOR
      • 方法二:DBMS_XPLAN.DISPLAY_CURSOR
      • 方法三:DBMS_XPLAN.DISPLAY_AWR
      • 方法四:AUTOTRACE

数据库跑批任务占满TEMP表空间时,如果空间资源足够,可以应急扩容TEMP表空间,以避免批量失败。事后可以通过查看占用TEMP表空间高的SQL执行计划,并结合批量的业务逻辑,作进一步分析。

应急处置

查看temp表空间容量(OMF模式):

--查看临时表空间文件以及是否自动扩展
set linesize 200
col file_name format a60
select tablespace_name, file_name,
bytes/1024/1024 size_mb, maxbytes/1024/1024 max_mb,autoextensible 
from dba_temp_files;--查看临时表空间大小以及使用率
select tablespace_name, tablespace_size/1024/1024 size_mb,
free_space/1024/1024 free_mb,
round((1 - nvl(free_space,0)/tablespace_size)*100,2) used_percent 
from dba_temp_free_space;

扩容temp表空间(OMF模式):

--临时表空间扩容
alter tablespace temp add tempfile;

问题排查

查看占用TEMP表空间高的SQL

查看指定时间段内占用TEMP表空间高的SQL:

-- v$active_session_history中记录了当前活动会话的快照信息(取样频率为每秒一次)。
-- v$sql中记录了SQL语句的子游标信息,对于正在执行的SQL,每5s会更新一次信息。
set lines 200
col sample_time for a30
select *from (select t.sample_time,s.PARSING_SCHEMA_NAME,t.sql_id,t.sql_child_number as sql_child,round(t.temp_space_allocated/1024/1024/1024, 2) || ' G' as temp_used,round(t.temp_space_allocated /(select sum(decode(d.autoextensible, 'YES', d.maxbytes, d.bytes))from dba_temp_files d),2) * 100 || ' %' as temp_pct,t.program,t.module,s.SQL_TEXTfrom v$active_session_history t, v$sql swhere t.sample_time > to_date('2023-02-01 02:00:00', 'yyyy-mm-dd hh24:mi:ss')and t.sample_time < to_date('2023-02-01 03:00:00', 'yyyy-mm-dd hh24:mi:ss')and t.temp_space_allocated is not nulland t.sql_id = s.SQL_IDorder by t.temp_space_allocated desc)where rownum < 20order by temp_used desc;

利用上面获取到的SQL_ID,可以查看SQL文本:

select sql_id, sql_fulltext from v$sql where sql_id = 'zhjw76kh3hjs';

获取目标SQL执行计划

方法一:EXPLAIN PLAN FOR

explain plan for <目标SQL文本>;
--例如:
--explain plan for select empno,ename,dname from scott.emp,scott.dept where emp.deptno=dept.deptno;select * from table(dbms_xplan.display);

方法二:DBMS_XPLAN.DISPLAY_CURSOR

查看刚刚执行过的SQL的执行计划:

select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

查看指定sql_id的SQL执行计划:

select * from table(dbms_xplan.display_cursor('sql_id或sql_hash_value',null,'advanced'));
--例如:
--select * from table(dbms_xplan.display_cursor('2zxtkjmt05up',null,'advanced'));

查看指定sql_idsql_hash_value、以及子游标的SQL执行计划:

select sql_text,sql_id,hash_value,child_number from v$sql 
where sql_text like 'select empno,ename%';--代入上面查到的sql_id(或hash_value)、以及child_number
select * from table(dbms_xplan.display_cursor('sql_id或sql_hash_value',
child_cursor_number,'advanced'));

方法三:DBMS_XPLAN.DISPLAY_AWR

查看指定SQL_ID的所有历史执行计划:

select * from table(dbms_xplan.display_awr('sql_id'));

查看指定SQL_ID在指定时间段采用的执行计划PLAN_HASH_VALUE

select distinct b.begin_interval_time, a.sql_id, a.plan_hash_value
from dba_hist_sqlstat a, dba_hist_snapshot b
where sql_id='2zxtkjmt05up' 
and a.snap_id = b.snap_id
and to_char(b.begin_interval_time, 'yyyy-mm-dd hh24:mi:ss') > '2023-02-01 23:59:59';

方法四:AUTOTRACE

AUTOTRACE命令的使用方法如下:

set autotrace {off|on|traceonly} [explain] [stattistics]
  1. SET AUTOTRACE ON

AUTOTRACE默认是关闭的,执行set autotrace on可以在当前session中开启autotrace。开启autotrace后,当前session中随后所有执行的SQL不仅会显示执行结果,还会显示SQL对应的执行计划和资源消耗情况。执行set autotrace off可以关闭autotrace。

  1. SET AUTOTRACE TRACEONLY

与SET AUTOTRACE ON相比,省略了SQL执行结果的具体内容,只会显示执行结果的行数、SQL执行计划和资源消耗情况。

  1. SET AUTOTRACE TRACEONLY EXPLAIN

只显示SQL的执行计划,不会显示SQL执行结果和资源消耗情况。

  1. SET AUTOTRACE TRACEONLY STATISTICS

只显示SQL执行时的资源消耗情况、以及执行结果的行数,不会显示SQL执行结果的具体内容,也不会显示执行计划。

相关内容

热门资讯

初三语文辅导作文600字 初三语文辅导作文600字  在日常生活或是工作学习中,大家最不陌生的就是作文了吧,写作文可以锻炼我们...
写景优美作文摘抄好句好段 写景优美作文摘抄好句好段大全  大家都写过作文,肯定对各类作文都很熟悉吧,尤其是充满意境的写景作文,...
成长类的作文 成长类的作文(精选5篇)  在日常学习、工作抑或是生活中,大家对作文都再熟悉不过了吧,借助作文可以提...
柳作文 柳作文  在平日的学习、工作和生活里,大家都有写作文的经历,对作文很是熟悉吧,借助作文人们可以实现文...
洗菜作文400字 洗菜作文400字四篇  在日常学习、工作或生活中,大家都有写作文的经历,对作文很是熟悉吧,写作文是培...
那一次我真什么的作文400字 那一次我真什么的作文400字(精选72篇)  在日常学习、工作和生活中,大家都不可避免地会接触到作文...
心存美好作文800字 心存美好作文800字(精选25篇)  在平平淡淡的学习、工作、生活中,许多人都写过作文吧,借助作文人...
我的新老师作文800字 我的新老师作文800字第1篇我的新老师作文800字  在2015年的秋季,我便正式成为了马关县民族中...
作文 人生若只如初见 作文 人生若只如初见  人生若只如初见,所有往事都化为江南的一场烟雨,在相视一笑中,随风荡漾起回忆的...
我的心爱之物作文500字 关于我的心爱之物作文500字(精选25篇)  在平凡的学习、工作、生活中,大家都经常接触到作文吧,写...
小路之变作文 小路之变作文 谁没有自己的故乡?谁又不爱自己的故乡呢?每个人的家庭虽然不一样,但对家乡的爱却是相同的...
英文。。我的朋友 英文。。我的朋友英文。。我的'朋友1  I have a good friend. Let me t...
我的家作文 我的家作文我们家有时快乐,有时也有小矛盾。我们家的每一个成员都有着不同的性格。他们的性格还真像他们属...
拔萝卜作文 拔萝卜作文拔萝卜作文1 拔呀拔拔萝卜 !················ 今天,我...
未来的战斗机器人作文 未来的战斗机器人作文  在日常学习、工作或生活中,大家或多或少都会接触过作文吧,作文要求篇章结构完整...
我尊敬的人作文800字 我尊敬的人作文800字  在我们的心中,都有一个最敬佩的人。以下是我尊敬的人作文800字,给大家作为...
一件感动的事作文 一件感动的事作文(精选43篇)  在平平淡淡的学习、工作、生活中,大家都接触过作文吧,作文根据体裁的...
曼珠沙华300字作文 -小学... 梦中的花仙子:你好!我喜欢养花,一些奇特的花,曼珠沙华300字作文。一次无意间想当了曼珠沙华便想养几...
除夕的作文200字 精选除夕的作文200字五篇  在现实生活或工作学习中,大家都有写作文的经历,对作文很是熟悉吧,作文是...
汉字的作文 关于汉字的作文(15篇)  在日常的学习、工作、生活中,大家对作文都不陌生吧,作文是由文字组成,经过...