超大型 Oracle 数据库应用系统设计
一、概论
超大型系统的特点为:
- 处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过 1TB;
- 系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性。
为了能达到以上要求,除了需要性能优越的计算机和海量存储设备外,还需要先进的数据库结构设计和优化的应用系统。一般的超大型系统采用双机或多机集群系统。下面以数据库采用 ORACLE 8.0.6 并行服务器为例来谈谈超大型数据库设计方法:
- 确定系统的 ORACLE 并行服务器应用划分策略
- 数据库物理结构的设计
- 系统硬盘的划分及分配
- 备份及恢复策略的考虑
二、ORACLE 并行服务器应用划分策略
ORACLE 并行服务器允许不同节点上的多个 INSTANCE 实例同时访问一个数据库,以提高系统的可用性、可扩展性及性能。ORACLE 并行服务器中的每个 INSTANCE 实例都可将共享数据库中的表或索引的数据块读入本地的缓冲区中,这就意味着一个数据块可存在于多个 INSTANCE 实例的 SGA 区中。那么保持这些缓冲区的数据的一致性就很重要。ORACLE 使用 PCM(Parallel Cache Management)锁维护缓冲区的一致性,ORACLE 同时通过 DLM(集成的分布式锁管理器)实现 PCM 锁,并通过专门的 LCK 进程实现 INSTANCE 实例间的数据一致。
考虑这种情况:INSTANCE1 对 BLOCK X 块修改,这时 INSTANCE2 对 BLOCK X 块也需要修改。ORACLE 并行服务器利用 PCM 锁机制,使 BLOCK X 从 INSTANCE 1 的 SGA 区写入数据库数据文件中,又从数据文件中把 BLOCK X 块读入 INSTANCE2 的 SGA 区中。发生这种情况即为一个 PING。PING 使原来 1 个 MEMORY IO 可以完成的工作,变成 2 个 DISK IO 和 1 个 MEMORY IO 才能够完成,如果系统中有过多的 PING,将大大降低系统的性能。
ORACLE 并行服务器中的每个 PCM 锁可管理多个数据块。PCM 锁管理的数据块的个数与分配给一个数据文件的 PCM 锁的个数及该数据文件的大小有关。当 INSTANCE 1 和 INSTANCE 2 要操作不同的 BLOCK,如果这些 BLOCK 是由同一个 PCM 锁管理的,仍然会发生 PING。这些 PING 称为 FALSE PING。当多个 INSTANCE 访问相同的 BLOCK 而产生的 PING 是 TRUE PING。
合理的应用划分使不同的应用访问不同的数据,可避免或减少 TRUE PING;通过给 FALSE PING 较多的数据文件分配更多的 PCM 锁可减少 FALSE PING 的次数,增加 PCM 锁不能减少 TRUE PING。
所以,ORACLE 并行服务器设计的目的是使系统交易处理合理的分布在 INSTANCE 实例间,以最小化 PING,同时合理的分配 PCM 锁,减少 FALSE PING。设计的关键是找出可能产生的冲突,从而决定应用划分的策略。应用划分有如下四种方法:
- 根据功能模块划分,不同的节点运行不同的应用
- 根据用户划分,不同类型的用户运行在不同的节点上
- 根据数据划分,不同的节点访问不同的数据或索引
- 根据时间划分,不同的应用在不同的时间段运行
应用划分的两个重要原则是使 PING 最小化及使各节点的负载大致均衡。
三、数据库物理结构的设计
数据库物理结构设计包括确定表及索引的物理存储参数,确定及分配数据库表空间,确定初始的回滚段,临时表空间,redo log files 等,并确定主要的初始化参数。物理设计的目的是提高系统的性能。整个物理设计的参数可以根据实际运行情况作调整。
表及索引数据量估算及物理存储参数的设置
表及索引的存储容量估算是根据其记录长度及估算的最大记录数确定的。在容量计算中考虑了数据块的头开销及记录和字段的头开销等等。表及索引的 initial 和 next 存储参数一般设为相等,pctincrease 设为 0。
表空间的设计
ORACLE 数据库的表和索引是透过表空间 tablespace 存储在数据库中的。在 tablespace 设计时一般作以下考虑:
- 一般较大的表或索引单独分配一个 tablespace。
- Read only 对象或 Read mostly 对象分成一组,存在对应的 tablespace 中。
- 若 tablespace 中的对象皆是 read only 对象,可将 tablespace 设置成 read only 模式,在备份时,read only tablespace 只需备份一次。
- 高频率 insert 的对象分成一组,存在对应的 tablespace 中。
- 增、删、改的对象分成一组,存在对应的 tablespace 中。
- 表和索引分别存于不同的 tablespace。
- 存于同一个 tablespace 中的表(或索引)的 extent 大小最好成倍数关系,有利于空间的重利用和减少碎片。
DB BLOCK SIZE
超大型数据库 DB BLOCK SIZE 一般在 4KB 至 64KB,而最常用的是 8KB、16KB 或 32KB。选用较大的 DB BLOCK SIZE 可使 INDEX 的高度降低,也会提高 IO 效率。
Redo Log Files
ORACLE 使用专用的进程 redo log writer (LGWR) 将日志写入日志文件。一般日志文件最好建在专用的镜像盘上。日志文件组的个数及文件的大小的设定与系统交易量的大小有关。ORACLE 并行服务器中每个 INSTANCE 使用各自的一组 redo log files。一般的每组日志文件的个数为 3-7 个,每个的大小为 200MB-500MB。
数据文件大小
建议用标准的文件大小,如 200M、1GB、2GB、4GB、8GB 等,可简化空间的维护工作。
回滚段
回滚段一般建在专用的表空间中。每一个 INSTANCE 实例拥有各自的回滚段。设置回滚段的一般原则是:initial 及 next 存储参数的值是相等的,同时还是 DB BLOCK SIZE 的倍数。每个回滚段的 minextents 设为 20,optimal 参数的值保证回滚段缩小时不低于 20 个 extents。
临时表空间
临时表空间一般建在专用的表空间中。每一个 INSTANCE 实例拥有各自的临时表空间。这样使用临时表空间时不会有 PING。设置临时表空间的 initial=next。
四、系统硬盘的划分及分配
在多机集群环境下,ORACLE 并行服务器通过操作系统提供的 DRD 服务来共享同一个数据库。每一个 INSTANCE 对数据库的数据文件的访问都是通过该数据文件所在的 DRD 服务进行的。
考虑以下情况:主机 1 上有 DRD 服务 1,该服务对应的数据文件有 1、2、13、35、67 等,这时如果主机 2 上的 INSTANCE2 需要读取数据文件 13,通过 DRD 服务调度,主机 1 通过 DRD 服务访问磁盘阵列上的数据文件 13,把 INSTANCE2 需要的数据读到内存,然后通过 MEMORY IO 把数据传到主机 2 的 INSTANCE2。写操作是读操作的逆过程。
通过以上分析可知,系统硬盘的划分及分配的原则是尽量减少 MEMORY IO。
五、备份及恢复策略的考虑
数据库的备份与恢复在系统设计中占很重要的地位。好的备份及恢复策略可以降低系统的运行风险,减少因硬件故障而造成的损失。
ORACLE 备份方法:
-
物理备份 将数据库的物理文件通过操作系统的命令或工具备份到备份介质上。物理备份往往用于存储介质故障时恢复数据库系统的数据。 根据数据库运行方式的不同,可进行不同的物理备份: a) 物理冷备份(offline backup) 物理冷备份要求数据库在关闭 (所有 INSTANCEs 停止) 的情况下进行。这种备份必须是完全备份,即需备份所有的数据文件、控制文件 (control file)、日志文件 (redo log file)、初始参数文件等等。 物理冷备份的步骤简单,但要求系统能够停止。 b) 物理热备份(online backup) 物理热备份是在数据库系统正常运行的情况下进行的数据库备份。这种备份可以是数据库的部分备份,既备份数据库的某个表空间 (tablespace) 或某个数据文件 (datafile),也可备份控制文件 (control file)。 物理热备份要求数据库在 ARCHIVELOG 模式下运行。这种备份一般用于应用系统不能停机的情况。 c) 归档日志文件备份(archived log file backup) 要使数据库系统能够恢复到故障点前一时刻状态,或恢复到某指定时刻状态,数据库必须采用 ARCHIVELOG 模式。在 ARCHIVELOG 模式下,数据库系统会产生归档日志文件 (archive log files)。归档日志文件也需备份到备份介质上。在恢复时,这些文件可使数据库恢复到最近状态。 归档日志文件产生在指定目录下,这些文件一生成就可以备份到备份介质上,DBA 可根据磁盘空间情况,定时将它们备份出去。
-
逻辑备份 逻辑备份是通过 ORACLE 提供的 Export 工具,将数据库的结构定义及其数据卸出到特定格式的文件中,并备份该文件。
在实际应用中,逻辑备份与物理备份并用。一般来说,物理备份用于磁盘介质损坏或数据文件损坏;逻辑备份用于数据库中的某些对象被破坏或用户误操作。
备份策略的考虑主要在以下三个方面:
- 存储空间
- 对现行运行的系统的性能影响
- 恢复时间的影响
如果需要节省空间和恢复时间就需要增加备份的频率,但是备份操作会明显增加现行运行的系统的负载。
ORACLE 的恢复方法 根据不同的备份方法采用不同的恢复方法。 使用物理备份恢复 ORACLE 提供了三种恢复手段:
- 数据库级的恢复
- 表空间 (Tablespace) 的恢复
- 数据文件的恢复
数据库级的恢复要求数据库在关闭但 Mount 的状态下进行。表空间及数据文件的恢复可在数据库运行的状态下进行。
使用逻辑备份恢复 当数据库中的某一对象被损坏,或用户的误操作使数据破坏(如误删表)时可用逻辑备份恢复。用逻辑备份只能恢复到备份时刻的状态。
