[英]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
}
任何負責與數據庫交互的結構都可以訪問此指針。 他們中的大多數人都使用Select
或Get
,並且我了解這些返回連接是他們自己的。 有兩個使用Exec
函數,它們僅在函數末尾返回結果和錯誤。
max_connections
SetMaxIdleConnections
或SetMaxOpenConnections
關於這里可能發生什么的任何提示?
編輯:我沒有提到此服務器位於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.