标签: connection-pooling

连接中断后如何自动重新连接Oracle连接池?

我正在通过OracleConnectionCacheImpl运行Oracle连接池的问题.当我通过瘦驱动程序连接到我的数据库服务器(Oracle 10g)上的连接池时,一切正常,直到一个未指定的时间,数据库连接被丢弃(可能是由于空闲连接?),我收到一条错误消息:

封闭连接.

刷新页面并重新尝试连接会重新连接数据库,因此它似乎不是网络或数据库的问题.如果池中的连接因任何原因死亡,Oracle连接池是否可以验证其连接并重新连接?

我正在使用Apache Tomcat 6.0.18,Java EE6更新11.

(在Oracle瘦驱动程序中似乎有ping功能.这有帮助,我在哪里可以找到它?)

database-connection connection-pooling jdbc oracle10g

12
推荐指数
1
解决办法
1万
查看次数

Tomcat JDBC连接池VS c3p0连接池

我最近遇到了这个连接池实现.

http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

我觉得很有意思.

有没有人试过这个?我认为它看起来很棒,除了它不支持自动重试和语句缓存,如c3p0.

有没有人知道它与c3p0相比如何?

直到现在我使用了c3p0,但我发现它在多线程环境中的连接处理存在问题.与应用程序线程数相比,它打开了太多连接.

谢谢.

java connection tomcat connection-pooling c3p0

12
推荐指数
1
解决办法
1万
查看次数

使用NHibernate和分布式事务导致"服务器无法恢复事务"的死锁

将NHibernate与分布式事务一起使用时,我们遇到了问题.

请考虑以下代码段:

//
// There is already an ambient distributed transaction
//
using(var scope = new TransactionScope()) {
    using(var session = _sessionFactory.OpenSession())
    using(session.BeginTransaction()) {
        using(var cmd = new SqlCommand(_simpleUpdateQuery, (SqlConnection)session.Connection)) {
            cmd.ExecuteNonQuery();
        }

        session.Save(new SomeEntity());
        session.Transaction.Commit();
    }
    scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

有时,当服务器处于极端负载时,我们将看到以下内容:

  1. 使用cmd.ExecuteNonQuery执行的查询被选为死锁牺牲品(我们可以在SQL事件探查器中看到它),但不会引发异常.
  2. session.Save失败,并显示错误消息"操作对事务状态无效".
  3. 每次执行此代码后,session.BeginTransaction都会失败.前几次,内部异常会有所不同(有时它是应该在步骤1中引发的死锁异常).最终它稳定到"服务器未能恢复交易.描述:3800000177." "不允许新请求启动,因为它应该带有有效的事务描述符."

如果单独使用,应用程序最终(在几秒或几分钟后)将从此条件恢复.

为什么步骤1中没有报告死锁异常?如果我们无法解决这个问题,那么我们如何防止我们的应用程序暂时无法使用?

该问题已在以下环境中重现

  • Windows 7 x64和Windows Server 2003 x86
  • SQL Server 2005和2008
  • .NET 4.0和3.5
  • NHibernate 3.2,3.1和2.1.2

我已经创建了一个测试夹具,有时会为我们重现这个问题.它可以在这里找到:http://wikiupload.com/EWJIGAECG9SQDMZ

sql-server nhibernate connection-pooling distributed-transactions

12
推荐指数
1
解决办法
9649
查看次数

Python mysql(使用pymysql)自动重新连接

我不确定这是否可行,但我正在寻找一种在连接丢失时重新连接到mysql数据库的方法.所有连接都保存在gevent队列中,但我认为这无关紧要.我敢肯定,如果我花一些时间,我可以想出一种方法来重新连接到数据库.但是我看了一下pymysql代码,我看到Connection类中有一个'ping'方法,我不确定如何使用它.

该方法看起来会在第一次重新连接,但之后又将重新连接标志再次切换为False?我可以使用这种方法,还是有不同的方法来建立连接丢失?即使不是pymysql,人们如何处理,数据库服务器崩溃并且不得不重新建立与mysql服务器的连接?

def ping(self, reconnect=True):
    ''' Check if the server is alive '''
    if self.socket is None:
        if reconnect:
            self._connect()
            reconnect = False
        else:
            raise Error("Already closed")
    try:
        self._execute_command(COM_PING, "")
        return self._read_ok_packet()
    except Exception:
        if reconnect:
            self._connect()
            return self.ping(False)
        else:
            raise
Run Code Online (Sandbox Code Playgroud)

python mysql database-connection connection-pooling pymysql

12
推荐指数
2
解决办法
9837
查看次数

在pg_stat_activity中具有"空闲"状态的持久"COMMIT"查询

如果我查询:

select * from pg_stat_activity where application_name ~ 'example-application';
Run Code Online (Sandbox Code Playgroud)

我得到很多行,状态是idle和查询COMMIT.它们持久耐用,不会消失.一段时间后,我的应用程序达到hibernate.c3p0.max_size(池中的最大JDBC连接数)限制并停止使用数据库.

一些应用程序实现细节在其他SO线程中描述: 线程池中的Guice DAO提供程序 - 查询变为"在转换中空闲"

为什么会这样?如何解决这个问题呢?

java postgresql hibernate connection-pooling guice

12
推荐指数
1
解决办法
3804
查看次数

从池中获取连接之前经过的超时时间 - 但池未满

我讨厌甚至提起这个b/c有这么多的几百页报道这个错误可追溯到7 - 8年......但是,我无法想象这一点.

我在服务器A上运行的报表服务连接到服务器B上的SQL Server 2008 R2.两台服务器都运行Windows Server 2008.报表服务是多线程的,每次在自己的线程上运行多达10个报表.
我的连接字符串如下:

Data Source=ServerB;Initial Catalog=DBName;trusted_connection=YES;Connection Timeout=0;Max Pool Size=500;
Run Code Online (Sandbox Code Playgroud)

如您所见,我已将连接超时设置为0以等待连接,直到其可用,并且最大池大小为500 b/c我想确保池对于我的多线程服务来说不是太小.该错误通常仅在服务启动时显示,并且存在等待处理的报告队列.

显然,要做的第一件事就是寻找泄漏的连接..必须有未关闭的连接导致池填满,对吧?没有 - 看起来像池永远不会填满.

我花了最后几个小时在服务器上运行性能监视器,观看".NET数据提供程序为SqlServer",而NumberOfPooledConnections从未超过20左右.我还在SQL服务器上运行perfmon,观看"SQLServer:General Statistics",UserConnections永远不会超过50.在此期间,我通过手动重新启动服务导致此错误报告2或3次.

我还能找到什么?还有什么会导致这个错误?完整的错误消息是:

System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
Run Code Online (Sandbox Code Playgroud)

谢谢,斯蒂芬

.net database sql-server timeout connection-pooling

11
推荐指数
1
解决办法
1万
查看次数

从Sling/CQ中的捆绑包获取OSGi服务

我正在使用Day CQ.我想使用Felix控制台中提供的连接池将一些数据存储在SQL Server数据库中.我可以通过使用在defineObjects标记中定义的SlingScriptHelper类型的"sling"对象从JSP执行此操作

sling.getService(DataSourcePool.class).
Run Code Online (Sandbox Code Playgroud)

但是,我想使用在OSGi包中创建的servlet来处理来自客户端的请求.servlet没有defineObjects标记,因此未定义"sling"对象.我没有看到在servlet中创建有效的SlingScriptHelper对象的方法,但似乎必须可行.

有办法吗?

osgi servlets connection-pooling sling aem

11
推荐指数
2
解决办法
2万
查看次数

Spring-Hibernate应用程序:非法访问:此Web应用程序实例已经停止

我正在以适当的方式处理连接.
1.我在我的应用程序中使用"Hibernate"连接池.每当我从池中获得连接时,我都会在完成交易后返回池中.
2.我已经监测数据库,检查连接.我将'空闲连接'时间设置为60秒.我发现没有连接对象运行超过60秒.

我仍然经常收到这个错误.我的Web应用程序正在停止.我必须每天重启tomcat一次.但是,我正在寻找一个永久的解决方案,而无需重新启动tomcat.
任何人都可以解释根本原因吗?所以我可以解决这个问题.

错误日志:

INFO: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.c3p0.ComboPooledDataSourceBeanInfo.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    ...
    ...
    ...
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:679)
Run Code Online (Sandbox Code Playgroud)

我的hibernate-contect.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …
Run Code Online (Sandbox Code Playgroud)

spring hibernate connection-pooling tomcat7

11
推荐指数
2
解决办法
2万
查看次数

Hibernate中的Session和Connection之间有什么区别?

我想清除基本的3点,

是否在旧会话上开始新的数据库事务会获得新连接并恢复会话?

提交数据库事务是否会断开会话与JDBC连接并将连接返回到池?

从Hibernate Documentation,早期版本的Hibernate需要显式断开连接并重新连接Session.不推荐使用这些方法,因为开始和结束事务具有相同的效果.它们如何产生同样的效果?

session hibernate database-connection jpa connection-pooling

11
推荐指数
1
解决办法
6293
查看次数

PoolingHttpClientConnectionManager不释放连接

我使用Spring来实现以下目标:

在服务器上,我通过REST接口以XML格式接收数据.我想将数据转换为JSON并将其发布到另一个服务器.我的代码(我删除了一些敏感的类名/ URL以避免雇主的愤怒)看起来像这样:

主要/配置类:

package stateservice;

import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class App {
    Logger log = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) {
        System.out.println("Start!");
        SpringApplication.run(StateServiceApplication.class, args);
        System.out.println("End!");
    }

    @Bean
    public RestTemplate restTemplate() {
        log.trace("restTemplate()");
        HttpHost proxy = new HttpHost("proxy_url", 8080);
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        // Increase max total connection to 200
        cm.setMaxTotal(200);
        cm.setDefaultMaxPerRoute(50);

        RequestConfig requestConfig = RequestConfig.custom().setProxy(proxy).build();

        HttpClientBuilder httpClientBuilder …
Run Code Online (Sandbox Code Playgroud)

java spring connection-pooling apache-httpclient-4.x spring-boot

11
推荐指数
1
解决办法
7963
查看次数