2012-04-09 86 views
0

我在使用多個併發LOAD DATA INFILE comamnds時遇到死鎖。這裏是背景:Infobright/MySQL加載數據infile死鎖

我開發了一個基於Java的ETL工具,它將平面文件加載到Infobright數據庫中(Infobright是基於MySQL的柱狀數據庫)。在處理結束時,使用LOAD DATA INFILE命令執行加載。該進程可以處理加載到多個表中,並且每個加載都使用單獨的連接並行完成(出於性能原因)。

我也寫過一個bash腳本,它可以並行運行多個文件(爲了節省處理部分的時間,因爲LOAD命令將由數據庫服務器序列化)並行運行此工具。這意味着我可以爲同一個目標表(來自不同的進程)提供多個LOAD DATA命令。

我期待的是LOAD DATA命令將以串行方式執行,但最終會結束。但是,我正在經歷一場僵局。如果我執行「顯示進程列表」,我可以看到我的所有LOAD DATA命令都處於「系統鎖定」狀態。

有沒有人遇到過這樣的問題,並找到解決方案?

詳細信息: 我使用的是Infobright Enterprise Edition v3.5.2。這是基於
MySQL 5.1.40。 我的ETL應用程序使用java 1.5.0_08和Mysql
Connector Java v5.1.12。 操作系統:Centos 5.6 64位(Linux 2.6.18-238.12.1.el5)

+0

我還建議使用Infobright 4.0.6的最新版本,因爲在LOAD DATA命令中進行了一些巨大的增強,具有更好的線程以及添加行級錯誤檢查支持。 – 2012-04-23 19:25:25

回答

0

請確保您的系統上有足夠的內存來運行ETL過程和腳本。從你的外部調查來看,你確定你只在一臺只有1GB RAM的機器上運行([1002M/498M,1/0.00]),這是非常低的。嘗試在普通桌面類機器上(> 4G內存)以及生產類機器上(> 32G內存)進行測試。

+0

請不要在你的帖子中包含簽名。 – Aaron 2012-04-12 16:27:43