Oracle小知识点之temp表空间

网友投稿 1829 2022-11-21

Oracle小知识点之temp表空间

Oracle小知识点之temp表空间

温故:

上一篇文章中我和大家分享了Oracle的smon和pmon的相关知识,今天又特地来给大家讲一讲Oracle的temp表空间,为什么要讲这个呢?和昨天的理由差不多,还是有一道考试题提到了这个temp,说真的还真没答对,所以就觉得有必要和大家聊聊这个知识点。

链接如下:​​Oracle小知识点之smon和pmon​​

知新:

一、概念

临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象的一个空间。当ORACLE里需要用到SORT(排序)的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、SELECT DISTINCT、ORDER BY、GROUP BY等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大的原因。

临时表空间存储大规模排序操作(小规模排序操作会直接在RAM里完成,大规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地方在于它由临时数据文件(temporary files)组成的,而不是永久数据文件(datafiles)。临时表空间不会存储永久类型的对象,所以它不会也不需要备份。另外,对临时数据文件的操作不产生redo日志,不过会生成undo日志。创建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大,添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏文件(Sparse File),当临时表空间文件创建时,它只会写入文件头部和最后块信息(only writes to the header and last block of the file)。它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据文件飞快的原因。

二、temp的查看方法

SELECT a.tablespace_name “表空间名”, total “表空间大小”, free “表空间剩余大小”, (total - free) “表空间使用大小”, total / (1024 * 1024 ) “表空间大小(M)”, free / (1024 * 1024 ) “表空间剩余大小(M)”, (total - free) / (1024 * 1024 ) “表空间使用大小(M)”, round((total - free) / total, 4) * 100 “使用率 %” FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a , (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name;

查看表空间的语句多种多样,就看你怎么去写了。你既可以写一个单独查询temp表空间的语句,也可以写一个查询所有表空间使用率的语句,既能看到temp表空间的使用率也能同时关注了其他表空间的使用情况,一举多得。比如查出的结果如下:

上面各字段的解释如下:


BYTES



NUMBER


 


Size of the file (in bytes)



BLOCKS



NUMBER


 


Size of the file (in Oracle blocks)



STATUS



CHAR(9)


 


File status:

·

· AVAILABLE



USER_BYTES



NUMBER


 


Size of the useful portion of the file (in bytes)



USER_BLOCKS



NUMBER


 


Size of the useful portion of the file (in Oracle blocks)


三、处理办法

临时表空间的使用率高了,怎么办呢?我这里提供两种方法。第一种是重启数据库,第二种是清除表空间中的数据。但是在这里我必须强调一点,一般情况下数据库在运行着业务的时候,是不允许轻易重启的,如果中途起不来那你就惨了。

另外就是我建议大家在遇到这个问题的时候,不要一上来就直接奔着处理问题去。应该换一个思路,比如先查查到底是什么情况导致的表空间的的使用率过高,正常情况下临时表空间如果没有一些新增的工作量的增加或者是排序任务变动,它每一天的使用率应该是基本一致的。突然的变化必然是有原因的,所以要先找原因再解决问题。不然的话,你上来就盲目的清数据或者重启数据库,很可能导致正在执行的工作出现问题。总的来说就是要治本。

关于这个内容就暂且讲到这里,以后如果有机会再说

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Oracle 之 表新增字段后修改字段顺序
下一篇:Django 2.1.7 Admin - 注册模型、自定义显示列表字段
相关文章

 发表评论

暂时没有评论,来抢沙发吧~