Взаимоблокировка файла загрузки данных Infobright/MySQL

Я столкнулся с тупиковой ситуацией при использовании нескольких одновременных команд 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)


person Filip    schedule 09.04.2012    source источник
comment
Я бы ТАКЖЕ предложил использовать последнюю версию Infobright 4.0.6 из-за некоторых значительных улучшений, сделанных в командах LOAD DATA с улучшенной многопоточностью, а также с добавлением проверки ошибок на уровне строк для поддержки.   -  person Craig Trombly    schedule 23.04.2012


Ответы (1)


Убедитесь, что в вашей системе достаточно памяти для запуска процесса ETL и сценария. В результате внешнего расследования с вами было установлено, что вы работаете на машине с оперативной памятью всего 1 ГБ ([1002M/498M, 1/0.00]), что очень мало. Попробуйте провести тестирование на обычном настольном компьютере (> 4 ГБ ОЗУ), а также на компьютере производственного класса (> 32 ГБ ОЗУ).

person user1329252    schedule 12.04.2012
comment
Пожалуйста, не ставьте подписи в своих сообщениях. - person Aaron; 12.04.2012