【发布时间】:2012-04-09 14:26:03
【问题描述】:
我在使用多个并发 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
连接器 Java v5.1.12。
操作系统:Centos 5.6 64 位(Linux
2.6.18-238.12.1.el5)
【问题讨论】:
-
我还建议使用最新版本的 Infobright 4.0.6,因为在 LOAD DATA 命令中进行了一些巨大的改进,具有更好的线程以及添加行级错误检查以提供支持。
标签: java mysql database deadlock infobright