数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

超大型ORACLE数据库应用系统的设计


发布日期:2023年08月28日
 
超大型ORACLE数据库应用系统的设计

概论

超大型系统的特点为

处理的用户数一般都超过百万有的还超过千万数据库的数据量一般超过TB

系统必须提供实时响应功能系统需不停机运行要求系统有很高的可用性及可扩展性

为了能达到以上要求除了需要性能优越的计算机和海量存储设备外还需要先进的数据库结构设计和优化的应用系统

一般的超大型系统采用双机或多机集群系统下面以数据库采用ORACLE 并行服务器为例来谈谈超大型数据库设计方法

·确定系统的ORACLE并行服务器应用划分策略

·数据库物理结构的设计

·系统硬盘的划分及分配

·备份及恢复策略的考虑

ORACLE并行服务器应用划分策略

ORACLE并行服务器允许不同节点上的多个INSTANCE实例同时访问一个数据库以提高系统的可用性可扩展性及性能ORACLE并行服务器中的每个INSTANCE实例都可将共享数据库中的表或索引的数据块读入本地的缓沖区中这就意味着一个数据块可存在于多个INSTANCE实例的SGA区中那么保持这些缓沖区的数据的一致性就很重要ORACLE 使用 PCM( Parallel Cache Management) 锁维护缓沖区的一致性ORACLE同时通过I DLM( 集成的分布式锁管理器)实现PCM 锁并通过专门的LCK进程实现INSTANCE实例间的数据一致

考虑这种情况INSTANCE对BLOCK X块修改这时INSTANCE对BLOCK X块也需要修改ORACLE并行服务器利用PCM锁机制使BLOCK X从INSTANCE 的SGA区写入数据库数据文件中又从数据文件中把BLOCK X块读入INSTANCE的SGA区中发生这种情况即为一个PINGPING使原来个MEMORY IO可以完成的工作变成个DISK IO和个 MEMORY IO才能够完成如果系统中有过多的PING将大大降低系统的性能

ORACLE并行服务器中的每个PCM锁可管理多个数据块PCM锁管理的数据块的个数与分配给一个数据文件的PCM锁的个数及该数据文件的大小有关当INSTANCE 和INSTANCE 要操作不同的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设为

● 表空间的设计

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一般在KB 至 KB而最常用的是KB KB或KB选用较大的DB BLOCK SIZE可使INDEX的高度降低也会提高IO效率

● Redo Log Files

ORACLE 使用专用的进程redo log writer (LGWR)将日志写入日志文件一般日志文件最好建在专用的镜像盘上日志文件组的个数及文件的大小的设定与系统交易量的大小有关ORACLE并行服务器中每个INSTANCE使用各自的一组rego log files一般的每组日志文件的个数为每个的大小为MB-MB

● 数据文件大小

建议用标准的文件大小M1GB2GBGBGB等可简化空间的维护工作

● 回滚段

回滚段一般建在专用的表空间中每一个INSTANCE实例拥有各自的回滚段设置回滚段的一般原则是 initial 及 next 存储参数的值是相等的同时还是DB BLOCK SIZE的倍数每个回滚段的minextents设为optimal参数的值保证回滚段缩小时不低于个extents

● 临时表空间

临时表空间一般建在专用的表空间中每一个INSTANCE实例拥有各自的临时表空间这样使用临时表空间时不会有PING设置临时表空间的initial=next

系统硬盘的划分及分配

在多机集群环境下ORACLE并行服务器通过操作系统提供的DRD服务来共享同一个数据库每一个INSTANCE对数据库的数据文件的访问都是通过该数据文件所在的DRD服务进行的

考虑以下情况主机上有DRD服务该服务对应的数据文件有这时如果主机上的INSTANCE需要读取数据文件通过DRD服务调度主机通过DRD服务访问磁盘阵列上的数据文件把INSTANCE需要的数据读到内存然后通过MEMORY IO把数据传到主机的INSTANCE写操作是读操作的逆过程

通过以上分析可知系统硬盘的划分及分配的原则是尽量减少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的状态下进行表空间及数据文件的恢复可在数据库运行的状态下进行

使用逻辑备份恢复

当数据库中的某一对象被损坏或用户的误操作使数据破坏(如误删表) 时可用逻辑备份恢复用逻辑备份只能恢复到备份时刻的状态

总之数据库系统的设计是一门高深的学问本文是作者基于几年管理超大型计费系统经验和教训参考ORACLE文档的基础上完成的由于本人才疏学浅难免有不当和错误之处敬请有识之士批评指正

上一篇:查找badsql的方法

下一篇:性能调优:ORACLE性能初步调整