频道栏目
读书频道 > 数据库 > Oracle > Oracle Database 11g性能优化攻略
攻略1-2 创建具有最优性能的表空间
2013-03-12 15:37:51     我来说两句
收藏   我要投稿
本书自始至终围绕性能调优这一主线,由浅入深地介绍常见的Oracle数据库性能问题。每节分析一个具体的性能问题,并全部采用问题描述—解决方案—工作原理这种独特的介绍风格,针对性强,方便读者理解和查阅。同时...  立即去当当网订购

问题描述

你已经认识到表空间是存储数据库对象(例如表和索引)的逻辑容器。进一步说,你已经知道如果在创建对象时不为其指定存储属性,那么相应的表和索引就将会自动继承表空间(这些表和索引在其中创建)的存储特性。因此就需要以能够使得表性能和可维护性最优化的方法来创建表空间。

解决方案

如果可以选择,所创建的表空间都应该具备以下两个功能:

本地管理;

ASSM(Automatic segment space management,自动段空间管理)

下面这个例子创建了包含上述两个功能的表空间:

 

注意 自Oracle Database 11g R2版本起,EXTENT MANAGEMENT DICTIONARY子句已经被弃用。

本地管理表空间比字典管理表空间的效率更高。这个功能可以通过EXTENT MANAGEMENT LOCAL子句来启用。此外,如果在创建数据库时,将SYSTEM表空间设置为本地管理,那么之后将不允许创建字典管理的表空间。这正是我们想要的。

利用ASSM功能,Oracle能够自动管理很多存储特性,而以前这些特性需要由DBA逐个表手工进行设置。ASSM通过SEGMENT SPACE MANAGEMENT AUTO子句来启用。使用ASSM,就可以从这些手工的数据库微调操作中解放出来。并且,Oracle的一些空间管理功能(例如收缩表和安全文件大对象)只有在使用ASSM时才允许使用。如果你想利用这些功能,就必须创建使用ASSM的表空间。

可以通过UNIFORM SIZE子句,将表空间中每一次空间扩展的大小设置为同样的值。或者也可以将其声明为AUTOALLOCATE,这样的话Oracle就可以每次分配64 KB、1 MB、8 MB或64 MB的扩展空间。如果表空间中的对象大小是不固定的,那么最好还是将其设置为自动分配。

工作原理

在Oracle Database 11g R2之前,你可以选择将表空间创建为字典管理。这种架构使用Oracle数据字典中的结构来管理对象的扩展空间分配和空闲空间。字典管理表空间的性能可能会较差,因为表或索引空间扩展的次数可能会达到几千次。

你最好永远也不要使用字典管理表空间,而应该使用本地管理表空间。本地管理表空间在每个数据文件中使用一个位图来管理对象扩展和空闲空间,比已经被弃用的字段管理表空间效率要高得多。

在以前的Oracle版本中,数据库管理员需要花大量的时间来监控并调整一张表的物理空间管理方面。本地管理和ASSM结合起来,导致很多这种空间方面的设置被废弃。例如,在本地管理表空间中下面这些存储参数就不再有效:

NEXT

PCTINCREASE

MINEXTENTS

MAXEXTENTS

DEFAULT

SEGMENT SPACE MANAGEMENT AUTO子句指导Oracle对块中的物理空间进行管理。使用这个子句时,没有必要再声明下面这些参数:

PCTUSED

FREELISTS

FREELIST GROUPS

与自动(AUTO)空间管理相对应的就是手工(MANUAL)空间管理。使用手工空间管理时,你可以根据应用的需要来手工调整前面提到的这些参数。推荐使用AUTO(而不要使用MANUAL)。使用AUTO降低了需要设置和管理的参数数量。可以通过下面的查询来验证是否使用本地管理以及ASSM:

 

输出示例如下:

 

注意 不能将SYSTEM表空间创建为自动段空间管理。并且,ASSM功能也仅对永久的本地管理表空间有效。

也可以指定让数据文件在满了以后自动增长,这通过AUTOEXTEND ON子句来设定。如果使用了这个功能,我们建议你为数据文件大小设置一个最大值。这样可以避免失控或者错误的SQL语句意外占用所有可用磁盘空间。下面是一个示例子句:

 

创建表空间时,还可以指定其类型为小文件(smallfile)或大文件(bigfile)。在Oracle Database 10g之前,只能使用小文件。对于小文件表空间,可以创建与表空间相关的一个或多个数据文件。这允许在多个加载点之间扩展(与同一个表空间相关的)数据文件。在很多情况下,你需要具有这种灵活性。

大文件表空间只能有一个相关的数据文件。大文件的主要优势在于你可以创建非常大的数据文件,进而能够创建非常大的数据库。例如,在存储块大小为8 KB的情况下,能够创建最大32 TB的数据文件。在存储块大小为32 KB的情况下,数据文件最大可达128 TB。同时,在使用大文件的情况下,你所需要管理和维护的数据文件数量也较少。在使用Oracle的ASM(Automatic Storage Management,自动存储管理)功能时,这样的行为可能很受欢迎。在ASM环境下,通常只会在一个逻辑磁盘地址上分配空间。

下面是一个创建大文件表空间的例子:

可以用下面这个查询来验证表空间类型:

 

除非特别指定,否则默认的表空间类型将是小文件。也可以在创建数据库时使用SET DEFAULT BIGFILE TABLESPACE子句,将数据库的默认表空间类型设置为大文件。还可以使用ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE语句,将数据库的默认表空间类型修改为大文件表空间。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:攻略1-1 创建具有最优性能的数据库
下一篇:攻略1-3 匹配表类型与业务需求
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站