首页 > Linux操作系统 > Linux操作系统 > 临时表空间的一些知识总结
临时表空间内不能存储永久数据对象
推荐使用本地管理
临时表空间不能被OFFLINE
临时表空间不能READONLY
除非有一个新的临时表空间可用并设置为默认临时表空间,否则原来的不可以被删除
避免使用SYSTEM表空间作为临时表空间
哪些操作会用到临时表空间:
- 索引创建或重创建.
- ORDER BY or GROUP BY
- DISTINCT 操作.
- UNION & INTERSECT & MINUS
- Sort-Merge joins.
- Analyze 操作
- 有些异常将会引起temp暴涨
查看TEMPFILE状态:
select file#,name,status,enabled,bytes/1024/1024 from v$tempfile;
临时表空间使用情况:
select c.tablespace_name,
to_char(c.bytes/1024/1024,'99,999') total_bytes,
to_char( (c.bytes-d.bytes_used)/1024/1024,'99,999') free_bytes,
to_char(d.bytes_used/1024/1024,'99,999') use_bytes,
to_char(d.bytes_used*100/c.bytes,'99.99') || '%' use
from
(select tablespace_name,sum(bytes) bytes
from dba_temp_files group by tablespace_name) c,
(select tablespace_name,sum(bytes_cached) bytes_used
from v$temp_extent_pool group by tablespace_name) d
where c.tablespace_name = d.tablespace_name;
临时表空间的比较详细的使用情况:
select tablespace_name,current_users,total_blocks,used_blocks,free_blocks from v$sort_segment;
什么在使用临时表空间:
SELECT s.username, s.sid, s.serial#, s.sql_address, s.machine, s.program, su.tablespace, su.segtype,
su.contents
FROM v$session s, v$sort_usage su
WHERE s.saddr = su.session_addr;
有时候临时表空间会出现不释放的情况,metalink上推荐的方法收集整理如下:
-- 重启实例
重启实例重启时,smon进程会完成临时段释放,不过很多的时侯我们的库是不允许down的,所以这种方法应用机会不多。如果在重启后sort段没有被释放,这种情况就需要慎重对待。
-- 修改参数 (仅适用于8i及8i以下版本)
SQL>alter tablespace temp increase 1;
SQL>alter tablespace temp increase 0;
-- 合并碎片
SQL>alter tablespace temp coalesce;
-- 诊断事件
SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 4'
说明:temp表空间的TS#为3,So TS#+1=4
-- 重建temp
SQL>alter database temp tempfile '......' drop;
SQL>alter tablespace temp add tempfile '......';
不过以上的方法都只能解一时之急,并不能解决临时表空间增长太快的问题。太多数情况下是由于disk sort过多引起TEMP表空间的作用剧增。造成disk sort的原因也很多,比如sort area较小
要从根本上解决temp表空间不能扩展的问题:
1 设置合理的pga或sort_area_size
2 优化引起disk sort的sql
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18953778/viewspace-561397/ ,如需转载,请注明出处,否则将追究法律责任。