在文件命令中使用多个并发加载数据时,我遇到了死锁。以下是背景信息:
我已经开发了一个基于Java的ETL工具,它可以将平面文件加载到Infobright数据库中(Infobright是一个基于MySQL的列式数据库)。在处理结束时,使用load DATA INFILE命令执行加载。此过程可以处理到多个表中的加载,并且每个加载都使用单独的连接并行完成(出于性能原因)。
我还编写了一个bash脚本,它为多个文件并行运行此工具(以节省处理部分的时间,因为加载命令无论如何都会被DB服务器序列化)。这意味着我可以对同一目标表(来自不同的进程)使用多个LOAD DATA命令。
我所期望的是,LOAD DATA命令将以串行方式执行,但最终会完成。然而,我遇到了一个死锁。如果我执行一个"show processlist“,我可以看到我所有的LOAD DATA命令都处于”系统锁定“状态。
以前有没有人遇到过这样的问题并找到了解决方案?
详细信息:我使用的是Infobright Enterprise Edition v3.5.2。这是基于
MySQL 5.1.40. My ETL application uses java 1.5.0\_08 and MysqlConnector Java v5.1.12. OS: Centos 5.6 64 bit (Linux 2.6.18-238.12.1.el5)发布于 2012-04-12 21:48:03
请确保您的系统上有足够的内存来运行ETL进程和脚本。根据对您的外部调查,确定您正在运行的计算机只有1 1GB (1002M/498M,1/0.00),这是非常低的。尝试在普通台式机(>4G内存)和生产级机器(>32G内存)上进行测试。
https://stackoverflow.com/questions/10074687
复制相似问题