优化医院信息系统中的OracleRAC集群

2023-01-18 版权声明 我要投稿

为了最大程度地保证医院信息系统 (HIS) 的业务连续性, 实现24×7不间断地可靠地运行, 各医院特别是大中型医院对数据库服务器都实施了主机容错保护。某些医院还应用了更高级的Oracle RAC技术, 实现在保证数据库服务器高可用的同时分摊数据访问负载。

Oracle RAC是甲骨文公司专门针对Oracle数据库提供的多个数据库实例并行访问数据库的高可用并行计算技术。通过多个服务器节点和共享存储组成的集群, 并自动均分数据访问负载, 在其中一个节点发生故障时可以对系统进行容错和恢复处理, 实现数据库实例节点的透明应用程序故障切换 (Transparen Application Fail Over, TAF) , 在保证数据库系统24×7的高可用性的同时最大程度发挥硬件性能[1]。

Oracle RAC虽然功能强大但内部结构十分复杂, 在以生产系统运行之前, 必须针对Oracle RAC的运行机制结合医院信息系统的特点对数据库集群进行优化配置, 否则整个Oracle数据库集群很可能将面临严重的性能问题。

Oracle RAC的运行机制

Oracle RAC集群是建立在共享存储架构之上的, 为了降低数据库实例访问共享存储的频率, 最大限度地降低磁盘I/O, Oracle开发了一项称为高速缓存融合 (Cache Fusion) 的技术, 使得集群中的节点可以通过高速集群互联高效地在各数据库实例中同步其内存高速缓存中的数据块, 这样可以避免必须首先将块推送到磁盘, 然后再重新读入到其它实例的缓存中[2]。尽管Cache Fusion技术可以消除共享存储结构中磁盘的pin操作, 从而大大提升了集群数据库系统的性能, 但在数据并发访问量很大的环境下, 如果有一些热点数据块很频繁地被各个节点查询并修改, Cache fusion会频繁地使用内联心跳网络来在节点之间拷贝数据, 从而导致大量的全局Cache等待事件, 影响整个RAC系统的性能, 甚至使得RAC系统的响应速度还不如单实例的数据库系统响应速度快[3]。

因此对RAC系统优化的最基本原则是, 避免发生大规模的、不同节点频繁修改同一数据块, 尽量降低全局数据块的数量[4]。我们知道在Oracle数据库中数据块 (Block) 是数据库中的最小单位, 区间 (Extent) 是由一系列连续的数据块组成的数据库用来进行存储空间分配的逻辑单位。而以数据表 (Table) 或索引 (Index) 等逻辑方式存在的段 (Segment) 又是由多个区间组成。因此对在OLTP应用的RAC环境中, 可以通过对业务系统进行水平分割而让不同的业务系统单独访问一个指定节点的数据库实例, 从而使得每个业务系统的大量的表或索引都只驻留在一个实例的SGA中, 最大程度的减少了数据块在节点之间的Cache fusion。系统优化方案

我们知道HIS系统从业务范围上基本可以划分为门诊和住院两大子系统, 同时各子系统的交易数据段各自基本独立, 共享的数据段数据规模较小。所谓交易数据段就是会实时产生和更新的数据表和索引, 例如医嘱、费用和申请单等。这样门诊的HIS终端基本不会访问住院系统的交易数据段, 住院的HIS终端很少访问门诊系统的交易数据段。这就为我们实施水平数据分割提供了可能。按照这一原则我们将医院全部的HIS终端划分为门诊和住院两大部分。见表1。

有了上面的工作基础, 我们就可以通过在Oracle的服务器端和客户端进行一系列的自定义配置来更合理地分摊两个RAC实例的访问负载, 优化RAC数据库的性能。

Oracle服务 (Service) 是跨多个数据库实例为前端应用提供的单一数据服务映像, 是实现Oracle高可用性连接的基础元素, 一个Oracle服务可以被分配到一个或多个数据库实例, 连接到该服务的数据访问负载可以被服务根据优化原则在这些实例中进行调度, 而通过将完成同一种工作的会话连接到同一个Oracle服务, 使这些SQL操作稳定在一个数据库实例中, 可以使得数据块在集群各节点之间的Fusion活动降到最少。由于我们的集群环境是2节点的RAC集群, 根据前面对HIS系统水平数据分割的成果, 我们创建两个Oracle服务ora1和ora2分别对应门诊和住院两类HIS系统终端, 来实现这两部分HIS系统终端能够分别连接到集群数据库中的不同的数据库实例。

这里我们使用集群配置管理工具srvctl来创建Oracle服务:

srvctl add service-d rac-s ora1-r rac1-a rac2-P BASIC

srvctl add service-d rac-s ora2-r rac2-a rac1-P BASIC

srvctl是集群配置管理命令, 命令中参数add service代表创建Oracle服务, 参数-d rac指明是在名称是rac的数据库上创建服务, -s ora1表示创建的服务名称, -r rac1代表使用创建的Oracle服务ora1的数据库连接请求将优先连接实例rac1 (服务器192.168.1.103) , -a rac2表示当实例rac1不可用时使用Oracle服务ora1的数据库会话将被转移至实例rac2 (服务器192.168.1.104) , -P BASIC代表只在发生故障切换 (Fail Over) 时服务才在可用实例上创建数据库会话。

在运行HIS系统的终端上, 我们通过对Oracle客户端Oracle Net Services的配置来实现HIS系统的门诊应用使用Oracle服务ora1, HIS系统的住院和其它应用使用Oracle服务ora2。

Oracle Net Services为数据库连接提供了连接负载均衡。客户端负载均衡跨集群中所有监听程序进行连接请求均衡, 方法是将集群中的所有服务器列入客户连接字符的地址表。SQL*NET将随机选择其中的一个服务器, 如果选中的服务器不可用, 将尝试列表中的下一个服务器。服务器端负载均衡是在监听程序中实现的, 每个监听程序会识别出集群中刺探每个服务的所有实例。

通过在HIS系统客户端上的编辑tnsnames.ora来完成客户端Oracle Net Services的配置:

结语

通过对Oracle RAC运行机制的研究, 为避免因热点数据块频繁地被各个节点查询和修改而造成整个数据库系统性能上的瓶颈, 我们总结了采用“水平业务分割”的方式可以有效的对整个Oracle集群数据库进行优化。结合医院信息系统的特点, 我们确定了“水平业务分割”的实施方案, 通过对集群系统的优化配置, 实现了在平衡两台服务器负载的同时最大程度地减少两个节点间数据块的传递, 从而最大程度地发挥了Oracle RAC的优势, 使医院信息系统能够更加高效可靠地运行。

摘要:该文针对医院信息系统集群数据库上可能出现的性能问题, 通过对Oracle RAC运行机制的研究并结合医院信息系统的特点, 对集群系统进行优化配置, 平衡了整个数据库集群的负载, 从而最大程度地发挥了Oracle RAC的优势, 使医院信息系统能够更加高效可靠地运行。

关键词:RAC,医院信息系统,高可用,优化

参考文献

[1] Andrew Babb, Tammy Bednar.Oracle High Availability Best Practices[M].Oracle, 2006:11-14.

[2] 陈吉平.构建Oracle高可用环境:企业级高可用数据库架构、实战与经验总结[M].北京:电子工业出版社, 2008:166-171.

[3] Mark Bauer.Oracle9i Real Application Clusters Concepts[M].Oracle, 2002:61-64.

[4] 王红艳李涛.ORACLE数据库集群技术的具体实施[J].电脑知识与技术, 2011 (2) :11-12.

上一篇:在高中生物教学中如何指导学生开展研究性学习下一篇:镁电解槽紧急事故氯气净化系统的研究