MySQL: большая нагрузка на таблицу. Какие настройки сделать?
Здравствуйте!
Есть сервер: 4-х ядерный CPU, 4GB ОЗУ
Есть одна таблица примерно 7 миллионов записей. Вес: 25Gb. Тип: MyISAM.
В чем суть: на сервере стоит Sphinx, который выдает найденные id к этой таблице.
Запросы к таблице простые: SELECT id, street, name FROM table WHERE id IN (3,2,5,1,4) ORDER BY FIELD(id, 3,2,5,1,4)
На эту таблицу планируется делать много запросов по выборке id (около 1 млн. в день).
Посоветуйте, как оптимизировать конфигурационный файл mysql для более быстрой выборки.
Может быть, есть настройки и выставление приоритетов только к этой таблице или что-нибудь ещё?
В оптимизации MySQL я не очень хорошо разбираюсь. Прошу совета.
для начала преобразуйте в InnoDB, всегда нужно смотреть вследствие чего возникает нагрузка и действовать в соответствии с обстоятельствами, есть ли запросы, которые изменяют таблицу...
также хорошей оптимизацией будет рост в ширину, т.е. настройка репликации для снижения нагрузки на одну СУБД
Таблица расти не будет. Запросов нет, которые изменяют таблицу. Есть только выборка id-шников. Все, что нужно сейчас мне - это просто оптимизировать my.cnf файл.
titronfan: очень сложно сказать наверняка какие именно действия приведут к росту производительности. Есть такие случаи, когда целесообразнее удалить индекс, чтобы повысить скорость работы, а во многих других случаях очень сильно влияют наличие правильных индексов... анализируйте запросы, которые выполняют выборку из вашей таблицы, старайтесь объединить в один индекс два и более столбца, т.к. у вас обновления данных нет, то индексов можно больше добавить
нет универсального решения, всегда надо смотреть на задачу и анализировать... даже с одной и той же таблицей могут быть разные решения для разных задач, поэтому в каждом отдельном случае нужно смотреть причины и методы оптимизации
в инноДБ НЕ конвертить! Это только замедлит выгрузку данных, майисам быстрее работает с селектами, а преимущество инноДБ - в поддержке транзакций, что делает более надёжной работу с добавлением и изменением записей.
1000000 / (60*60*24) = 11.5 запроса в секунду. Вам уже не хватает скорости или Вы на будущее? Если на будущее - зря, преждевременная оптимизация почти всегда плохо. Проблемы нужно решать по мере поступления. Андрей Мохов посоветовал перевести на InnoDB - по моему зря, если у Вас нет запросов на вставку и обновления и Вам не нужны транзакции, то лучше оставить MyISAM - он быстрее, но менее надежен, так что где-то должен всегда лежать свежий бэкап.
Да, MyISAM часто ломается - это есть такое. Но выборка вроде работает немного быстрее как все говорят. Одной из настроек в MySQL думаю добавить опцию "low-priority-updates" - может быть она ускорит выборку.
titronfan: да ни разу сама по себе майисам у меня не сломалась
а при ситуациях когда вырубают сервер хард ресетом или место кончилось иноодб сыпется ни чуть не лучше чем май исам