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