写点什么

Oracle 表空间设计基本原则

作者:默默的成长
  • 2022-11-03
    山东
  • 本文字数:1119 字

    阅读完需:约 4 分钟

1. Oracle 表空间设计基本原则

1、系统数据与应用数据必须存储于不同的表空间。


2、按照应用划分数据,不同应用的数据应存储于不同的表空间。


3、表和索引分离,需存储在不同的表空间,以便分布到不同的数据文件和硬盘上,并分别进行不同的物理存储参数优化,减少磁盘 I/O 的竞争。


4、相对静态的表和频繁变动的表分开存放在不同的表空间,以便分别进行不同的物理参数优化。


5、为中间表单独设计表空间,可以不考虑备份。


6、采用临时表空间组技术,提高大批量数据处理效率。


\

2. 表空间设计标准

2.1 隔离系统数据与应用数据

不要试图使用任何系统自带的表空间作为业务表空间,


Oracle 数据库安装初始化之后,会自带一些系统表空间,包括 system,sysaux,undotbs1,users,temp 等,


如果是 RAC 环境数据库,还会有一个 undotbs2 作为实例 2 的默认 undo 表空间,这是约定俗成的标准规范。


\


所以,创建用户之前就应该规划好用来存放该用户的数据的默认表空间,


如不指定,新建用户会使用数据库的默认表空间


查看数据库的默认表空间:



可以看到数据库的默认表空间为 users,个别数据库的 users 表空间巨大,就是因为存放了业务用户的数据导致。

2.2 按照应用划分数据

按照应用划分数据,不同应用的数据应存储于不同的表空间


不同的业务,也可以称为不同的 schema,在 oracle 的逻辑体系中,就是不同的业务用户。


\


例如:


某数据库中需要新建业务用户 A,就要相应的提前创建 A 用户用来存放数据的表空间 A,并在创建用户时指定 A 表空间为业务用户 A 的默认表空间。


同理用户 B 也要用响应的表空间 B。


表空间创建语句:



创建用户时 指定



也可以在用户创建之后更改



\

2.3 表和索引分离

表和索引分离,需存储在不同的表空间;


把表和索引的表空间存储在不同在磁盘上,把两类不同 IO 性质的数据分开放,这样可以提高磁盘的 IO 总体性能;


如果索引的数据文件损坏,只要创建索引即可,不会引起数据丢失的问题。


创建索引时,需要指定表空间名:



\

2.4 物理 IO 隔离

为提高 IO 总体性能,可以考虑将不同表空间存放于不同的 ASM 磁盘 VG 中。


为每一个业务表空间、索引表空间创建独立的 ASM 磁盘组


查询磁盘组信息:



对应关系为 A 磁盘组用于存放 A 表空间,A 表空间用于存放 A 用户业务数据;


但考虑实际生产环境中,单独为业务用户规划磁盘组,管理成本和维护成本较高,此选项可以作为 IO 性能提成的一种备选方案。

2.5 为 lob 字段单独创建表空间

由于 lob 字段的特殊性,可以考虑将带有 lob 字段的表存放于独立表空间


lob 类型的数据全部存储在表空间中,表中只存放指针,即使在建表时没指定表空间,数据也全部存入该数据库默认表空间中。


例如用 alter table tb_name move tablespace tbs_name 来对表做空间迁移时只能移动非 lob 字段以外的数据。


创建 lob 字段表空间


\



\


创建含有 lob 字段的表时 指定 lob 字段存放独立表空间



\

用户头像

还未添加个人签名 2022-10-11 加入

还未添加个人简介

评论

发布
暂无评论
Oracle表空间设计基本原则_oracle_默默的成长_InfoQ写作社区