Amazon RDS PostgreSQL または Aurora PostgreSQL DB インスタンスに接続するときに、「could not send data to client (クライアントにデータを送信できませんでした) 」または「could not receive data from client (クライアントからデータを受信できませんでした)」というエラーのトラブルシューティング方法を教えてください。
最終更新日: 2021 年 5 月 4 日
Amazon Relational Database Service (Amazon RDS) PostgreSQL または PostgreSQL との互換性がある Amazon Aurora DB インスタンスでクエリを実行しようとしました。しかし、実行すると次のエラーが起こりました。
- 「could not send data to client (クライアントにデータを送信できませんでした) 」
- 「could not receive data from client (クライアントからデータを受信できませんでした) 」
簡単な説明
Amazon RDS DB インスタンスのバックエンドプロセスがクライアントとの間で送受信ができない場合、バックエンドプロセスは PostgreSQL ログに次のいずれかのエラーを記録します。
- 「could not send data to client (クライアントにデータを送信できませんでした) 」
- 「could not receive data from client (クライアントからデータを受信できませんでした) 」
解決方法
これらのエラーは、さまざまな理由で発生する可能性があります。この問題のトラブルシューティングを行うには、以下の手順をご覧ください。
クライアントのアライブネスのチェック
最初にクライアントプロセスのアライブネスをチェックします。例えば、OOM が原因でクライアントプロセスがクラッシュした場合、セッションは正しく終了しない可能性があります。この終了によって、これらのエラーのいずれかが発生する場合があります。
tcp_keepalives_idle と tcp_keepalives_interves_interval のパラメータ
クエリの処理時間が長すぎると、クライアントからセッションが誤って終了される場合があります。この問題を解決するには、クライアントのタイムアウト設定値を増やします。また、tcp_keepalives_idle と tcp_keepalives_interves のパラメータ値を短くして、バックエンドプロセスからクライアントのアライブネスをチェックすることもできます。詳細については、「DB パラメータグループのパラメータの変更」を参照してください。
tcp_keepalives_idle と tcp_keepalives_interval のデフォルト値を確認するには、psql などの PostgreSQL クライアントを使用して次のコマンドを実行します。
SELECT name, setting FROM pg_settings WHERE name LIKE 'tcp_keepalives_%'
接続のチェック
クエリの処理時間が短くなってもエラーが発生する場合は、クライアントと DB インスタンスの間の接続をチェックします。
rdsadmin セッションからのフェールオーバー後
rdsadmin セッションからのフェールオーバー後にエラーが発生した場合は、エラーを無視できます。