繁体   English   中英

查询Postgresql时偶尔检索“连接超时”错误

[英]Occasionally retrieving “connection timed out” errors when querying Postgresql

在将sqlx与pgx结合使用时,我经常会收到此错误,并且我认为这是我的配置错误,也是我不了解的数据库概念:

error: 'write tcp [redacted-ip]:[redacted-port]->[redacted-ip]:[redacted-port]: write: connection timed out

尝试从数据库读取时会发生这种情况。 我在启动阶段初始化sqlx:

package main

import (
    _ "github.com/jackc/pgx/stdlib"
    "github.com/jmoiron/sqlx"
)

//NewDB attempts to connect to the DB
func NewDB(connectionString string) (*sqlx.DB, error) {
    db, err := sqlx.Connect("pgx", connectionString)

    if err != nil {
        return nil, err
    }

    return db, nil
}

任何负责与数据库交互的结构都可以访问此指针。 他们中的大多数人都使用SelectGet ,并且我了解这些返回连接是他们自己的。 有两个使用Exec函数,它们仅在函数末尾返回结果和错误。

其他注意事项

  • 我的Postgres数据库支持100个max_connections
  • 发生此错误时,我仅显示了几个活动连接
  • 我没有使用SetMaxIdleConnectionsSetMaxOpenConnections
  • 刷新页面并再次触发请求始终有效

关于这里可能发生什么的任何提示?

编辑:我没有提到此服务器位于compose.io上,而后者又托管在AWS上。 AWS是否已将这些连接打开为僵尸,因为它们已经打开了这么长时间,并且在一次一次尝试失败后发生了超时?

借助一些粗略的计算,我将这些连接的最大寿命设置为10分钟。 我将此代码插入上述问题的init函数中,以将打开的连接数,空闲的连接数限制为30秒。

db.SetConnMaxLifetime(time.Duration(30) * time.Second)
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(20)

希望这可以帮助其他人。

SELECT * FROM pg_stat_activity; 同样适用于固定连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM