您当前的位置:首页 > 互联网教程

如何实现oracle 数据库集群的优化

发布时间:2025-05-22 08:32:44    发布人:远客网络

如何实现oracle 数据库集群的优化

一、如何实现oracle 数据库集群的优化

1、1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

2、2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。

4、4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

5、5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。

6、6、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。

二、什么是数据库集群

集群主要分成三大类(高可用集群,负载均衡集群,科学计算集群)

高可用集群( High Availability Cluster)

负载均衡集群(Load Balance Cluster)

科学计算集群(High Performance Computing Cluster)

1、高可用集群(High Availability Cluster)

常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如”双机热备”,“双机互备”,“双机”。高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。(请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。

2、负载均衡集群(Load Balance Cluster)

负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。

负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。

3、科学计算集群(High Performance Computing Cluster)

高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。

3.1、高吞吐计算(High-throughput Computing)

有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME– Search for Extraterrestrial Intelligence at Home)就是这一类型应用。

这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。

所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。

3.2、分布计算(Distributed Computing)

另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。

下面说说这几种集群的应用场景:

想Dubbo是比较偏向于负载均衡集群,用过的猿友应该知道(不知道的可以自行了解一下),Dubbo同一个服务是可以有多个提供者的,当一个消费者过来,它要消费那个提供者,这里是有负载均衡机制在里面的。

搜索引擎Elasticsearch比较偏向于科学计算集群的分布计算。

而到这里,可能不少猿友都知道,集群的一些术语:集群容错、负载均衡。

集群容错()

可以自行扩展集群容错策略,参见:集群扩展

失败自动切换,当出现失败,重试其它服务器。(缺省)

通常用于读操作,但重试会带来更长延迟。

可通过retries="2"来设置重试次数(不含第一次)。

快速失败,只发起一次调用,失败立即报错。

通常用于非幂等性的写操作,比如新增记录。

失败安全,出现异常时,直接忽略。

失败自动恢复,后台记录失败请求,定时重发。

并行调用多个服务器,只要一个成功即返回。

通常用于实时性要求较高的读操作,但需要浪费更多服务资源。

可通过forks="2"来设置最大并行数。

广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)

通常用于通知所有提供者更新缓存或日志等本地资源信息。

负载均衡()

在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

轮循,按公约后的权重设置轮循比率。

存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。

使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

一致性Hash,相同参数的请求总是发到同一提供者。

当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

算法参见:。

缺省只对第一个参数Hash,如果要修改,请配置<dubbo:parameter key="hash.arguments" value="0,1"/>

缺省用160份虚拟节点,如果要修改,请配置<dubbo:parameter key="hash.nodes" value="320"/>

三、oracle rac 多个数据库共用一个集群服务吗

1、与一般的集群产品一样,ORACLE RAC实现需要考虑以下几个问题:

2、1,并发管理,当集群中多个节点同时接受外部客户端访问,如何使每个客户端得到的数据一样,这就需要保证在集群中每个节点看到的数据都要一样的,这就是在节点中如何保持数据一致性的问题。ORACLE RAC主要是使用DLM(分布式锁管理器)来保证集群节点之间的数据一致性

3、2,健忘症,如我们需要修改集群配置时,只是在集中一台节点上修改,这一台节点会自动把配置信息分发到其他的节点。考虑一种这样的情形,在节点A上修改了集群配置,而这时候节点B处理关机状态。当节点B开始的时候,并不知道配置已经发生了改变,这种情形称为健忘症,在ORACLE RAC中,主要通过把SPFILE存放在共享存储上来解决配置丢失的问题。

4、3,脑裂症,在一个共享存储的集群中,当集群中hearbeat丢失时,如果各节点还是同时对共享存储去进行操作,那么在这种情况下所引发的情况是灾难的。ORACLE RAC采用投票算法来解决这个问题,思想是这样的:每个节点都有一票,考虑有A,B,C三个节点的集群情形,当A节点由于各种原因不能与B,C节点通信时,那么这集群分成了两个DOMAIN,A节点成为一个DOMAIN,拥有一票;B,C节点成为一个DOMAIN拥有两票,那么这种情况B,C节点拥有对集群的控制权,从而把A节点踢出集群,对要是通IO FENCING来实现。如果是两节点集群

5、,则引入了仲裁磁盘,当两个节点不能通信时,请求最先到达仲裁磁盘的节点拥用对集群的控制权。