UML软件工程组织

Oracle 联机事务处理系统下的性能调整和优化原则
来源:时代朝阳数据库技术中心 
很多组织都有联机事务处理系统。这类系统的特征是:
  • 存在很高的数据更新活动,而这些活动通常是由大量用户进行的。
  • 大量用户并发存取数据库。
  • 数据是持续增长的。

  这类应用的例子有超市销售系统、航空售票系统、银行存取款系统、网上商店等等。下图显示了 OLTP 系统的基本特征:

  OLTP 系统在运行时,有如下的一些要求:

  • 高可用性(7*24)。
  • 高响应速度。
  • 高的并发处理能力。
  • 快速的故障恢复。

  为了满足上面的要求,应当从以下几个方面考虑调节数据库应用系统。

1. 为避免Oracle 动态地为数据库对象分配存储空间而影响系统性能,应当经常检查对象的空间使用和分配情况,人工为表、索引、和簇等分配存储空间。

2. OLTP 系统的设计目标是可以快速地输入和修改数据而不牺牲数据的准确性。因为很多用户可能会操作同样的数据,所以必须有良好的并发处理机制。另外,因为用户会根据现有的数据进行加减操作,所以必须有将数据改变联机快速地显示出来的机制。

在 OLTP 系统中,有很多两难的问题。OLTP 需要快速地输入数据而不牺牲准确性。而检查录入数据的正确性又会降低系统的性能。Oracle 通过完整性约束(如 CHECK约束、外键约束)提供了一个良好地检查录入数据的结构。因为这些检查机制是定义在数据定义语言里的,它们比触发器效率更高。但是,完整性约束只能解决简单的问题,对于复杂的情况,还必须用触发器解决。

3. 通常,OLTP 系统需要实时地看到数据,这是 OLTP 系统最难解决的问题之一。Oracle 用索引和簇来帮组数据查询。对有较少改变的表来说,索引工作的很好;但对簇来说,因为簇必须仔细存储来装载那么多的数据,数据的改变会导致行迁移和链。而行迁移和链又会抵消簇得到的性能改善。然而,数据更新是 OLTP 的主要功能,因此,设计人员需要和 DBA 以及用户一起来平衡快速地查询数据和快速地改变数据的得失:

a) 索引会提高查询的性能,但会降低DML操作的性能,因为DML操作必须维护索引。

b) 在子表的外键上加索引可以避免在修改数据时对父表加锁。

c) B-tree 索引优于 bitmap 索引。因为如果锁住了B-tree 索引的一个入口,则仅仅锁住一行,而锁住了bitmap索引的一个入口,则锁住了一系列的行。

d) 对于如序列号这样的列,可以使用反转索引来避免数据的单调增长,从而产生块分裂。

e) 应当经常重建索引。

f) 使用 hash 索引可以加速相等条件的查询,但对于经常插入的表或经常用大的列值修改的表(可能发生行迁移)则应避免使用使用 hash索引。

g) 如果表在增长,则在 hash 键上会有许多碰撞,从而导致将行存储在 overflow 块上。为避免这个问题,应正确地预计 hashkeys 的值。对给定数量的行用大数量的 hash keys 会使碰撞降低。

无论如何,索引会降低数据更新的性能,因此,在OLTP系统中应尽量减少索引。

4. OLTP事务是较小的,回退段的空间是够用的。大量的事务要求足够数量的回退段来防止对回退段的竟争。要设置正确的回退段的数目,需要了解事务的运行方式。假设在任意时刻有9个事务,则3个回退段是足够的。另外,对于小的数据库来说,应将回退段的 minextents 设置成最小 10,而对于大的数据库来说,应将回退段的 minextents 设置成最小 20,这样即可避免回退段的动态扩展,又可避免回退段头移入一个活动的盘区,从而回退段需要分配额外的盘区。

5. 通过数据的规范化也可以达到快速检索数据的目标。

6. 如果可能,DBA 应当参加到数据建模的过程中,从而可以知道哪些表会不断更新。一般来说,将经常更新的表放到一个特殊的表空间中经常备份是明智的。另外,表空间可以设置成缺省地具有高的 PCTFREE 值和低的 PCTUSED 值,这样可以减少数据迁移和行链的可能性

 

版权所有:UML软件工程组织