2016-09-19 13 views
0

私はマルチjdbcを使用して、データ移行の全テーブルクエリを実行します。並列75 jdbcを使用してテーブルあたり3000000行近くのdiffテーブルをクエリすると、すべてのデータがjdbcに返される前にMySQLが1つの接続を中止することがわかりました。MySQLが異常終了しました。不明なエラー

スローログ:

Time: 160919 9:09:38 
[email protected]: test[test] @ [10.142.90.20] 
Thread_id: 349 Schema: mmig_1005 QC_hit: No 
Query_time: 161.997180 Lock_time: 0.000560 Rows_sent: 619246 Rows_examined: 619246 
Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No 
Filesort: No Filesort_on_disk: No Merge_passes: 0 
explain: id select_type  table type possible_keys key  key_len ref  rows Extra 
explain: 1 SIMPLE CAR_NEW_6  ALL  NULL NULL NULL NULL 2923495 
use mmig_1005; 
SET timestamp=1474247378; 
SELECT @@version, name, id, sharding_id, model 
FROM CAR_NEW_6; 

あり、テーブルmmig_1005.car_new_6ほぼ3000000行がありますが、MySQLはちょうど619246個の行を送信し、この接続を中断しました。スレッドIDは349であり、mysql-errログにこの接続が中止されています。

160919 9:09:38 [Warning] Aborted connection 349 to db: 'mmig_1005' user: 'test' host: '10.142.90.20' (Unknown error) 
160919 9:09:38 [Warning] Aborted connection 305 to db: 'mmig_1001' user: 'test' host: '10.142.90.20' (Unknown error) 

MySQLのパラメータ:そのデータが全て送信される前に

connect_timeout 10 
deadlock_timeout_long 50000000 
deadlock_timeout_short 10000 
delayed_insert_timeout 300 
innodb_flush_log_at_timeout 1 
innodb_lock_wait_timeout 45 
innodb_rollback_on_timeout OFF 
interactive_timeout 1800 
lock_wait_timeout 600 
net_read_timeout 7200 
net_write_timeout 7200 
rpl_semi_sync_master_timeout 10000 
slave_net_timeout 30 
sqlasyntimeout 10 
sqlasynwarntimeout 3 
thread_pool_idle_timeout 60 
wait_timeout 1800 
innodb_log_buffer_size 134217728 
max_allowed_packet 1073741824 

なぜMySQLは、この接続を中止しますか?

+0

1つのクエリが30分​​より長く続きましたか? – Drew

+0

@ Drew、servalミニッツのみ。 – Zeyu

答えて

0

これは、オフベースの方法かもしれませんが、ここに行きます。 Communication Errors and Aborted Connectionsを受ける権利MySQLのマニュアルページから:

クライアントが正常に接続が、後で不適切または 終了し切断した場合、サーバはAborted_clients状態 変数をインクリメントし、エラーログに中止された接続メッセージをログに記録します。 原因は、次のいずれかのことができます。

  • クライアントプログラムが終了前にmysql_close()を呼び出していませんでした。

  • クライアントが サーバーへのリクエストを発行することなく、よりwait_timeoutまたは interactive_timeout秒眠っていました。第6.1.5項「サーバー・システム変数」を参照してください。

  • クライアントプログラムは、データ転送の途中で突然終了しました。中止された接続または中止さ クライアントとの問題のため

その他の理由:

  • max_allowed_packet変数の値が小さすぎるか、クエリを使用して、mysqldのために割り当てられているよりも 多くのメモリを必要とします。セクションB.5.2.10、 「パケットが大きすぎます」を参照してください。

かかわらずmax_allowed_packetあなたが表示またはそれを増やすことで試みているのは、私はセグメントにそれをチャンキングでの試みで再訪戦略を示唆しています。

+0

このページが表示される前に、max_allowed_pa​​cketが最大値1gに設定されています。 – Zeyu

+0

この接続はデータ転送であり、アイドル状態ではありません。その後、クライアントはIOExceptionを受け取ります:Peer!による接続リセットは、クライアントが接続を中止するのではなく、接続を最初に中止することを意味します。 – Zeyu

+0

おそらく、*またはクエリがmysqld *に割り当てた以上のメモリを必要とするかもしれません。チャンクダウン – Drew

関連する問題