如何使用服务来平衡Oracle RAC 数据库工作负载

日期: 2016-03-06 作者:Brian Peasland翻译:杨宏玉 来源:TechTarget中国 英文

企业如何通过使用服务来协助管理Oracle RAC数据库,以保证其最佳性能,本文将做详细介绍。 让我们从使用服务来检查连接的数量开始,这种检查涉及到集群中的每个实例。在下面的查询输出中,我删除了默认服务以保持简洁。剩下的是我定义的两个服务,它们应用于两个连接到3节点Oracle RAC系统的应用程序。

一个是公司的ERP应用程序,另一个是Web服务器程序。 正如所看到的,我把两个服务分散到所有三个数据库实例中。这有时意味着两个应用程序正在争夺相同的处理资源。ERP服务上一共有183个连接,Web服务器上则有397个。

在每个服务上,每个实例都有不到200个连接。 SQL> select se……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

企业如何通过使用服务来协助管理Oracle RAC数据库,以保证其最佳性能,本文将做详细介绍。

让我们从使用服务来检查连接的数量开始,这种检查涉及到集群中的每个实例。在下面的查询输出中,我删除了默认服务以保持简洁。剩下的是我定义的两个服务,它们应用于两个连接到3节点Oracle RAC系统的应用程序。一个是公司的ERP应用程序,另一个是Web服务器程序。

正如所看到的,我把两个服务分散到所有三个数据库实例中。这有时意味着两个应用程序正在争夺相同的处理资源。ERP服务上一共有183个连接,Web服务器上则有397个。在每个服务上,每个实例都有不到200个连接。

SQL> select service_name,inst_id,count(*)

 2  from gv$session

 3  group by service_name,inst_id

 4  order by service_name,inst_id;

SERVICE_NAME    INST_ID   COUNT(*)

--------------- ---------- ----------

erp_svc                  1         62

erp_svc                  2         60

erp_svc                  3         61

web_svc                  1        130

web_svc                  2        133

web_svc                  3        134

另一个可选方案是将ERP服务部署在一个节点上,在另外两个节点上部署Web服务。如果我按照这个标准重新配置服务,那上面的查询结果看起来可能是这样的:

SERVICE_NAME    INST_ID   COUNT(*)

--------------- ---------- ----------

erp_svc                  1        183

web_svc                  2        198

web_svc                  3        199

每个实例上的连接数依然不到200,但是现在两个应用程序不必再争夺相同的资源。

有了服务的存在,配置对于应用程序来说将会是透明的。数据库管理员(DBA)可以使用Oracle's Server Control Utility或SRVCTL来重新配置跨集群节点上的服务分布。这使DBA可以完全控制服务的平衡,以满足特定的需求。在我的例子中,输入的命令可能与如下的例子类似:

srvctl modify service -d orcl -s erp_svc -n -i "orcl1" -a "orcl2,orcl3"

srvctl modify service -d orcl -s web_svc -n -i "orcl2,orcl3" -a "orcl1"

ERP服务现在托管在第一个节点。然而,如果实例停止运行,服务可以搬迁到另一个实例上,这同样适用于Web服务,当某个实例变得不可用时,Web服务也可以完成类似的迁移。以这种方式配置服务,我们可以隔离应用程序的使用,但仍然可以利用Oracle RAC数据库的高可用性。

基于每个服务上的连接数量来平衡工作负载,是DBA分散Oracle RAC服务的一种方式。Oracle实例存在着几个动态性能视图,可以帮助DBA在Oracle RAC平衡服务。例如,你可能想看看SERVICE_STATS和SERVICEMETRIC。然而,我最喜欢的一个视图是SERVICE_WAIT_CLASS,它通过分类辨别,终止那些拖慢进程的“等待事件”,在每个服务和实例都可用。这里有一个例子,它用来跟踪两种与Web服务器和客户关系管理(CRM)系统相关的等待服务:

SQL> SELECT wait_class,service_name,inst_id,total_waits,time_waited

 2  FROM  gv$service_wait_class

 3  WHERE wait_class IN ('Cluster','User I/O')

 4  ORDER BY wait_class,service_name,inst_id;

WAIT_CLASS SERVICE_NAME INST_ID TOTAL_WAITS TIME_WAITED

---------- ------------ ------- ----------- -----------

Cluster    crm_svc            1       12576        7157

Cluster    crm_svc            2       12659        2686

Cluster    web_svc            2        2063         972

User I/O   crm_svc            1       13147        8256

User I/O   crm_svc            2        1433         664

User I/O   web_svc            2       10930        9588

在这个查询输出中,我们可以看到,CRM服务分布在两个实例上,并且存在十分严重的集群等待现象。如果该服务可以包含在一个实例中,集群等待时间应该会有所减少,因为这样做减少了全局缓存转移的次数。

另一方面,如果DBA管理Oracle RAC环境时只是使用一个服务来管理集群中运行的所有应用程序,他们将无法控制这些连接所使用的实例。为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。

作者

Brian Peasland
Brian Peasland

Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。

翻译

杨宏玉
杨宏玉

TechTarget特邀编辑。北京邮电大学计算机科学与技术专业硕士。熟悉软件开发流程,对系统管理,网络配置,数据库应用等方面有深入的理解和实践经验。现就职于IBM(中国)投资有限公司,从事IBM服务器相关软件的开发工作。业余时间喜欢游泳登山,爱健身,喜欢结交朋友。

相关推荐