欢迎进入2 4×7的世界!术语“2 4×7”是在I T(Information Te c h n o l o g y,信息技术)领
域中,特别是在计算机系统以及数据库操作中频繁使用的一个术语,用来说明某种资源(例
如,数据和系统与计算机系统)的连续可用性。也就是说,如果某个数据库 /系统对于用户每
天2 4小时、每周7天都是可用的,就把这个系统称为运行于“ 2 4×7”方式。
很早以前,许多公司的操作管理员就要求有一个能够支持 2 4×7正常工作时间的系统。直
到最近,这些操作管理员才发现将自己的数据库进行升级并且使它运行在 2 4×7方式下已经迫
在眉睫。也许,DBA (Data Base Administrator, 数据库管理员) 会说,“这好办,可以使用大型
机来解决问题!”。但是,在一个运行O r a c l e数据库系统的中、大型机器上也同样会产生各种
错误。
现在,这种情况发生了变化:操作管理员仍然坚持希望自己的数据库系统能够连续地保
持有效的工作;令人惊奇的是, D B A再也不会认为这样做毫无疑义而耸着肩走开。随着
O r a c l e 8与O r a c l e 8 i的发布,人们的注意力进一步集中到系统的可用性上。此外,随着电子商
务与大规模全球市场的开发, D B A即使是在需要进行冷备份时,也不能随便地将数据库系统
关闭。
在理想的情况下(不存在数据库崩溃、磁盘整理、外界环境灾难等等),即使是没有附加
功能(例如备份)的 O r a c l e 7或者O r a c l e 8也可以提供1 0 0%的系统可用性。但是,在真实世界
中,如果没有提供其他附加的手段,想要保证系统工作在 2 4×7方式下是不现实的。 2 4×7方
式要求用户对于系统的全部运行环境非常了解,能够预测到导致系统停工的各种可能情况,
并且能够在不损失系统可用性的情况下对可能发生的意外作好处理准备。
O r a c l e 7和O r a c l e 8都支持数据库高可用性的许多功能。虽然,获取数据库系统 9 9 . 9 9%的
可靠性需要有非常巨大的额外开销(更别说是获取 1 0 0%的可靠性了),但用户可以在不提供
任何其他附加手段的情况下使用 O r a c l e 7或者O r a c l e 8获取系统9 0%的可靠性。然而,您能够容
三年前,我访问了一个位于芝加哥的公司客户站点(不妨把它称为公司 A),这个公司主
要从事旅游与售票服务工作。它有分布在北美洲与欧洲的上百个旅游代理,它们都需要访问
位于公司总部的数据库系统,但这个公司中数据库系统运行并不稳定。笔者经过数小时运行
u t l b s t a t / u t l e s t a t,然后对数据库警告日志进行深入的分析之后,最终发现这个公司的数据库系
一段时间之后,笔者又有机会访问另一个位于 Wo o d r i d g e的公司客户站点(不妨把它称为
公司B),这个公司主要生产面包以及各类甜食。在我工作的第一天,公司的操作管理员提出
希望有一个能够在 (包括周末在内的) 所有时间都可以正常工作的数据库系统(也就是 2 4×7
可用性系统)。当时,我很困惑地想,一个面包生产公司的职员怎么会在星期六的晚上去访问
本公司的O r a c l e数据和系统呢?
同时,我利用U N I X内核命令设计了一个简短的程序代码,用来周期性地访问这个公司的
数据库并记录数据库使用情况。我将这个程序运行了整整一周(包括周末),并且每1 0分钟执
行一次。表1 - 1中列出了我想要获取的信息。
关于数据库的另一个例子是在 U N R E C O V E R A B L E或者N O L O G G I N G模式下创建索引来
加速数据库建立过程,以便提高系统性能。但是,如果数据库在索引被建立之后就崩溃了,
这种情况也会增加数据库的停工时间。数据库恢复过程不能恢复最新所创建的索引,从而必
须在数据库可用之前手工地创建这个索引,因而会延长停工时间(在后面的段落中将会详细
描述U N R E C O V E R A B L E / N O L O G G I N G操作是如何导致更长的停工时间的)。当然,也会出现
例外的情况。例如,一个非常迅速的索引创建过程(特别是对于具有上兆或者更多行的表来
第1章 确定自己的正常工作时间需求5
下载
说)就有可能会使这个表很快对于所有的应用程序都可以访问(只要加在 C R E ATE INDEX语
句上的锁被释放)。因此,从这个角度看,利用 U N R E C O V E R A B L E模式或者N O L O G G I N G模
式实际上是增强了数据库系统索引的可用性(除非在索引创建之后立刻就发生了数据库崩溃
的现象)。
注意 系统性能与可用性并没有天然的反比关系。理论上来说,可用性是性能的一个
子集(如果系统没有任何吞吐量,那么它就不会有任何可用性)。但从实际的观点看,
性能与可用性是两个相互独立的现象。性能通常与“数据库运行速度有多快”相关,
而可用性通常与“用户在什么时候需要访问数据库”相关。笔者提供了几个例子用
来说明它们两者(U N R E C O V E R A B L E操作与C H E C K P O I N T操作)之间所存在的反
相关性。
影响性能的因素示例
关闭重作日志功能,
减少检查点等等
运行中的热备份
事务分割(将每个事
务写到多个数据库
的应用程序)
可用性90%99.999%
图1-1 用来说明在真实世界中数据库性能与可用性之间反比关系的图表
让我们绕一个弯来说明U N R E C O V E R A B L E / N O L O G G I N G操作是如何导致更多停工时间
的。这个例子可以适用于O r a c l e 8 i之前的系统环境。一个创建索引的操作会导致表被锁定,从
而阻止并发进行的D M L(插入、更新与删除)操作。因此,在 O r a c l e 8 i之前的版本中,如果
在一个频繁被访问的表中有一个索引正在被创建,那么这个表目前就是不可用的。如果这个
表是一个被频繁访问的表,那么所有那些访问这个表的应用程序都必须被中断。而如果没有
这些应用程序,那么这个数据库对于终端用户就是不可使用的。下面让我们来看一下表 1 - 2和
表1 - 3中的两个数据库脚本。
表1-2 UNRECOVERABLE/NOLOGGING模式下表创建过程的事件
脚本1
事 件 序 列所导致的停工时间
U N R E C O V E R A B L E / N O L O G G I N G模式下创建索引3 0分钟
数据库崩溃
从上一天晚上的备份中恢复数据库3 0分钟
数据库开启并且可以使用
所创建的新索引丢失
索引被重新创建3 0分钟
总停工时间9 0分钟
6第一部分 简介
下载
表1-3 RECOVERABLE/LOGGING模式下表创建过程的事件
脚本 2
事 件 序 列所导致的停工时间
R E C O V E R A B L E / L O G G I N G模式下创建索引4 0分钟
数据库崩溃
从上一天晚上的备份中恢复数据库3 0分钟
数据库开启并且可以使用
所创建的新索引有效
总停工时间7 0分钟
以上两个脚本说明虽然U N R E C O V E R A B L E可以帮助改善数据库性能,但导致总的停工时
间增加;而且在第二个数据库脚本中,索引是在 R E C O V E R A B L E模式下被创建的,虽然索引
创建时间较长,但在数据库崩溃之后总的停工时间反而降低了。
×7方式所带来的低性能,或者认为系统的高性能与高可用性是不可共存的。在现实中,用户
必须在进行系统安装的过程中就同时考虑到系统的性能与可用性,并且将这两者作为进行系
统配置时的目标,而不能只兼顾其中一方。毕竟,一个在性能上非常低劣的数据库系统所提
供的吞吐率与响应时间都是不能接受的。在实际应用中,如果这种性能过于低下并达到某个
临界点,那么就可以认为这个系统不能使用。在这里笔者要说明的一个问题是,虽然在性能
与可用性之间存在一定的对立关系,但用户必须采取一种合适的手段使得这两者都能够最大
限度地发挥效能,而不必为了迎合某一个指标而减弱另一个指标,这一点对于 D B A、系统分
析员、数据创建人员以及体系结构设计者都非常重要。关于这些方法,将在后续章节中详细
描述。例如,可以在进行适当的分析、减少表空间中的冗余段、减少频繁的维护动作之后进
行S TO R A G E参数的指定。所有的这些步骤都不是十分容易理解,如果用户需要为自己的公司
实现一个2 4×7方式的数据库系统,必须对于数据库领域中的各种信息(包括数据库内部的知
识与数据库外部的知识)都非常熟悉。此外,数据库系统中的许多监视工具都是强制进行的,
这些监视工具能够进行数据库中的页管理以及监视数据库管理人员在使用数据库时可能产生
的错误,从而有效地防止数据库因人为使用而导致的出错可能。关于这一点,即使是对于具
有很多管理人员的公司也是非常必要的。只有这样,才能缩小数据库可用性与性能之间的差
异,从而有效地防止这两者之间的差异不断扩大。