2012-04-09 14 views
0

複数の同時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)

+0

さらに、スレッドレベルの向上とサポートのための行レベルのエラーチェックを追加することで、LOAD DATAコマンドで行われたいくつかの巨大な拡張のため、Infobright 4.0.6の最新版を使用することをお勧めします。 –

答えて

0

ETLプロセスとスクリプトを実行するのに十分なメモリがシステムにあることを確認してください。あなたとの外部調査から、1GBのRAM([1002M/498M、1/0.00])しか使用していないマシンで実行していると判断されました。通常のデスクトップクラスマシン(4G以上のRAM)、および実動クラスマシン(32G以上のRAM)でテストを試してみてください。

+0

あなたの投稿に署名を含めないでください。 – Aaron