当使用多个并发LOAD DATA INFILE comamnds时,我遇到了死锁。这是背景:
我开发了一个基于Java的ETL工具,它将平面文件加载到Infobright数据库中(Infobright是一个基于MySQL的柱状数据库)。在处理结束时,使用LOAD DATA INFILE命令执行加载。此过程可以处理加载到多个表中,并且每个加载都是使用单独的连接并行完成的(出于性能原因)。
我还编写了一个bash脚本,它为多个文件并行运行这个工具(为了节省处理部分的时间,因为DB服务器无论如何都会序列化LOAD命令)。这意味着我可以为同一目标表(来自不同进程)提供多个LOAD DATA命令。
我所期待的是LOAD DATA命令将以串行方式执行,但最终会完成。但是,我遇到了僵局。如果我执行“show processlist”,我可以看到我的所有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 :(得分:0)
请确保系统上有足够的内存来运行ETL过程和脚本。根据您的外部调查,确定您在仅有1GB RAM([1002M / 498M,1 / 0.00])的机器上运行,该机器非常低。尝试在常规桌面类机器(> 4G的RAM)上以及生产类机器(> 32G的RAM)上进行测试。