您的位置:首页 > 博客中心 > 数据库 >

ArcSDE for Oracle表空间管理——暂时(TEMP)表空间

时间:2022-03-10 17:51

gxlsystem.com,布布扣

Oracle暂时表空间主要用来做查询和存放一些缓冲区数据。暂时表空间消耗的主要原因是须要对查询的中间结果进行排序。


重新启动数据库能够释放暂时表空间,假设不能重新启动实例,而一直保持问题sql语句的运行,temp表空间会一直增长。直到耗尽硬盘空间。


下面操作会占用大量的temporary:
    1、用户运行imp/exp 导入导出操作时,会使用大量的temporary段
    2、用户在Create 或者 rebuild index时
    3、运行create table ...... as 语句时
    4、移动用户下的数据到别的表空间时
    5、用户运行排序Order by 或 group by
    6、用户运行Distinct 操作
    7、用户运行Union 或 intersect 或 minus
    8、用户运行Sort-merge joins
    9、用户运行analyze


对ArcGIS用户来说,进行Oracle逻辑迁移、重建空间索引、空间数据与属性数据的关联等操作都会使用到Oracle的暂时表,特别是假设有数据量比較大的空间数据重建空间索引,会使用PGA内存,假设该内存资源不足就会使用暂时表空间资源,所以暂时表空间的管理对用户来说也是比較重要的。


普通情况下,创建Oracle库之后默认有一个暂时表空间TEMP,默认大小是30MB,在创建数据库用户时,都会为该用户设置一个暂时表空间,那么该用户所做的以上某些操作自然会在占用暂时表空间的资源。那么假设是OLTP系统,多个用户都在进行不同的操作,势必会带来暂时表空间资源的占用。所以非常多用户能够创建了多个表空间,依据用户业务类型分配对应的暂时表空间大小。对于大型操作频繁(大型查询,大型分类查询,大型统计分析等),应指定单独的比較大容量的暂时表空间,当然我们也能够创建暂时表空间组来让Oracle自己主动合理分配暂时表空间资源。


暂时表空间组就是创建多个暂时表空间数据文件,然后将这些暂时表空间组成一个暂时表空间组,设置Oracle的默认暂时表空间,那么创建用户设置的暂时表空间也为该暂时表空间组,让Oracle自己主动管理暂时表空间资源。

下面为oracle官方帮助:

A tablespace group enables a user to consume temporary space from multiple tablespaces. Using a tablespace group, rather than a single temporary tablespace, can alleviate problems caused where one tablespace is inadequate to hold the results of a sort, particularly on a table that has many partitions. A tablespace group enables parallel execution servers in a single parallel operation to use multiple temporary tablespaces.

----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------


下面就实践一下创建暂时表空间组


查明默认的暂时表空间信息

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
SDE
ESRI
ESRI2
TEST

已选择10行。
创建多个暂时表空间数据文件
SQL> create temporary tablespace temp2 tempfile ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\temp02.dbf‘ size 10M;

表空间已创建。

SQL> create temporary tablespace temp3 tempfile ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\temp03.dbf‘ size 10M;

表空间已创建。

SQL> create temporary tablespace temp4 tempfile ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\temp04.dbf‘ size 10M;

表空间已创建。

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP02.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP03.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP04.DBF
加入暂时表空间组
SQL> alter tablespace temp tablespace group temp_group;

表空间已更改。

SQL> alter tablespace temp2 tablespace group temp_group;

表空间已更改。

SQL> alter tablespace temp3 tablespace group temp_group;

表空间已更改。

SQL> alter tablespace temp4 tablespace group temp_group;

表空间已更改。

SQL> select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_GROUP                     TEMP
TEMP_GROUP                     TEMP2
TEMP_GROUP                     TEMP3
TEMP_GROUP                     TEMP4
设置暂时表空间为暂时表空间组
SQL> alter database default temporary tablespace temp_group;

数据库已更改。

SQL> select temporary_tablespace from dba_users where username=‘SDE‘;

TEMPORARY_TABLESPACE
------------------------------
TEMP_GROUP

----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------


关于暂时表空间的问题:

非常多用户会发如今使用暂时表空间时,假设操作任务完毕之后,系统不会自己主动清理暂时表空间的资源。


能够通过Oracle11g新增的DBA_TEMP_FREE_SPACE视图来查看暂时表空间的占用率和空暇率

SQL> select * from DBA_TEMP_FREE_SPACE;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP                                  32497664         2088960   31457280
TEMP4                                 10485760         2097152    9437184
TEMP3                                 10485760         4194304    7340032
TEMP2                                 10485760         3145728    9437184


SQL> select allocated_space*100/tablespace_size as used from DBA_TEMP_FREE_SPACE;

      USED
----------
6.42803126
        20
        40
        30


假设TEMPORARY TABLESPACE的类型是TEMPORARY,TEMPORARY TABLESPACE里的使用过的空间是不会被释放的,除非shutdown。


假设使用TEMPORARY类型的暂时表空间,数据库刚刚startup后,第一个使用TEMPORARY tablespace进行排序的statement会创一个建sort segment,这个segment不会被释放,除非数据库restart,能够用V$SORT_SEGMENT察看当前的已分配了的sort segments地使用情况。

gxlsystem.com,布布扣

假设暂时表空间的类型为PERMANENT,SMON会在process不再使用暂时段之后去做清理。


假设是用PERMANENT tablespace作排序,由smon负责在statement结束之后删除被创建的temporary segments,这样空间能够被其他对象使用。

考虑到性能原因,当一个temporary extent被分配的时候,tablespace会做一个标记,操作结束之后这个extent不会被释放或回收,对应的,这个extent被简单的标志为free,对于后面的sort操作是available的,这样就省去了系统分配和回收temporary extent的负载。建议都是用暂时类型。


当然,在Oracle11g版本号用户也能够使用ALTER TABLESPACE SHRINK 命令对暂时表空间为释放的资源进行Shrink。

----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------


參考Oracle帮助文档:

ALTER TABLESPACE lmtemp2 SHRINK TEMPFILE ‘/u02/oracle/data/lmtemp02.dbf‘;

默认能够不带KEEP參数,假设忽略KEEP 子句,则仅仅要满足其他存储属性,数据库就会尽可能尝试收缩表空间/暂时文件(全部当前使用的区的总空间),假设使用KEEP參数建议KEEP大小不能超过所操作暂时表空间的最大值。假设该表空间对象參与了暂时表空间组也适用于该命令。


注意:暂时表空间过大或者过小都会对数据库性能有直接影响,所以建议在Shrink暂时表空间都是用KEEP參数。


參考文献:


----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------



ArcSDE for Oracle表空间管理——暂时(TEMP)表空间,布布扣,bubuko.com

热门排行

今日推荐

热门手游