LINUX.ORG.RU

[mysql][engine][выбор] Какой engine выбрать для задачи?

 ,


0

0

Есть большая БД (в сумме около 150 млн. записей), которую скрипты обрабатывают определенным образом.

Так вот, сейчас все это работает на Mysql 5.1 в MyISAM-таблицах и обрабатыватся последовательно (сначала отрабатывает одна задача, потом следующая), хотя можно вполне некоторые задачи пускать параллельно, но из-за TABLE LOCK'во это невозможно (тормозит). Длится процесс сейчас около 2х суток.

Внимание, вопрос: можно ли добится увеличения скорости за счет использования другого движка (InnoDB) и параллельной обработки?

Или может кто еще что посоветует если сталкивались? А то нет времени тестировать совершенно.

можно. Ставь innodb и смотри что будет. Тока учти что на конвертацию таблиц потребуется время(может быть даже часы и дни, зависит от многих причин). В течение этого времени таблица будет залочена.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Попробовал innodb - на нескольких потоках так же тормозит. Сейчас хочу попробовать множество небольших таблиц MyISAM, т.к. они самые быстрые все же и если отдать каждому потоку по таблице, это поможет избавится от локов.

it-partizan
() автор топика
Ответ на: комментарий от it-partizan

> Попробовал innodb - на нескольких потоках так же тормозит. нуу, надо с умом переводить. Не всё подряд а те таблицы в которые обновляются во время селектов. Короче, на mysql.com всё написано.

> отдать каждому потоку по таблице, это поможет избавится от локов. это как?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Это так:

Вместо одной большой таблицы table с 100 млн записями создаем 100 таблиц table_1...100, в которые раскладываем данные из table.

Потом запускаем по 10-20 процессов (можно больше, зависит от железа), которые обрабатывают эти маленькие БД. По окончании собираем все в одну.

Это позволяет обойти TABLE LOCK'и и сохранить скорость работы

it-partizan
() автор топика
Ответ на: комментарий от it-partizan

Я к этому же выводу пришел постепенно. Если взять какое-то поле из большой таблицы, сделать в ещё одной таблице индекс вида:

значение поля: имя таблицы

и затем делать выборку не в один запрос, а 2

1) Получаем имя таблицы по значению индекса 2) Делаем выборку из нужной таблицы по доп. условию

Когда с таблицей работает большое количество клиентов - увеличение производительности ощутимо: сразу перестают по 100 секунд висеть запросы в show processlist со тратусом LOCKED.

r_asian ★☆☆
()
Ответ на: комментарий от it-partizan

разнос таблиц это щардинг. Эффективное средство если есть возможность разнести независимые данные по разным серверам.

> сразу перестают по 100 секунд висеть запросы в show processlist со тратусом LOCKED.

тот случай когда innodb более чем уместен.

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.