Я столкнулся с тупиковой ситуацией при использовании нескольких одновременных команд LOAD DATA INFILE. Вот фон:
Я разработал инструмент ETL на основе Java, который загружает плоские файлы в базы данных 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)