您如何获得与Google的Cloud SQL的PDO持久连接?

时间:2016-03-04 16:36:30

标签: php mysql pdo google-cloud-platform google-cloud-sql

我注意到,虽然速度相当快,但与数据库的连接(Google的云SQL兼容mysql)是请求的很大一部分。我使用PDO进行抽象。

因此,既然如此,显而易见的解决方案就是启用PHP's PDO persistent connections

根据我的理解,我已经在PHP的源代码(下面的链接)中验证了这一点,这些工作的方式如下:

到目前为止,一切听起来都不错?当你说有一个缓存连接并且有两个请求命中它时,不确定所有这些是如何工作的(压力测试它似乎不会引起问题),但是否则听起来很好并且在测试中工作正常。

嗯,这是经过一段时间后现实世界中发生的事情......

一旦连接"死亡" PDO将停止整个请求60秒或更长时间。这种情况发生在相隔1小时或更长时间后我相信;所以一段时间内一切都会正常工作,PDO将超级快速连接到Cloud SQL。我已经尝试了几种方法来至少缓解停止超过1秒但没有结果(ini_set套接字超时不会影响它,PDO上的expires标志被忽略我认为,异常和状态检查"有离开"没用,因为它在建立连接时停止等等。我假设最有可能是连接"到期"但原因不为我所知。我假设Cloud SQL放弃它,因为它不在" show processlist;",但我可能没有正确地看它。

是否有任何秘密的问题使得PDO持久连接可以在短时间内与Cloud SQL一起使用?

是否不支持与Cloud SQL的持久连接?<​​/ p>

1 个答案:

答案 0 :(得分:1)

您尚未描述应用程序的运行位置(例如计算引擎,App引擎等),因此我将根据所描述的症状进行有根据的猜测。

应用程序主机上的TCP keepalive时间可能设置得太高。您可以通过these instructions更改设置。

假设有一个Linux主机,以下命令将以秒为单位显示您当前的设置:

cat /proc/sys/net/ipv4/tcp_keepalive_time

在一段时间内没有任何活动的TCP连接可能会在应用程序主机和Cloud SQL之间的路径上的任何位置被删除,具体取决于通信路径中的所有内容的配置。

TCP keepalive在空闲连接上发送定期“ping”以解决此问题/功能。

Cloud SQL支持长时间运行的连接。