我在小型 Windows Azure Ubuntu 13.04 VM使用默认的 postgresql.conf。我有一个 Rails 应用程序在中型 Windows Azure Ubuntu 13.04 VM 上运行。访问 postgresql 数据库时,rails 应用程序不断超时。在其 database.yml 中,我将连接池大小设置为 120,将超时设置为 15 秒。尽管如此,我的 rails 日志中还是充满了以下错误消息:
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5 seconds (waited 5.0023203 seconds). The max pool size is currently 120; consider increasing it.
我的 postgresql.conf 的最大连接数限制为 120,如果超过该值,服务器将无法成功重启。我还确保 postgresql.conf 中的 ssl 已关闭。本文但除此之外,我不知道发生了什么。我的 postgresql 日志不包含任何表明出现问题的信息。我的网站每天的点击量约为 1000 次,所以也许小型 VM 实例不够强大?我非常感谢任何帮助!
[编辑1] postgresql 数据库位于同一关联组内的单独云服务中。例如:
db 小型 VM:mydatabase.cloudapp.net(Affinity Group 美国东部)
论坛中型 VM:myforums.cloudapp.net(Affinity Group 美国东部)
在数据库服务器上,我打开了端口 5432。论坛服务器到数据库服务器的连接使用的是其主机名。DNS 解析耗时这么长,可能是原因吗?
答案1
使用 Windows Azure 内部 IP 地址代替主机名解决了问题。显然 DNS 解析的成本相当高。