介绍

Oracle Express Edition是Oracle Enterprise Edition的免费版本,其较小的尺寸使其非常方便地测试各种Oracle功能。

根据Oracle文档 ,Express Edition最多可以使用一个CPU和1 GB RAM,但是实际上存在其他限制并不总是很明显。

数据库连接处理异常

以下测试试图模拟低延迟的事务环境,因此租用了连接,但时间非常短:

private void simulateLowLatencyTransactions(DataSource dataSource, int waitMillis) throws SQLException {for (int i = 0; i < callCount; i++) {try {try (Connection connection = dataSource.getConnection()) {//Let's assume we are running a//short-lived transactionsleep(waitMillis);}} catch (SQLException e) {LOGGER.error("Exception on iteration " + i, e);}}
}

此测试可以正常工作,直到将等待时间降低到超过某个阈值为止,在这种情况下,数据库偶尔会开始引发以下异常:

ERROR  [main]: c.v.b.h.j.c.OracleConnectionCallTest - Exception on iteration 111
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12516, TNS:listener could not find available handler with matching protocol stackat oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at com.vladmihalcea.book.high_performance_java_persistence.jdbc.connection.OracleConnectionCallTest.simulateLowLatencyTransactions(OracleConnectionCallTest.java:50) [test-classes/:na]at com.vladmihalcea.book.high_performance_java_persistence.jdbc.connection.OracleConnectionCallTest.testConnections(OracleConnectionCallTest.java:40) [test-classes/:na]

尽管代码是单线程的,但是Oracle开始抱怨连接请求侦听器找不到用于处理传入请求的进程处理程序。

可以通过将流程会话参数提高到更高的值来证明这一假设:

alter system set processes=1000 scope=spfile;
alter system set sessions=1000 scope=spfile;

使用这些新设置,代码可以正常运行,并且不会发出异常。 尽管增加流程会话限制可以解决问题,但是此解决方案仅是一种解决方法,它只会提高连接阈值,而不能解决根本原因。

此IBM故障排除说明给出了一种可能的解释,建议连接关闭事件可能不会立即通知连接侦听器。 这可能会导致连接侦听器错误地声明实际的连接数,并假定已经达到最大进程数。

在Oracle 11g企业版上,此问题不可复制。

解决方法

精明的读者在查看异常堆栈跟踪时会注意到该问题。 OracleDataSource不提供任何连接池机制 ,这导致大量连接在服务器端和驱动程序这两个驱动程序上建立了开销。

使用连接池解决了此问题,因为连接被重用而不是按需建立。 连接池大大减少了连接获取时间,这也导致了较低的事务等待时间和更好的吞吐量。

翻译自: https://www.javacodegeeks.com/2015/08/why-you-should-always-use-connection-pooling-with-oracle-xe.html

为什么应始终将连接池与Oracle XE一起使用相关推荐

  1. 如何连接oracle xe_为什么应始终将连接池与Oracle XE一起使用

    如何连接oracle xe 介绍 Oracle Express Edition是Oracle Enterprise Edition的免费版本,其较小的尺寸使其非常方便地测试各种Oracle功能. 根据 ...

  2. java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?

    求助,JAVA Spring 连接池 调用 Oracle 存储过程的问题?在Spring中配置了c3P0的连接池,在调用Oracle的存储过程时,报错[code]java.lang.ClassCast ...

  3. python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

  4. jsp oracle连接池,利用Oracle自带的连接池类的一例

    利用Oracle自带的连接池类的一例 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 /** 封装了对数据库的连接,用于处理SQL语句. @author:ya ...

  5. oracle使用连接池,使用Oracle的数据连接池

    三个jar依赖(maven项目):Junit jdbc org.apache.tomcat.dbcp 一个database.properties文件内容如下: #数据库的配置信息 #key.key2= ...

  6. 连接池配置oracle aix,一次AIX系统swap使用过高的故障解决过程

    今天早上回到办公室没多久就接到了新炬过来的电话,说我们的数据库服务器swap使用已经过了告警基准线,让我去看看应用是否还运行正常.于是赶紧登陆服务器查了一下swap的活动情况: [cramer@zhz ...

  7. python oracle连接池_python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

  8. net oracle连接池配置,Oracle ODP.NET连接池

    数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...

  9. mysql连接池永驻_【学习笔记】Oracle连接池 数据库常驻连接池(Database Resident Connection Pool)案例介绍...

    天萃荷净 分享一篇关于应用程序与Oracle数据库连接的连接方法介绍,数据库常驻连接池(Database Resident Connection Pool)案例介绍 一.介绍常驻连接池(Databas ...

最新文章

  1. Java 最常见的 10000+ 面试题及答案整理:持续更新
  2. vim command(vim命令)
  3. 兰德报告:思维机器时代的威慑
  4. 二分图匹配的匈牙利算法
  5. python知识点 07-11
  6. C#操作NPOI插件的HSSFWorkBook,常见的那些坑
  7. 进程间通信 - 匿名管道实现
  8. SICP 之斐波那契数
  9. mysql、oracle知识点总结
  10. Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo
  11. android seekbar闪退,android seekbar 踩坑之路
  12. 冷饭新炒:理解JDK中UUID的底层实现
  13. 清理清理火狐历史记录
  14. Nodejs版本的企业微信中接收消息与腾讯对接之验证URL 代码已经上传,可以去下载
  15. 深度学习基础(二)—— 从多层感知机(MLP)到卷积神经网络(CNN)
  16. Android RatingBar使用Kotlin
  17. 翻译: 3.线性神经网络 概览 深入神经网络 pytorch
  18. 《车联网(智能网联汽车)产业发展行动计划》正式发布,车联网产业发展进一步提速...
  19. Java实现动态规划经典题目
  20. pimple idiom

热门文章

  1. 【最全最详细】使用publiccms实现动态可维护的导航菜单栏
  2. 你知道i=i++;的含义吗?原理其实没有你想的那么简单
  3. Sentinel控制台
  4. mysql5.5安装配置 在阿里云服务器上 本地navicat连接
  5. 转:json与map互转
  6. java作为kafka生产者实验及Expiring超时问题解决
  7. how to build a paper's architecture?
  8. Mybatis3 (2)xml映射文件
  9. 内联脚本被视为是有害的_数据类被认为有害
  10. java编程学习方法_在线学习Java编程的最佳方法