簡體   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