博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORA-1652: unable to extend temp segment by 128 in tablespace
阅读量:7117 次
发布时间:2019-06-28

本文共 3543 字,大约阅读时间需要 11 分钟。

hot3.png

系统临时表空间已经达到64G, 但是依然报ORA-1652错误,现在业务申请扩展临时表空间到128g。

  经过抓取AWR报告,发现如下几条sql语句执行时间最长,经过分析 发现 大部分是 “MINUS ”和“insert into select......”类型语句。重点关注 MINUS。

d77cb16172c2a5542bb38e692b58865cfa3.jpg

看Top10事件,direct path write temp 出现次数很多,大量等待User I/O,查看执行时间最长的SQL:

7sx6fj2pvrp99

INSERT INTO CAMS_ACCT_TEMP03 SELECT * FROM CAMS_ACCT_TEMP01 A WHERE NOT EXISTS(SELECT 1 FROM CAMS_ACCT_TEMP03 B WHERE A.ACCT_NO = B.ACCT_NO) MINUS SELECT * FROM CAMS_ACCT_TEMP02 A WHERE NOT EXISTS(SELECT 1 FROM CAMS_ACCT_TEMP03 B WHERE A.ACCT_NO = B.ACCT_NO)

 

  INSERT INTO CAMS_CUST_TEMP03 SELECT * FROM CAMS_CUST_TEMP01 MINUS SELECT * FROM CAMS_CUST_TEMP02;

 

INSERT INTO CAMS_SUB_ACCT_TEMP (COMPANY, OPEN_BANK, ACCT_NO, SUB_ACCT_NO, INTERNAL_KEY) (SELECT COMPANY, OPEN_BANK, ACCT_NO, SUB_ACCT_NO, INTERNAL_KEY FROM    INTF_CAMS_SUB_ACCT WHERE DATA_DATE = :B1 MINUS SELECT COMPANY, OPEN_BANK, ACCT_NO, SUB_ACCT_NO, INTERNAL_KEY FROM INTF_CAMS_SUB_ACCT WHERE DATA_DATE = :B2 );

 

INSERT INTO CAMS_CARD_INFO_TEMP03 SELECT * FROM CAMS_CARD_INFO_TEMP01 MINUS SELECT * FROM CAMS_CARD_INFO_TEMP02;

 

g90k5fb17b34h

INSERT INTO CAMS_CUST_TEMP01 (COMPANY , ORG_CODE , CUST_NO , CUST_NAME , CERTI_KIND , CERTI_NO , EFFECTIVE_DATE , ISSUE_ORGAN_REGION , IDENTITY_KIND , COUNTRY , SEX , POST_CODE , ADDRESS , TEL , DATA_STATE , AUDITING_STATE , ERROR_REASON , REPORT_DATE , REPORT_FILE , UPD_USER , UPD_TIME ) SELECT COMPANY , ORG_CODE , CUST_NO , CUST_NAME , CERTI_KIND , CERTI_NO , EFFECTIVE_DATE , ISSUE_ORGAN_REGION , IDENTITY_KIND , COUNTRY , SEX , POST_CODE , ADDRESS , TEL , DATA_STATE , AUDITING_STATE , ERROR_REASON , REPORT_DATE , REPORT_FILE , UPD_USER , UPD_TIME FROM INTF_CAMS_CUST A WHERE A.DATA_DATE = :B1

首先我们来了解下 ‘MINUS’函数,minus主要作用在于取两个 集合/表 补集,就类似对两个集合排序 然后类似冒泡算法对比去重。

 

抓了2个sql的执行计划,可以发现使用了大量的temp排序,一条sql执行消耗800+MB的temp 排序,可以通过 not in ,not exists 来改写,实际工作中,not in比not exists要好。

对于需要排序的列,可以适当建立索引,走索引扫描可以避免额外排序。

SQL1:

SQL_ID  cp8cdxcj53rbh, child number 0

-------------------------------------

SELECT * FROM IGRSVISE.CAMS_ACCT_TEMP01 A WHERE NOT EXISTS( SELECT 1 FROM IGRSVISE.CAMS_ACCT_TEMP03 B WHERE A.ACCT_NO = B.ACCT_NO) 

MINUS

SELECT * FROM IGRSVISE.CAMS_ACCT_TEMP02 A WHERE NOT EXISTS( SELECT 1 FROM IGRSVISE.CAMS_ACCT_TEMP03 B WHERE A.ACCT_NO = B.ACCT_NO)

98214652ec7436fca10d30ed85729797481.jpg

SQL2:

INSERT INTO CAMS_CUST_TEMP03 SELECT * FROM IGRSVISE.CAMS_CUST_TEMP01 MINUS SELECT * FROM IGRSVISE.CAMS_CUST_TEMP02

e4f423d3b9abdc7397fba030ab9334089d2.jpg

改写成如下 not in 

cb73dee42633d9e0ab3313bffcadfdaa149.jpg

SQL3 :

3;"g90k5fb17b34h";INSERT INTO CAMS_CUST_TEMP01 (COMPANY ,ORG_CODE ,CUST_NO ,CUST_NAME,CERTI_KIND ,CERTI_NO ,EFFECTIVE_DATE ,ISSUE_ORGAN_REGION,IDENTITY_KIND ,COUNTRY ,SEX ,POST_CODE ,ADDRESS ,TEL ,DATA_STATE,AUDITING_STATE ,ERROR_REASON ,REPORT_DATE ,REPORT_FILE ,UPD_USER,UPD_TIME ) SELECT COMPANY ,ORG_CODE ,CUST_NO ,CUST_NAME ,CERTI_KIND,CERTI_NO ,EFFECTIVE_DATE ,ISSUE_ORGAN_REGION ,IDENTITY_KIND ,COUNTRY,SEX ,POST_CODE ,ADDRESS ,TEL ,DATA_STATE ,AUDITING_STATE ,ERROR_REASON,REPORT_DATE ,REPORT_FILE ,UPD_USER ,UPD_TIME FROM INTF_CAMS_CUST AWHERE A.DATA_DATE = :B1

a47fce9f830fd72deb14b81f7f81e779f00.jpg

SQL4:

"0d9ua5sqm01jk";INSERT INTO CAMS_CARD_INFO_TEMP01 (COMPANY, ORG_CODE, CARD_NO,IS_PRIMARY_CARD, MATURITY_DATE, ACCT_MEDIUM, CLOSED_DATE, CARD_STATUS,ERROR_REASON, REPORT_DATE, REPORT_FILE, UPD_USER, UPD_TIME,MAIN_CARD_NO ) SELECT COMPANY, ORG_CODE, CARD_NO, IS_PRIMARY_CARD,MATURITY_DATE, ACCT_MEDIUM, CLOSED_DATE, CARD_STATUS, ERROR_REASON,REPORT_DATE, REPORT_FILE, UPD_USER, UPD_TIME, MAIN_CARD_NO FROM INTF_CAMS_CARD_INFO A WHERE A.DATA_DATE = :B1

c0832c2e39b8be79718ae58b875c943778c.jpg

临时表还有一种优化方法,类似这种:

with cr as (     select code from product where Name like 'C%' )select * from product where code in (select * from cr)

 

转载于:https://my.oschina.net/u/3862440/blog/2873357

你可能感兴趣的文章
[NOI1995]石子合并
查看>>
操作函数
查看>>
目标检测框架网络模型分析(三 王者归来)
查看>>
使用System.arraycopy()容易忽略的问题
查看>>
C++的指针使用心得
查看>>
Scene
查看>>
django之BBS-登录与注册功能-72
查看>>
php中判断是否可写?
查看>>
Flink 1.6.0 Windows操作
查看>>
hdu 5445 多重背包
查看>>
Python计算机视觉3:模糊,平滑,去噪
查看>>
Entity Framework Code First 多数据库 控制台迁移代码
查看>>
Docker镜像管理 --1.Docker ce安装和基本使用
查看>>
PAT 1129 Recommendation System[比较]
查看>>
Redis从零开始学习教程二 key值 存储和取值
查看>>
Spring_day03--课程安排_基于aspectj的注解aop_Spring的jdbcTemplate操作
查看>>
filter添加水印
查看>>
java运行环境配置及原理
查看>>
ssh相关的设置
查看>>
mongodb(Index)
查看>>