Какое-нибудь решение для MySQL Server, чтобы не делать их не отвечающими при выполнении больших запросов?

Я запускаю несколько серверов mysql для нескольких клиентов, есть общая проблема, которую я привык видеть. Когда я запускаю большой запрос к большим базам данных, например:

У меня есть таблица MyISAM с несколькими полнотекстовыми индексами и около 8,7 миллионов записей, если я выполняю поиск в неиндексированном столбце, служба mysql перестает отвечать на запросы до тех пор, пока не будет получен результат (это может занять 30 минут).

Как избежать предоставления сервиса MySQL без ответа? Например, в любой ОС вы можете установить приоритет процесса, чтобы гарантировать, что каждый процесс получает ресурсы для запуска. Как мне это сделать в MySQL?

3 ответа

Там может быть несколько решений вашей проблемы. Вы можете попробовать настроить параметры (разрешить mysql использовать больше оперативной памяти, убедиться, что он не поменяется местами, добавить индексы) или изменить аппаратное обеспечение (больше оперативной памяти, более быстрые диски).

Другой вариант - настроить подчиненный MySQL для выполнения тяжелых запросов на чтение. Таким образом, вы все равно можете обновить мастер запросами на чтение + запись, в то время как ведомый вычисляет нужный вам результат.

Вы ДОЛЖНЫ иметь индексы для каждого столбца, участвующего в поиске. При поиске в столбце, который не имеет индекса, выполняется поиск, если он выполняется с помощью "файловой сортировки", которая не очень эффективна для FTS.

Вы не должны выполнять тяжелые запросы чтения на master, особенно в производственном процессе. Перейдите к настройке репликации или кластера MySQL и направьте свои запросы на узлы без записи.

Другие вопросы по тегам