攻略1-2 创建具有最优性能的表空间

问题描述

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

解决方案

推荐在启用本地管理和自动段空间管理(ASSM)特性的情况下来创建表空间。从Oracle数据库12c版本开始,这是默认的行为:

enter image description here

工作原理

为了清楚起见,本攻略中讨论两个独立的表空间特性:

 本地管理表空间; 
 自动段空间管理(ASSM)。 
从Oracle数据库12c版本开始,所有表空间都创建为本地管理表空间。在之前版本的Oracle数据库中,可以选择使用本地管理或字典管理。以后应该总是使用本地管理表空间。

表空间的段空间管理属性可以设置为AUTO(默认值),也可以设置为MANUAL。Oracle强烈推荐使用AUTO(称为自动段空间管理,ASSM)。这允许Oracle自动管理很多以前数据库管理员必须手工调整的物理空间特性。在大多数场景下,使用自动段空间管理的表空间将会比手动管理更高效地处理事务,只有少数情况例外。除非有经过验证的实例可以证明MANUAL更好,否则都推荐使用ASSM。

注意 在创建SYSTEM表空间的时候不能使用ASSM特性;并且,ASSM只对永久的本地管理表空间有效。

在创建表空间的时候,如果没有声明统一的盘区大小,Oracle将会自动分配盘区大小为64 KB、1 MB、8 MB以及64 MB。如果表空间中的对象大小是可变的,可以使用自动分配大小。可以通过EXTENT MANAGEMENT LOCAL AUTOALLOCATE子句来显式告诉Oracle自动确定盘区的大小。

可以选择使用UNIFORM SIZE子句来将所有盘区大小设置为一致。下面的例子设置了统一的盘区大小为128 KB:

enter image description here

如果有很好的理由将盘区大小设置为一致的,就尽可能这样做。但是,如果没法判断,就使用默认的AUTOALLOCATE。

也可以声明当数据文件满了的时候,可以自动扩展。这可以通过AUTOEXTEND ON子句来设置。如果使用了这个特性,我们推荐为数据文件设置一个总的最大容量。这可以避免错误的SQL导致所有可用的磁盘空间都被占满(想象一下在云服务环境下,根据数据库需要自动增加磁盘空间的时候,会发生什么)。下面是一个例子:

enter image description here

目录