私たちのアプリケーションはCOPY
クエリを使用して赤方偏移するCSVファイルからデータを挿入していることは、Cをアップロード700ギガバイトCの両端の合計で11000個のファイルそれぞれを。。。。 1つのデータベース・テーブルへのファイルのマップ私たちは前に、ロギングおよび健全性チェックのためのCOPY
各後SELECT COUNT(*) FROM <table>
を実行pg_query() - ブロックモードへ「に設定することはできません接続(エラー番号8)
一定期間後に(変化するように思える)pg_query()
リターンへの呼び出しこのE_NOTICE
PHPエラー:。。
この
pg_query() - "Cannot set connection to blocking mode (Error No. 8)
はのために返されます3210クエリ。私たちのアプリケーションはすべてのPHPエラーを例外に伝播します。この伝播を削除すると、私たちに
SELECT
と
COPY
の両方で上記
E_NOTICE
に加えて、このエラーメッセージを表示します。
Failed to run query: server closed the connection unexpectedly
This probably means the server terminated abnormally
COPY
クエリは間違いなく、実際にファイルを挿入しません。
存在すると、このエラーは、ファイルを挿入するためのあらゆる試みに起こります。それは自分自身を解決するようではありません。
最初に、スクリプトの開始時に1つのデータベース接続を開き(pg_connect()
で開かれていた)、SELECT
とCOPY
のすべてに再利用しました。上記のE_NOTICE
を取得したら、実験のように、各クエリに対して新しい接続を開始しようとしました。これは何も変わっていない。 PHP iniファイル内
私たちの現在のpgsqlの設定は次のとおりです。このエラーの原因となることができ、それがどのように解決することができるもの
pgsql.allow_persistent = Off
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
?
更新 - 添付の画面を参照してください。私たちは 'concurrency'を5に設定し、timeoutを0に設定したデフォルトのクエリキューしか持たないようです。また
:
main=# select * from stv_sessions;
starttime | process | user_name | db_name
------------------------+---------+----------------------------------------------------+----------------------------------------------------
2017-03-24 10:07:49.50 | 18263 | rdsdb | dev
2017-03-24 10:08:41.50 | 18692 | rdsdb | dev
2017-03-30 10:34:49.50 | 21197 | <username_removed> | main
2017-03-24 10:09:39.50 | 18985 | rdsdb | dev
2017-03-30 10:36:40.50 | 21605 | root | main
2017-03-30 10:52:13.50 | 23516 | rdsdb | dev
2017-03-30 10:56:10.50 | 23886 | root | main
読み込みに失敗したファイルについて、 'copy'はどれぐらいの間実行されましたか?ファイルサイズが巨大でなければならないので、15分以上実行しているに違いないと思います。 –
'select * from stv_sessions'にはいくつの接続が見えますか?そのユーザグループのキューに設定されている同時実行性とタイムアウトは何ですか? –
@RedshiftGuy - stv_sessionsテーブルには5つの接続があります:3つはユーザー 'rdsdb'によって作成され、常にRedshiftの一部として実行されていると思いますか?それから、私がコマンドラインで 'psql'クライアントを使って作ったものがあり、最後に私のアプリケーションで作られたものがあります。 (私は元々の投稿で、クエリごとに新しい接続を一時的に開こうとしていたが、それ以上は関係ない)。 また、そのユーザーグループキューの並行性/タイムアウトを確認するにはどうすればよいですか?ありがとう。 – Pete171