暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

BigFile和SmallFile表空间技术

原创 eygle 2019-10-15
2879

在前面的章节中大家或许注意到,在Oracle 10g创建数据库的脚本中,有这样的代码:

SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 20M
AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 200M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED


其中SmallFile是Oracle 10g新增的特性。从Oracle 10g开始,Oracle推出了大文件表空间(BigFile Tablespace,BFT)支持,相对地,也就有了小文件表空间(SmallFile Tablespace,SFT)。


大文件表空间只能包含一个文件,但是文件最大可以达到4GB个数据块大小,按照Oracle通常支持的不同数据块大小(2kB、4kB、8kB、16kB和32kB),最小的大文件表空间单个文件大小可达8TB,最大可以达到128TB,当然具体单个文件能够达到的大小还受到操作系统的限制。


和BFT相对应的、以前的表空间管理方式就被称为SFT。Oracle通过BFT支持,极大地扩展了数据库的存储能力。由于引入了BFT,Oracle将这一特性作为数据库属性进行维护:

SQL> SELECT *  
  2  FROM database_properties               
  3  WHERE property_name = 'DEFAULT_TBS_TYPE';
PROPERTY_NAME                  PROPERTY_VALUE                 DESCRIPTION
------------------------------ ---------------- ------------------------------
DEFAULT_TBS_TYPE               SMALLFILE                      Default tablespace type


由于数据库缺省的表空间类型为SFT,所以缺省创建的都是小文件表空间。当然可以修改这个属性:

SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE;
Database altered.
 
SQL> SELECT *
  2  FROM database_properties               
  3  WHERE property_name = 'DEFAULT_TBS_TYPE';
PROPERTY_NAME                  PROPERTY_VALUE                 DESCRIPTION
---------------------------- ------------------------------ ------------------------------
DEFAULT_TBS_TYPE               BIGFILE                        Default tablespace type


但是通常不建议修改这个属性,可以通过如下命令修改表空间属性为默认值:

SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;
Database altered.


如果在缺省设置下要创建BIGFILE类型的表空间,就需要指定一个新的参数BIGFILE,其他和原有创建表空间语法类似。如果数据库使用了ASM或OMF技术,那么创建就更为简化,以下一条命令就足够了:

SQL> CREATE BIGFILE TABLESPACE bftbs datafile size 10M;
Tablespace created.


通过DBA_TABLESPACES视图,可以查看表空间属性,这个视图中新增加了一个字段BIGFILE用于标识一个表空间是否属于BIGFILE表空间:

SQL> select tablespace_name,bigfile from dba_tablespaces;
TABLESPACE_NAME                BIG
------------------------------ ---
SYSTEM                         NO
UNDOTBS1                       NO
SYSAUX                         NO
TEMP                           NO
BOSSMGR                        YES
DBMON                          NO
BFTBS                          YES
7 rows selected.


由于大文件表空间只能包含一个数据文件,所以其相对文件号(RELATIVE_FNO)被设为1024:

SQL> select file_name,file_id,relative_fno from dba_data_files; 
FILE_NAME                                             FILE_ID RELATIVE_FNO
-------------------------------------------------- ---------- ------------
+DATADG/smsboss/datafile/system.261.577731551               1            1
+DATADG/smsboss/datafile/undotbs1.260.577731573             2            2
+DATADG/smsboss/datafile/sysaux.262.577731593               3            3
+DATADG/smsboss/datafile/users.256.577731607                4            4
+DATADG/smsboss/datafile/bossmgr.271.577809233              5         1024
+DATADG/smsboss/datafile/dbmon.5417.595530625               6            6
+DATADG/smsboss/datafile/bftbs.5416.613388183               7         1024


大文件表空间可以最小化表空间文件数量,从而简化DBA的管理,在大型的数据库中,包含几十、数百文件的表空间随处可见,随着文件数量的增加,很多数据库参数就要做出相应的调整,如db_files,静态参数的调整又要重新启动数据库才能生效,这都给数据库的维护带来不便,而BFT的出现,可以彻底解决这些问题。由于文件数量的减少,控制文件的空间使用也可以随之减少,检查点等数据库内部操作需要同步的文件头数量也大大减少,总之,大文件表空间的出现为超大型数据库(VLDB)的管理带来了极大的便利。


但是需要注意的是,一个大文件自然会带来I/O或存储上的问题,由于BFT只能存在一个数据文件,所以要保证分配的磁盘或磁盘组具有足够的空间;为了避免I/O的竞争,在数据库底层,磁盘的分配和规划也非常重要,通常Striping/RAID或Oracle的ASM技术等需要被采用去分散I/O,避免磁盘上的竞争。


例如,在一个Oracle10gR2 +ASM生产环境中,以32KB块大小建立的大文件表空间已经使用了200GB的空间:

SQL> SELECT a.tablespace_name, b.file_name, a.block_size, a.bigfile,
  2         b.BYTES / 1024 / 1024 / 1024 gb
  3    FROM dba_tablespaces a, dba_data_files b
  4   WHERE a.tablespace_name = b.tablespace_name AND a.bigfile = 'YES';
 
TABLESPACE_NAME
------------------------------
FILE_NAME                                          BLOCK_SIZE BIG         GB
-------------------------------------------------- ---------- --- ----------
BOSSMGR
+DATADG/smsboss/datafile/bossmgr.271.577809233          32768 YES 205.07812

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论