l临时表空间管理

背景

检查批次任务,04:20的任务执行失败,报临时表空间无法扩展。用网上搜的一个脚本[^1]查看临时表空间使用情况,都是100%。
同时,用v s o r t u s a g e 、 v sort_usage、v sortusagevsort_segment、v$tempseg_usage等视图又查不到占用的会话。
有点蒙圈,后来才发现时查临时表空间使用的脚本错误,顺便把11g下临时表空间的使用梳理了下。

11g新视图dba_temp_free_space

11g开始有专门的视图直接查看临时表空间的剩余情况,不复杂,只有4个字段。有点疑惑的是Allocated_space。

Allocated_Space

表示文件系统中给临时文件真实分配过的大小,也就是实例使用过的最大位置(类似于HWM)。
临时文件是稀疏文件,与普通的数据文件不同,创建时只写元数据,不真实分配大小
从组成上,这个大小由三部分组成:元数据信息(1M)、正在使用的临时段空间、当前没有使用但是曾经使用过的临时段空间。

Free_space

表示当前表空间有多大空间可以使用。包括:当前没有使用但是曾经使用过的临时段空间、稀疏文件中未分配部分。

两个字段体积中有一部分属于共享,是当前没有使用但是曾经使用过的临时段空间部分。

临时表空间的管理

  • 分3个步骤:注册、分配、使用; *
    临时文件创建后,在文件系统层面注册,只创建了文件元数据,不实际分配空间(稀疏文件,ls下可以看到文件和大小,但df不实际占有空间)
    当实际使用时,才分配空间。且分配后的空间不会回收,类似hwm。
    dba_temp_free_space试图种体现了这一概念,allocated_space是实际分配的空间;free_space是空闲可用空间。

实验

1、创建表空间

CREATE  TEMPORARY TABLESPACE temptest
TEMPFILE  '/mnt/disk1/oradata/temptest.dbf' SIZE 500M   ;

2、查看dba_temp_free_spac

–查看allocated_space和free_space
–查看文件系统中文件大小,文件大小和创建时的一样, 但硬盘空闲空间没变化

571355768 --创建500M
571355768 --resize 1G
571021624 --临时表插入数据
571346544 --resize 10M

alter database tempfile '/mnt/disk1/oradata/temptest.dbf' resize 1g;

3、用临时表占用临时空间

Create Global Temporary Table temptest
(
  start_date   DATE,
  end_date     DATE,
  line_no      VARCHAR2(20),
  class_no     VARCHAR2(5),
  product_name VARCHAR2(200),
  plan_number  VARCHAR2(30),
  station_name VARCHAR2(30),
  thread_no    NUMBER(4),
  testitem     VARCHAR2(100),
  mobile_name  VARCHAR2(50),
  test_cnt     NUMBER,
  fail_cnt     NUMBER,
  station_no   VARCHAR2(5)
)   
On Commit delete rows;

4、查看dba_temp_free_space

–查看allocated_space和free_space
–查看文件系统中文件大小

总结

1、临时表空间剩余空间的查看方法
2、临时表空间分配的过程:注册->分配->根据实际用量占用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值