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

Как оптимизировать сервер MySQL для одновременного выполнения множества запросов

Я был еще новичком в этом сервере, у меня есть хостинг-сервер, спецификация DUAL CORE CPU, 4GB RAM, 500GB HDD.

Я использую ОС Centos 5 64bit, Kloxo Panel, Apache Web Server и MySQL sevrer.

У меня проблема, служба MySQL. Я часто внезапно умираю один, особенно когда я пытаюсь выполнить до 10-20 раз команду mysql_query одновременно, но я вижу только статус неиспользуемой оперативной памяти. Память <512 МБ, 3 ГБ осталось. Как оптимизировать мой сервер MySQL, чтобы он мог выполнять множество запросов и последовательно, например 100 запросов. Пожалуйста помоги. Спасибо

В вашем вопросе нет подробностей, но вот мой общий взгляд на MySQL.

  • Если ваши таблицы находятся в формате MyISAM, то рабочая нагрузка, смешанная с длительными операциями SELECT в сочетании с большим количеством операций записи, наверняка убьет ваш сервер MySQL. Или, по крайней мере, сделать его вееееееееери медленным.

  • «Как настроить MySQL» - это совсем другое дело с разными типами рабочих нагрузок. У вас есть много-много недолговечных соединений / запросов, что-то вроде тысяч запросов на выборку в секунду, но с очень простой структурой таблиц и хорошо сделанными индексами? Или не столько запросов и одновременных подключений, сколько очень тяжелые и сложные выборки? Оптимизация для них требует совершенно других настроек.

  • Отсутствие правильных индексов часто является причиной неправильного поведения MySQL. Вы уверены, что у вас есть все необходимые индексы?

  • MySQL Workbench может быть очень полезным инструментом при устранении неполадок MySQL. Дайте ему поработать, посмотрите, какие запросы застревают на длительный период. Кроме того, конечно, удобно включить журнал медленных запросов MySQL, поэтому он использует mysqltuner.

  • При ориентированной на запись рабочей нагрузке кеш запросов MySQL иногда может быть вредным. Простые случайные выборки SELECT не сильно помогут, а постоянное восстановление недействительного кеша - это просто еще один бесполезный удар производительности.

  • На уровне приложения memcached может вам очень помочь, поскольку значительно снижает нагрузку на сервер базы данных.

Обычно на базовом уровне вы должны сделать 2 шага;

  1. Оптимизируйте структуры запросов, чтобы максимально использовать индексы, кеши и функции mysql
  2. Сконфигурируйте MySQL так, чтобы оптимизировать ваши данные и типы запросов.

На обоих этапах мало что можно сравнить с тем, чтобы потратить некоторое время на то, чтобы зайти в Интернет и почитать об оптимизации запросов и настройке mysql для повышения производительности.

Однако как для 1, так и для 2 вы можете использовать Набор инструментов Percona чтобы посоветовать вам, как улучшить текущую ситуацию. Для начала убедитесь, что вы включили "МЕДЛЕННЫЙ журнал запросов" в /etc/my.cnf вот так;

# Here you can see queries with especially long duration
log_slow_queries        = /var/lib/mysql/slow.log

Затем вы можете изучить /var/lib/mysql/slow.log файл для особо плохих запросов, например;

 pt-query-advisor /path/to/slow-query.log

который предоставит довольно подробный вывод по оптимизации этих медленных запросов на вашем сервере. Вы также можете использовать pt-переменная-советник чтобы просмотреть любые параметры, которые вам может потребоваться изменить для повышения скорости сервера.