pgx で sqlx を使用しているときに、このエラーが頻繁に発生します。これは、構成エラーであり、把握していないデータベースの概念であると考えています。
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
を使用しており、それらがプールへの戻り接続を単独で使用していることを理解しています。を使用する 2 つの関数がありExec
、関数の最後に結果とエラーのみを返します。
その他の注意事項
- 私のPostgres dbは100をサポートしています
max_connections
- このエラーの時点で、いくつかのアクティブな接続のみを表示しました
- 使用していない
SetMaxIdleConnections
か、SetMaxOpenConnections
- ページを更新してリクエストを再度トリガーすると、常に機能します
ここで何が起こっているのかについてのヒントはありますか?
編集: このサーバーが compose.io 上にあり、AWS でホストされていることについては触れていません。AWS がこれらの接続をゾンビに変えてしまう可能性はありますか?それらが非常に長い間開いていて、1 つずつ試行に失敗した後にタイムアウトが発生したためですか?