Назад | Перейти на главную страницу

Есть ли какое-либо решение для серверов MySQL, чтобы они не перестали отвечать при выполнении больших запросов?

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

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

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

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

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

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

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