gpt4 book ai didi

java - 即使激活了 'Always On',Cloud SQL 数据库似乎也总是关闭

转载 作者:行者123 更新时间:2023-12-01 12:09:21 24 4
gpt4 key购买 nike

我正在对 Google Cloud SQL 进行基准测试。我从默认的“按需”激活策略开始,因为我在一个测试平台上工作,点击次数很少,可以节省一些美元。

第一次查询连接大约需要 20-30 秒(我认为这是由数据库启动引起的)。之后,性能非常好。

现在我切换到“始终开启”激活策略。我希望对我网站上的第一个请求有完全相同的响应时间。但是:就像“按需”策略一样,重新连接数据库大约需要 30 秒。该时间花费在连接池中尝试重新连接到数据库的时间,因此我确定这是 Cloud SQL 时间。

我怀疑“始终开启”策略绝对不会执行任何操作(除了可能花费更多美元?我还没有检查),并且我感觉数据库继续关闭。也许它稍微改变了超时策略?

我发现了这个帖子: First connect from Prestashop to Google Cloud SQL always fails

所以显然仍然有超时,但我们可以根据计费计划更改它?这对我来说非常不清楚。

这是我的问题:

  • 采用“按使用”计费的“始终开启”策略的 SQL 实例超时是多少?
  • 采用“套餐”计费的“Always ON”策略的 SQL 实例超时是多少?
  • 有没有办法可以手动设置自己的超时?毕竟,我是付钱的人...如果我希望我的实例继续运行,那是我的问题。

编辑

我确信这是一个连接问题,因为我之前的网络请求有 3 秒超时。设置此超时后,我的所有请求都会引发以下异常:

Caused by: java.sql.SQLException: Cannot get a connection, general error
at org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:130)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
at org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:148)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:71)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 27 more
Caused by: java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2017)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2052)
at org.apache.tomcat.dbcp.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:582)
at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:439)
at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:360)
at org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:118)
... 31 more

最佳答案

在 Cloud SQL 支持的帮助下,问题显然来 self 的 GCE 服务器在 10 分钟后“忘记”tcp 连接。由于它是测试服务器,因此从那里到 Cloud SQL 实例的连接是长期未使用的连接。

为了解决这个问题,我按照 Google 的建议使用了 tcp keepalive:

sudo bash -c 'echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time'

有关此配置的信息可以在此处找到 https://cloud.google.com/sql/docs/gce-access (第 6 节)。

设置此设置后,请不要忘记重新启动与 Cloud SQL 实例建立连接的任何应用程序。

关于java - 即使激活了 'Always On',Cloud SQL 数据库似乎也总是关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com