教你设计大型Oracle数据库

来源:asp之家 时间:2009-07-02 12:31:00 

一、概论

超大型系统的特点为:
  1、处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB;
  2、系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性。
  为了能达到以上要求,除了需要性能优越的计算机和海量存储设备外,还需要先进的数据库结构设计和优化的应用系统。
  一般的超大型系统采用双机或多机集群系统。下面以数据库采用Oracle 8.0.6并行服务器为例来谈谈超大型数据库设计方法:
  确定系统的ORACLE并行服务器应用划分策略
  数据库物理结构的设计
  系统硬盘的划分及分配
  备份及恢复策略的考虑

二、Oracle并行服务器应用划分策略

Oracle并行服务器允许不同节点上的多个INSTANCE实例同时访问一个数据库,以提高系统的可用性、可扩展性及性能。Oracle并行服务器中的每个INSTANCE实例都可将共享数据库中的表或索引的数据块读入本地的缓冲区中,这就意味着一个数据块可存在于多个INSTANCE实例的SGA区中。那么保持这些缓冲区的数据的一致性就很重要。Oracle使用 PCM( Parallel Cache Management)锁维护缓冲区的一致性,Oracle同时通过I 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。设计的关键是找出可能产生的冲突,从而决定应用划分的策略。应用划分有如下四种方法:
  1、根据功能模块划分,不同的节点运行不同的应用
  2、根据用户划分,不同类型的用户运行在不同的节点上
  3、根据数据划分,不同的节点访问不同的数据或索引
  4、根据时间划分,不同的应用在不同的时间段运行
  应用划分的两个重要原则是使PING最小化及使各节点的负载大致均衡。

三、数据库物理结构的设计

数据库物理结构设计包括确定表及索引的物理存储参数,确定及分配数据库表空间,确定初始的回滚段,临时表空间,redo log files等,并确定主要的初始化参数。物理设计的目的是提高系统的性能。整个物理设计的参数可以根据实际运行情况作调整。

表及索引数据量估算及物理存储参数的设置

表及索引的存储容量估算是根据其记录长度及估算的最大记录数确定的。在容量计算中考虑了数据块的头开销及记录和字段的头开销等等。表及索引的initial和next存储参数一般设为相等,pctincrease设为0。

标签:Oracle,数据库
0
投稿

猜你喜欢

  • 博客使用标签是迟早的事

    2008-10-31 12:55:00
  • php之二维数组排序问题

    2023-07-15 06:44:42
  • python计算程序开始到程序结束的运行时间和程序运行的CPU时间

    2023-08-04 02:11:09
  • Python/JS实现常见加密算法的示例代码

    2023-01-25 08:17:29
  • Python数学建模学习模拟退火算法约束条件处理示例解析

    2022-06-16 19:19:20
  • Python+OpenCV解决彩色图亮度不均衡问题

    2023-02-08 23:14:53
  • 从Context到go设计理念轻松上手教程

    2024-05-13 10:41:07
  • mcrypt启用 加密以及解密过程详细解析

    2023-07-15 19:41:55
  • 解决python2中unicode()函数在python3中报错的问题

    2023-07-15 03:15:12
  • Python实现Web服务器FastAPI的步骤详解

    2022-12-20 21:34:51
  • Python调用Windows命令打印文件

    2022-01-17 14:07:25
  • python3.6 如何将list存入txt后再读出list的方法

    2022-03-03 07:30:26
  • python颜色随机生成器的实例代码

    2022-12-03 19:40:05
  • 关于PyTorch环境配置及安装教程(Windows10)

    2021-04-23 09:04:31
  • Favicon图标小常识

    2010-04-01 12:01:00
  • python动态监控日志内容的示例

    2022-08-26 18:05:44
  • ES6新语法Object.freeze和Object.seal基本使用

    2024-04-10 16:10:04
  • Python使用进程Process模块管理资源

    2023-08-08 07:08:01
  • sqlserver中触发器+游标操作实现

    2024-01-25 02:37:11
  • python源文件的字符编码知识点详解

    2021-04-30 08:05:04
  • asp之家 网络编程 m.aspxhome.com