来自 Digital Ocean Instance 的远程 Postgres 数据库 Heroku 连接速度很慢

Remote Postgres Database Heroku Connection is slow from Digital Ocean Instance

我正在使用 Apache2 和 php 5.6.,12。我决定在 Heroku 远程托管我的数据库(使用 postgresql 9.4)并将我的服务器保留在 Digital ocean。

在我的yii 1框架中,我添加的连接字符串如下:

'db'=>array(
                'connectionString' => 
               'pgsql:host=ec2-XX-XX-XX-XX.compute-1.amazonaws.com;port=6372;dbname=dddqXXXXX;sslmode=require',
                'emulatePrepare' => true,
                'username' => 'XXXX4dcXXXX', 
                'password' => 'XXXXXXXXXc34XXXXXXX123',
                 'charset' => 'utf8',
),

连接成功,但远程访问使我在数字海洋的服务器中进行简单查询变得很慢。我从 Heroku 了解到,对于远程访问,必须启用 ssl 模式。所以我做了,而且我仍然无法弄清楚为什么数据库连接很慢。它甚至可以慢到 5 秒。我尝试使用本地安装的 postgresql 数据库服务器,一切都如预期的那样 运行 。我不确定我该如何解决这个问题,否则我将不得不离开 Herokku 并以传统方式进行操作,这将非常令人沮丧。我希望有人能帮助我。

这是我的 php 信息 og pgsql:

是否需要进行一些设置来加速 apache2 或 php 中的远程 heroku 数据库访问?

这里并没有真正的问题,所以这个答案更像是一个如何测试情况的​​指南。

  1. 如果您对 运行 数据包跟踪的了解还不够,您可能需要确保您的服务器都在同一个网络上。但是,请尝试登录到您的 Digital Ocean 服务器,然后 ping Heroku 服务器。重复 www.google.com 并比较时间。这是假设 Heroku 服务器响应 ping。

  2. 您应该可以连接 "psql -h ..."。然后你可以运行一个"SELECT count(*) FROM "然后"SELECT * FROM LIMIT 10000",然后"LIMIT 20000"。这将使您计算出传输数据与 运行查询查询所花费的时间。

可能只是您的服务器之间的连接速度很慢。没有测试就不能说。

我无法按照 Richard 的建议 ping Postgres Heroku 服务器(Heroku 阻止了 ping)。很明显,数字海洋服务器和 Heroku Postgres 服务器之间的连接很慢。于是我直接给Heroku发邮件征求他们的意见。

Heroku的解决方案:

他们声称,从 Heroku 平台之外的远距离连接的应用程序将具有初始连接延迟,并且这种延迟是一个大问题。

因此,应用程序必须建立 TCP 连接,Postgres 协议会将其升级为 SSL 连接。这需要相当多的数据包并引入大量延迟,尤其是当应用程序为每个查询或页面加载创建新连接时。

Heroku 建议我配置应用程序以使用 heroku-pgbouncer 连接池之类的东西。它使用 pgbouncer 和 stunnel 为应用端点提供可配置的连接池。

这个建议听起来太贵了,对我来说极具挑战性。

我的解决方案:: Use Database Labs

我发现另一个名为 Database Labs . They allow users to select data center region for better performance.Database Labs 的服务提供商 postgres 拥有简单的后端管理平台和友好的支持团队。后端具有最少的后端功能,我确实理解它们是在 2014 年开始的。

但是,在迁移到他们的服务后,我的网页性能有了显着提高。该连接就像任何标准连接一样,无需 SSL。我输入我的解决方案是为了其他可能像我一样面临类似问题的人的利益。

如果我们在 Heroku 中托管我们的应用程序并使用他们的数据库服务,Heroku 绝对是一个很好的提供商。但是如果你是 Digital Ocean 用户,我建议你使用 Use Database Labs 。这样可以节省很多时间