远程Postgres数据库Heroku Connection从数字海洋实例开始很慢

时间:2015-09-04 09:34:29

标签: database postgresql yii heroku-postgres php-5.6

我正在使用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:

enter image description here

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

2 个答案:

答案 0 :(得分:3)

我无法按照理查德的建议ping Postgres Heroku服务器(Heroku阻止了ping)。很明显,数字海洋服务器和Heroku Postgres服务器之间的连接速度很慢。因此,我直接通过电子邮件发送Heroku来征求他们的意见。

Heroku的解决方案:

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

因此,Application必须建立一个TCP连接,Postgres协议将其连接到SSL连接。这会占用大量数据包并引入大量延迟,尤其是当应用为每个查询或页面加载创建新连接时。

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

推荐听起来太贵了,对我来说也很难处理。

我的解决方案:: Use Database Labs

我发现了另一个postgres作为名为 Database Labs 的服务提供商。它们允许用户选择数据中心区域以获得更好的性能。Database Labs 拥有简单的后端管理平台和友好的支持团队。后端具有最小的后端功能,我确实理解他们从2014年开始。

然而,在迁移到他们的服务后,我的网页性能显着提高。连接就像任何标准连接,无需SSL。我正在输入我的解决方案,以便其他可能面临像我这样的问题的人受益。

如果我们在Heroku中托管我们的应用程序并使用他们的数据库服务,Heroku肯定是一个很好的提供者。但是,如果您是Digital Ocean用户,我建议您使用 Use Database Labs 。这节省了大量时间

答案 1 :(得分:1)

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

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

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

  3. 可能只是服务器之间的连接非常慢。不经测试就无法说。