Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 打开与Postgres的DB连接需要很长时间_Postgresql_Database Connection_Connection Pooling_Payara - Fatal编程技术网

Postgresql 打开与Postgres的DB连接需要很长时间

Postgresql 打开与Postgres的DB连接需要很长时间,postgresql,database-connection,connection-pooling,payara,Postgresql,Database Connection,Connection Pooling,Payara,我们的一些应用程序面临连接池问题。我经营其中一家。Payara 4.1上使用PostgreSQL 9.5.8的JEE应用程序 使用本地db实例在本地运行应用程序时,我几乎没有问题。在远程环境中运行时,我发现应用程序每10分钟就会发生一次无响应的问题(实际上,它以HTTP状态503响应所有内容)。猜测这与打开连接花费的时间较长有关,我们在jdbc资源中设置了参数idletimeoutionseconds=“0”。现在,我们每天有4次同样的问题,这是一种进步,但我们的邻居系统仍然在抱怨 我们通常运行

我们的一些应用程序面临连接池问题。我经营其中一家。Payara 4.1上使用PostgreSQL 9.5.8的JEE应用程序

使用本地db实例在本地运行应用程序时,我几乎没有问题。在远程环境中运行时,我发现应用程序每10分钟就会发生一次无响应的问题(实际上,它以HTTP状态503响应所有内容)。猜测这与打开连接花费的时间较长有关,我们在
jdbc资源中设置了参数
idletimeoutionseconds=“0”
。现在,我们每天有4次同样的问题,这是一种进步,但我们的邻居系统仍然在抱怨

我们通常运行5个稳定连接,允许最多30个连接。我们的应用程序通常使用1到2来处理流量。通过TCP转储,我已经看到,在某个时间点,连接池尝试打开许多连接(池意识到它所持有的连接已被数据库关闭,没有任何信息,如TCP FIN,打开每个连接大约需要1秒)。在这大约30秒的时间内,并非所有的请求都可以安全地排队,并且发生了503次

当地一切都很好。打开连接需要约50毫秒,每个人都很高兴。我们的博士后团队根本帮不上忙,我遇到了一个问题。由于我认为JEE中的连接池没有任何改进的可能性,我有一些激进的想法:

  • 我自己刷新连接。总是不断地(这在JEE中很难实现,因为我不能简单地查看连接池并告诉每个连接刷新以备不时之需)

  • 用更有效的方法取代连接池的JEE实现。(维护我们应用程序的下一代开发者会恨我…)

  • 用我自己管理的东西替换DB。(更愚蠢的想法)

  • 是否有人:

  • 你知道我怎样才能完成上面的1或2吗
  • 还有什么其他想法可以帮助你吗
  • 这里是我当前的JDBC资源定义(如果需要):

    <jdbc-resource poolName="<poolName>" jndiName="<jndiName>" isConnectionValidationRequired="true"
    connectionValidationMethod="table" validationTableName="version()" maxPoolSize="30" 
    validateAtmostOncePeriodInSeconds="30" statementTimeoutInSeconds="30" isTimerPool="true" steadyPoolSize="5" 
    idleTimeoutInSeconds="0" connectionCreationRetryAttempts="100000" connectionCreationRetryIntervalInSeconds="30" 
    maxWaitTimeInMillis="2000">
    
    
    
    这听起来像是防火墙问题。询问您的基础架构人员在应用程序服务器和数据库服务器之间是否存在有状态防火墙。如果有,询问他们会话超时是什么,以及是否可以对数据库中的tcp/5432(或您使用的任何端口)禁用该超时。一定要用小词来增加特罗格洛迪家族理解的机会。这听起来像是防火墙的问题。询问您的基础架构人员在应用程序服务器和数据库服务器之间是否存在有状态防火墙。如果有,询问他们会话超时是什么,以及是否可以对数据库中的tcp/5432(或您使用的任何端口)禁用该超时。一定要用小词来增加特罗格洛迪人理解的机会。