複数のLOADDATAINFILEコマンドを同時に使用すると、デッドロックが発生します。背景は次のとおりです。
フラットファイルをInfobrightデータベースにロードするJavaベースのETLツールを開発しました(InfobrightはMySQLに基づく列型データベースです)。処理の最後に、LOADDATAINFILEコマンドを使用してロードが実行されます。このプロセスは複数のテーブルへのロードを処理でき、各ロードは個別の接続を使用して並行して実行されます(パフォーマンス上の理由から)。
また、このツールを複数のファイルに対して並行して実行するbashスクリプトを作成しました(LOADコマンドはDBサーバーによってシリアル化されるため、処理部分の時間を節約するため)。これは、(異なるプロセスからの)同じターゲットテーブルに対して複数のLOADDATAコマンドを使用できることを意味します。
私が期待していたのは、LOAD DATAコマンドがシリアル方式で実行されるが、最終的には終了するということでした。しかし、私はデッドロックを経験しています。「showprocesslist」を実行すると、すべてのLOADDATAコマンドが「システムロック」状態になっていることがわかります。
誰かが以前にそのような問題を経験し、解決策を見つけたことがありますか?
詳細:Infobright EnterpriseEditionv3.5.2を使用しています。
これはMySQL5.1.40に基づいています。私のETLアプリケーションはjava1.5.0_08と
MysqlConnectorJavav5.1.12を使用しています。OS:Centos 5.6 64ビット(Linux 2.6.18-238.12.1.el5)