0

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

4

1 に答える 1

0

ETLプロセスとスクリプトを実行するのに十分なメモリがシステムにあることを確認してください。外部からの調査の結果、RAMが1GB([1002M / 498M、1 / 0.00])しかなく、非常に低いマシンで実行していることが判明しました。通常のデスクトップクラスのマシン(> 4GのRAM)と、実稼働クラスのマシン(> 32GのRAM)でテストしてみてください。

于 2012-04-12T13:48:03.387 に答える