如何在Java11中配置Druid连接池以优化Oracle的读写性能?

秋芳君_6331

秋芳君_6331

2026-09-15

213人浏览

原创

java 11下优化druid连接oracle需显式配置三个驱动参数:oracle.jdbc.defaultrowprefetch=100、oracle.net.connect_timeout=3000、oracle.jdbc.usefetchsizewithlongcolumn=true;禁用testonborrow=true,改用testwhileidle=true+合理检测间隔;开启preparedstatement缓存须配对设置poolpreparedstatements=true与maxpoolpreparedstatementperconnectionsize=50;注意jdbc url中添加oracle.net.ssl_version=1.2兼容tls问题。

如何在java11中配置druid连接池以优化oracle的读写性能?

Java 11 中配置 Druid 连接池优化 Oracle 读写性能,关键不在“换版本”,而在绕开 Oracle JDBC 驱动默认行为与 Druid 参数的隐式冲突——比如 oracle.jdbc.defaultRowPrefetch 未显式设置、testOnBorrow 开启后触发频繁 SELECT 1 FROM DUAL 导致连接争用、以及 poolPreparedStatements 缺失导致硬解析飙升。

Oracle JDBC 驱动必须显式配置的三个参数

Oracle 官方驱动(ojdbc8.jar 或 ojdbc11.jar)在 Java 11 下默认关闭行预取(row prefetch),这会导致单次查询返回大量数据时出现严重网络往返放大。Druid 不会自动帮你设这个,必须手动注入到 connectionProperties:

  • oracle.jdbc.defaultRowPrefetch=100:对大多数 OLTP 查询足够,报表类可调至 500;值过大会吃 JVM 堆内存
  • oracle.net.CONNECT_TIMEOUT=3000:避免 DNS 解析慢拖垮连接获取,尤其在 Kubernetes 内网 DNS 不稳定时
  • oracle.jdbc.useFetchSizeWithLongColumn=true:防止 CLOB/BLOB 字段读取时触发额外 round-trip

这些要写进 spring.datasource.druid.connection-properties(YAML)或 connectionProperties(properties 文件),不能塞进 JDBC URL,否则 Oracle 驱动不识别。

testOnBorrow=true 在 Oracle 场景下是性能毒药

Oracle 的 SELECT 1 FROM DUAL 虽轻量,但开启 testOnBorrow=true 后,每次取连接都执行一次——高并发下直接变成数据库侧的“无效心跳风暴”。更糟的是,Oracle 默认事务隔离级别为 READ COMMITTED,而 testOnBorrow 会隐式开启一个只读事务再回滚,增加 LGWR 日志压力。

正确做法是关掉它,改用 testWhileIdle=true + 合理的空闲检测间隔:

  • testOnBorrow=false(强制设为 false)
  • testWhileIdle=true
  • timeBetweenEvictionRunsMillis=30000(30 秒检查一次空闲连接)
  • validationQuery=SELECT 1 FROM DUAL(仅用于空闲检测)

这样既保活,又把检测负载压到后台线程,不干扰业务请求流。

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载

开启 PreparedStatement 缓存必须配对生效

Oracle 对硬解析极其敏感。如果只设 poolPreparedStatements=true 却没设 maxPoolPreparedStatementPerConnectionSize,Druid 默认只缓存 10 个,很快溢出,缓存失效等于没开。

Oracle 场景建议组合配置:

  • poolPreparedStatements=true
  • maxPoolPreparedStatementPerConnectionSize=50(每个物理连接最多缓存 50 个 PS)
  • useGlobalDataSourceStat=true(全局统计才能看到 PS 命中率,在监控页看 psCacheHitCount / psCacheAccessCount)

上线后务必打开 Druid 监控页(/druid/index.html),点进「SQL」Tab 查看平均解析耗时,若 parseTime > 2ms 且 psCacheHitCount 比例低于 95%,说明 PS 缓存没起效。

Java 11 特定兼容陷阱:JDBC 4.3 与 Oracle 19c+ 的 TLS 握手

Java 11 默认启用 TLSv1.3,而部分 Oracle 19c RAC 集群未完全适配,会导致连接池初始化阶段随机失败,错误形如:java.sql.SQLRecoverableException: IO Error: Connection reset。

临时解法是在 JDBC URL 末尾加参数:

jdbc:oracle:thin:@//host:1521/orcl?oracle.net.ssl_version=1.2

长期方案是升级 Oracle 客户端驱动到 ojdbc11-21.12.0.0 及以上,并确认数据库端已打补丁(Patch 34137968)。别信“加了 -Djdk.tls.client.protocols=TLSv1.2”这种 JVM 全局开关——它会影响整个应用的 HTTPS 调用,得不偿失。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9797

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6942

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6132

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1064

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

888

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1296

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2569

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19891

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1155

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程