SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.11.2011 01:54:24

mikeac
Участник
Зарегистрирован: 17.10.2011
Сообщений: 7

Скорость LOAD DATA LOCAL INFILE

Здравствуйте
у меня есть txt файл размером порядка 700мб , который заливается в бд и строит индексы порядка за 8 минут...

конфиг
skip-external-locking
myisam_repair_threads=8
myisam_max_sort_file_size=4G
key_buffer_size = 4G
max_allowed_packet = 1M
table_open_cache = 512
table_cache=512
sort_buffer_size = 32M
read_buffer_size = 32M
read_rnd_buffer_size = 64M
myisam_sort_buffer_size = 2G
thread_cache_size = 8
query_cache_size = 128M
thread_concurrency = 8

SQL команда
LOAD DATA LOCAL INFILE 'f:\\test.txt' INTO TABLE `test` CHARACTER SET cp1251 FIELDS TERMINATED BY  ';' ENCLOSED BY  '"' LINES TERMINATED BY  '\r\n' (name,@dummy,@dummy,dopname,nametov);

при изучении на локальном компьютере поведения mysql выяснилось что большая половина времени уходит на построение индексов.

в то время когда на MSSQL это все занимает чуть меньше трех минут.

Вопрос: можно ли догнать и перегнать показатели MSSQL при импорте файла размером 700мб?


т.е. возможно ли использование команды LOAD DATA INFILE при одновременном строительстве индексов в момент заливки файла?

Отредактированно mikeac (25.11.2011 01:58:03)

Неактивен

 

#2 04.12.2011 23:49:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Скорость LOAD DATA LOCAL INFILE

У MySQL в этой части есть узкое место: индексы создаются последовательно в один
поток. Хорошего способа создавать индексы в несколько потоков нет.

Я правильно понимаю, что Вы делаете
ALTER TABLE ... DISABLE KEYS;
LOAD DATA ...;
ALTER TABLE ... ENABLE KEYS?

Если нет — попробуйте отключать индексы перед вставкой: как правило
построение целого индекса требует меньше времени, чем обновление уже
существующих.

Неактивен

 

#3 09.02.2012 23:23:32

mikeac
Участник
Зарегистрирован: 17.10.2011
Сообщений: 7

Re: Скорость LOAD DATA LOCAL INFILE

paulus написал:

У MySQL в этой части есть узкое место: индексы создаются последовательно в один
поток. Хорошего способа создавать индексы в несколько потоков нет.

Я правильно понимаю, что Вы делаете
ALTER TABLE ... DISABLE KEYS;
LOAD DATA ...;
ALTER TABLE ... ENABLE KEYS?

Если нет — попробуйте отключать индексы перед вставкой: как правило
построение целого индекса требует меньше времени, чем обновление уже
существующих.

благодарю Вас за ответ, у меня не происходит отключение индексов, а просто командой LOAD DATA идет импорт.

действительно из 8 минут импорта 700мб файла, половина времени уходит на постройку индексов (и они нужны),
решения по уменьшению импорта файла - вопрос как я понял уже к разработчикам? smile

а учитывая что отец всеми нами любимой базы продолжает вести проект под новым именем - вопрос нужно задавать ему?

какие у меня есть шансы что это вообще решаемо, ответьте пожалуйста?

ps. мне не критично, просто хочется скорости

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson