RAC表空间管理---临时表空间征用问题

临时表空间的的介绍

临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大的原因。
临时表空间存储大规模排序操作(小规模排序操作会直接在RAM里完成,大规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地方在于它由临时数据文件(temporary files)组成的,而不是永久数据文件(datafiles)。临时表空间不会存储永久类型的对象,所以它不会也不需要备份。另外,对临时数据文件的操作不产生redo日志,不过会生成undo日志。
创建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大,添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏文件(Sparse File),当临时表空间文件创建时,它只会写入文件头部和最后块信息(only writes to the header and last block of the file)。它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据文件飞快的原因。
另外,临时表空间是NOLOGGING模式以及它不保存永久类型对象,因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace。
----查看TEMP表空间的使用情况
SELECT D.TABLESPACE_NAME,
SPACE "SUM_SPACE(M)",
BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",
ROUND(NVL(USED_SPACE, 0) / SPACE * 100,2) "USED_RATE(%)",
NVL(FREE_SPACE, 0)"FREE_SPACE(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 *1024), 2) SPACE,
SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES_USED) / (1024 *1024), 2) USED_SPACE,
ROUND(SUM(BYTES_FREE) / (1024 *1024), 2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME =F.TABLESPACE_NAME(+);
首先通过查看使用情况,看临时表空间是否不足,如果临时表空间不够,也会造成征用。,如果表空间那剩余很多,还是发生征用,那就是多用户使用临时表空间发生冲突,具体可以查看会话使用临时表空间的具体情况。
1、如果是临时表空间足够,但是又发生争用问题,可以考虑创建临时表空间组,并指定每个用户的临时表空间,这样就可一避免争用。
---创建临时表空间组,
CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE '+DATA' SIZE 30G AUTOEXTEND OFF tablespace group group1;
CREATE TEMPORARY TABLESPACETEMP2 TEMPFILE '+DATA' SIZE 30G AUTOEXTEND OFF tablespace group group1;
CREATE TEMPORARY TABLESPACETEMP1 TEMPFILE '+DATA' SIZE 30G AUTOEXTEND OFF tablespace group group1;
把临时表空间组设置为默认表空间
ALTER DATABASE DEFAULTTEMPORARY TABLESPACE GROUP1;
指定用户的临时表空家
alter user hr DEFAULTTEMPORARY TABLESPACE temp1;
alter user hr1 DEFAULTTEMPORARY TABLESPACE temp2;
alter user hr2 DEFAULTTEMPORARY TABLESPACE temp2;
这样就能很好的避免临时表空间的征用,也比较方便管理,如果单个用户使用临时表空间较多,可以针对用户增加空间。
2、如果临时表空间使用后未释放,可以手动释放,但是作为DBA必须自动化运行脚本,可以通过设置定时任务,释放空间。
查看未释放的空间
SELECT T1.TS#,
S.TABLESPACE_NAME,
S.USED_EXTENTS,
S.FREE_EXTENTS,
S.CURRENT_USERS,
S.FREE_BLOCKS,
T2.NEXT_EXTENT,
T2.BLOCK_SIZE,
ROUND(S.FREE_BLOCKS * T2.BLOCK_SIZE /1024 / 1024 / 1024, 2) FREE_GB,
ROUND(S.USED_BLOCKS * T2.BLOCK_SIZE /1024 / 1024 / 1024, 2) USED_GB
FROM V$SORT_SEGMENT S, V$TABLESPACE T1,DBA_TABLESPACES T2
WHERE T2.CONTENTS = 'TEMPORARY'
AND T1.NAME = T2.TABLESPACE_NAME
AND S.TABLESPACE_NAME = T2.TABLESPACE_NAME;
其中FREE_GB是空闲空间,这部分空间必不可用,因为他还未释放到free pool里。此时可以设置事件释放这部分空间。
alter session set events 'immediatetrace name DROP_SEGMENTS level TS#+1';
临时表空间是比较重要的一个组件,也比较容易发生使用后不释放的问题,并不需要太担心,这种问题比较容易解决。需要特别注意的事,如果收集表的统计信息,发生征用,造成表的统计信息无效,这就比较严重了,他会影响表的执行计划,造成业务缓慢,这种情况就需要特别关注一下临时表空间的使用情况,特别是业务量较大的OLTP系统,数据变化量太大,会很快使表的统计信息失效,要及时收集,避免统计信息失效,这时候如果收集统计信息的任务比较多,就要特别关注临时表空间的情况了。
下一节我们来说一下UNDO表空间的管理与释放。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31324783/viewspace-2132141/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31324783/viewspace-2132141/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值