oracle 临时表空间使用情况

今天用户那边执行一个很简单的SQL,输出结果集也才几万条,涉及三表,最大也才100万数据量,结果却报了表空间不足的情况,理论来说,这样的SQL怎么也不应该吃这么多临时表空间。

查询临时表空间的使用情况:

select USERNAME,SESSION_NUM,SQL_ID,TABLESPACE,SEGTYPE,BLOCKS*8192/1024/1024||' MB' as MB from v$sort_usage order by 6 desc

v$sort_usage显示给定实例的每个排序段的信息,只有发生在临时表空间的操作才会更新该视图。这里不仅仅记载排序动作,只要在临时表空间操作就会记录,而且排序发生在内存,也不会更新该视图的。

一般固定思维我都会认为此SQL有问题,然后我执行了一次之后,立马就抛异常了,我此时即时反应过来不对劲,因为SQL如果要暂用临时表空间很多,也是逐步一点一点索取空间占用的,这异常抛出太快了,转而我就去查询了dba_temp_files,果然是因为设计的问题,临时表空间创建的不合理,真的是空间太小的缘故:

alter database tempfile xxx autoextend on next 200m maxsize unlimited;

临时表空间占用的几大场景:

1、order by or group by ;

2、索引的创建和重创建;

3、distinct、SORT-MERGE JOINS、HASH JOIN等操作;

4、union & intersect & minus sort-merge joins;

5、其他异常操作

转载于:https://blog.51cto.com/2012ivan/2135008

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值