複数の同時LOAD DATA INFILEコマンドを使用するとデッドロックが発生します。Infobright/MySQLロードデータinfileデッドロック
フラットファイルをInfobrightデータベースにロードするJavaベースのETLツール(InfobrightはMySQLベースの列データベース)を開発しました。処理の最後に、ロードはLOAD DATA INFILEコマンドを使用して実行されます。このプロセスは複数のテーブルへのロードを処理することができ、各ロードはパフォーマンス上の理由から別々の接続を使用して並列に実行されます。
このツールを複数のファイルに対して並列に実行するbashスクリプトも書いてあります(処理の時間を節約するために、LOADコマンドはとにかくDBサーバーによってシリアル化されるため)。つまり、私は同じターゲットテーブル(異なるプロセスから)に対して複数のLOAD DATAコマンドを持つことができます。
私が期待していたのは、LOAD DATAコマンドがシリアル形式で実行されることですが、最終的に終了するということでした。しかし、私はデッドロックを経験しています。 "show processlist"を実行すると、すべてのLOAD DATAコマンドが "System locked"状態になっていることがわかります。
誰もこのような問題を経験して解決策を見つけましたか?
詳細: 私はInfobright Enterprise Edition v3.5.2を使用しています。これは
MySQL 5.1.40に基づいています。 私のETLアプリケーションはjava 1.5.0_08とMysqlを使用します
Connector Java v5.1.12。 OS:CentOS 5.6 64ビット(Linux 2.6.18-238.12.1.el5)
さらに、スレッドレベルの向上とサポートのための行レベルのエラーチェックを追加することで、LOAD DATAコマンドで行われたいくつかの巨大な拡張のため、Infobright 4.0.6の最新版を使用することをお勧めします。 –