我在使用多个并发 LOAD DATA 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)