分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例

简介: 分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例

分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例

最近在针对某系统进行性能优化时,遇到了一个应用程序建立JDBC连接到ORACLE RAC时因ons造成卡顿30秒的问题,由于该问题具有普适性,故特地拿出来跟大家分享下。

1 问题描述

当数据库服务器是oracle 12c及之后的版本且运行在RAC模式下时,如果RAC底层的ONS (Oracle Notification Service) 守护进程没有启动或防火墙没有开放客户端应用程序对ONS 端口(默认6200)的 TCP 连接,则客户端创建到ORACLE RAC服务器的JDBC连接时(默认1521端口)会卡顿30秒并报错,虽然此后可以成功建立JDBC连接并正常执行SQL查询,但建立初始JDBC连接时卡顿的30秒会影响微服务的启动速度,示例日志如下:

image.png


oracle.simplefan.impl.FanManager configure : attempt to configure ONS in FanManager failed with oracle.ons.NoServersAvailable: Subscription time out;,

注意:

  • 默认情况下,应用程序无论是直接建立JDBC连接,还是使用数据库连接池比如HikariCP 创建JDBC连接,只要上述条件成立(RAC底层的ONS守护进程没有启动或防火墙没有开放客户端应用程序对ONS 端口),当前进程首次建立JDBC连接时,上述卡顿30秒的问题都会出现;
  • 很多时候大家会忽视该问题,一个原因是上述先决条件不一定成立(RAC底层的ONS守护进程没有启动或防火墙没有开放客户端应用程序对ONS 端口),另一个原因可能是因为一旦初始JDBC连接建立完毕,后续JDBC连接的建立就不会卡顿30秒了;

2 技术背景 - ORACLE RAC:FAN+ONS

  • FAN (Fast Application Nofification) 是 ORACLE RAC 为提升数据库节点正常升级或异常故障时,应用的业务连续性和自动故障转移的一种机制,而 ONS(Oracle Notification Service) 是 Oracle Clusterware 实现 FAN 的基础;
  • The Oracle FAN functionality provides enhanced high availability allowing very fast detection of failures;

image.png

  • 在传统模型中,JDBC 客户端需要主动定期检索数据库服务器才能判断服务端的状态,这本质上是一种 PULL 模型,而 Oracle10 引入了一种全新的 Event Push 机制,即 FAN (Fast Application Notification),在该机制下,当服务端发生某些事件时(比如某台实例故障或压力过大),服务器会主动将这些变化通知到客户端,这样客户端就能尽早得知服务端的变化从而做出响应(比如 failover 到另一台实例);
  • 从 Oracle 12C 版本开始,RAC会自动配置并启用 FAN 机制,同时也会自动配置并启动 ons 守护进程,且Ons 默认使用 6200和6100端口;
  • image.png

image.png

  • 在默认情况下,当Oracle JDBC 客户端建立到 Oracle RAC 的JDBC 连接时,底层会自动尝试建立到 ONS 端口(默认6200)的 TCP 连接,所以如果服务端 ONS 异常(比如 ons 守护进程异常退出或手动srvctl stop ons 停止 ons),或者防火墙拦截了到 ons 端口的 TCP 连接,客户端就会卡顿30秒之后才会成功建立到服务器的JDBC连接(默认1521端口);
  • 客户端成功创建到ORACLE RAC的JDBC连接后,后台抓包可见,除了常规的1521监听器端口,还有ONS的6200端口:

image.png


3 解决方法

  • 如果需要使用Oracle RAC的FAN机制,需要确保服务端成功启动ONS守护进程(可以通过命令onsctl ping验证)且防火墙开放客户端应用程序对ONS 端口(默认6200和6100)的 TCP 连接;
  • 如果不需要使用Oracle RAC的FAN机制,可以在客户端使用如下任意方式进行配置:
  • Oracle JDBC Driver 支持通过系统参数或连接参数的形式配置oracle.jdbc.fanEnabled,所以可以在代码中通过如下方式指定不使用FAN机制:System.setProperty("oracle.jdbc.fanEnabled","false"); 或props.put("oracle.jdbc.fanEnabled",false);
  • 可以移除应用程序代码中 ojdbc8 底层的simplefan.jar和ons.jar,即更改pom排除掉 com.oracle.ojdbc.ojdbc8 下的依赖 com.oracle.ojdbc.simplefan/ons;
  • 可以通过命令行指定 JVM 启动参数,如:java -Doracle.jdbc.fanEnabled=false xxx;

大家根据自己系统的具体情况,如业务连续性和运维稳定行的要求,结合 Oracle RAC FAN/ONS 的利弊,看是否需要针对性进行调整。

相关文章
|
1天前
|
SQL Oracle 关系型数据库
WARNING: Too Many Parse Errors With error=911 When Running a JDBC Application Connected to an Oracle 19c database
WARNING: Too Many Parse Errors With error=911 When Running a JDBC Application Connected to an Oracle 19c database (
10 2
|
1天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
1天前
|
存储 运维 Oracle
Oracle系列十八:Oracle RAC
Oracle系列十八:Oracle RAC
|
1天前
|
Oracle 关系型数据库
oracle Hanganalyze no RAC
oracle Hanganalyze no RAC
17 0
|
1天前
|
Oracle 关系型数据库
oracle rac 手工安装补丁,不适用auto
oracle rac 手工安装补丁,不适用auto
28 3
|
7月前
|
Java 关系型数据库 MySQL
JSP故障诊断分析管理系统myeclipse开发mysql数据库BS模式java编程jdbc
JSP 故障诊断分析管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
57 1
JSP故障诊断分析管理系统myeclipse开发mysql数据库BS模式java编程jdbc
|
7月前
|
Java 关系型数据库 MySQL
JSP教师工作量核算管理系统myeclipse开发mysql数据库BS模式java编程jdbc
JSP 教师工作量核算管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
42 0
|
7月前
|
Java 关系型数据库 MySQL
java网上购物系统eclipse定制开发mysql数据库BS模式java编程jdbc
JSP 网上购物系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。 系统运行视频 https://www.bilibili.com/video/BV1Yh4y1E7x8/
63 0
|
1天前
|
存储 Oracle 关系型数据库
Oracle RAC:数据库集群的舞动乐章
【4月更文挑战第19天】Oracle RAC是Oracle提供的高可用性数据库解决方案,允许多个实例共享同一数据库,确保业务连续性和数据完整性。通过集群件和全局缓存服务实现服务器间的协调和通信。RAC提供高可用性,通过故障转移应对故障,同时提升性能,多个实例并行处理请求。作为数据管理员,理解RAC的架构和管理至关重要,以发挥其在数据管理中的最大价值。
|
12月前
|
存储 Oracle 关系型数据库

推荐镜像

更多
http://www.vxiaotou.com