l临时表空间管理
发布日期:2021-05-14 05:21:58 浏览次数:26 分类:精选文章

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

背景

在执行批次任务时,04:20的任务出现了失败,报错信息为“临时表空间无法扩展”。通过查阅相关脚本和资源,发现临时表空间的使用情况始终显示为100%。在进一步排查过程中,发现脚本使用存在错误,并对Oracle 11g下的临时表空间管理进行了详细梳理。

11g新视图:dba_temp_free_space

Oracle 11g引入了专门的视图`dba_temp_free_space`,用于直接查看临时表空间的剩余情况。这个视图包含四个字段:`allocated_space`、`free_space`、`used_temp_space`和`shared_space`,提供了临时表空间的使用情况全面了解。

Allocated_Space解析

`Allocated_Space`表示文件系统中已经实际分配给临时文件的空间大小。这类似于内存管理中的物理内存使用情况(HWM),但与之不同的是,临时文件采用稀疏文件的方式存储,创建时仅分配元数据,实际空间分配是在使用时动态分配的。

从组成上看,`Allocated_Space`由以下几个部分组成:

  • 元数据信息(1M)
  • 正在使用的临时段空间
  • 当前未使用但曾经使用过的临时段空间

Free_Space解析

`Free_Space`表示当前临时表空间中可以使用的空间总量。这包括两部分:

  • 当前未使用但曾经使用过的临时段空间
  • 稀疏文件中未分配的部分

需要注意的是,`Free_Space`中的部分空间属于共享段,表示当前未使用但曾经使用过的临时段空间。

临时表空间管理流程

  • **注册阶段**:在文件系统层面创建临时文件,仅生成元数据,不实际分配空间(稀疏文件特性)
  • **分配阶段**:在实际使用时,动态分配空间,类似于HWM(最大工作集大小),分配的空间不会自动释放
  • **使用阶段**:根据实际需求占用空间

实验总结

创建临时表空间

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

临时表空间扩展测试

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

使用临时表占用空间

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;

临时表空间使用情况查看

SELECT * FROM dba_temp_free_space;

实验结果与分析

–初始创建500M临时表空间

–扩展至1G后,`allocated_space`为571021624字节

–插入数据后`allocated_space`增加至571346544字节

–进一步扩展10M后,`allocated_space`稳定在571346544字节

上一篇:MySQL-8免安装版配置
下一篇:SVD简化数据

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月23日 17时34分04秒