Вопросы об улучшении производительности параллельной вставки и чтения данных Mysql

Основная информация: моя база данных Mysql использует таблицы TokuDB, InnoDB, MyIsam.

Информация о сервере: 16 ядер, 64 ГБ ОЗУ, CentOS 6.2, MySQL v 5.5.

Процесс: 1. Импорт больших объемов данных из одного текстового файла в одну таблицу TokuDB. 2. Выберите данные, присоединившись к другой таблице.

Когда процессы 1 и 2 выполняются одновременно, вся скорость работы будет намного ниже.

Кто-нибудь знает конкретную причину?

Есть предложения по улучшению?


person Nick Ren    schedule 12.07.2012    source источник
comment
Вероятно, ударил диск в двух разных местах...   -  person lc.    schedule 12.07.2012
comment
Я согласен. Независимо от скорости и «низкой» задержки жесткого диска, в двойном процессе ему будет постоянно необходимо переключать чтение между одной частью диска и другой. Если этот процесс импорта и объединенного выбора происходит часто, вы можете подумать о добавлении выделенного SSD-диска для вашего SQL-сервера. Поскольку нет диска и головки чтения/записи, задержка практически равна нулю.   -  person Battle_707    schedule 12.07.2012
comment
Можете ли вы дать более подробную информацию о вашем эксперименте? Было бы полезно понять вашу схему, как вы загружаете данные, как выглядят ваши запросы на выборку и т. д.   -  person tmcallaghan    schedule 19.07.2012
comment
Привет, это не тестовый проект, который я сделал сам. Вся схема основана на данных секвенирования генома человека, которые здесь сложно описать. У нас был своего рода конвейер для непрерывной генерации большого количества данных (файлов txt) в одном месте на диске, а затем загрузки сгенерированных данных в нашу базу данных. Между тем, у нас был инструмент анализа, необходимый для получения данных из той же БД (просто простой объединенный запрос sql). Проблема в том, что если загрузка и извлечение данных одновременно, это сильно замедлит скорость вставки...   -  person Nick Ren    schedule 20.07.2012


Ответы (2)


Разделите ввод-вывод на разные диски/массивы. Наличие всех операций ввода-вывода в одном разделе/массиве приводит к ужасной производительности. Если возможно, инвестируйте в выделенный массив дисков, такой как IBM DS3524 или HP Smart Array. Подключение сервера БД через Fibre Channel (или еще лучше SAS2) даст вам невероятный прирост производительности. Несколько лет назад я перестал ставить много дисков на сам сервер. Я получаю в 5 раз больше производительности с MySQL на массиве дисков, чем с диском на сервере.

person gmm    schedule 12.07.2012

в tokudb файл загрузки данных работает намного быстрее при импорте в пустые таблицы (особенно если у вас есть неинкрементный первичный ключ или уникальный индекс)

person dan    schedule 10.04.2015