Лучший инструмент для настройки производительности MySQL? [закрыто]

Какой самый лучший, самый удобный для пользователя инструмент производительности для MySQL? Я хотел бы помочь с определением горлышка бутылки моей установки. Проблема в операторах SQL, переменных настроек или в чем-то еще?

12.12.2008 08:40:43
3 ОТВЕТА
РЕШЕНИЕ

Плохая новость: для этого есть инструменты с графическим интерфейсом, но это квалифицированная и разнообразная работа. Таким образом, они не охватывают все, скорее всего, вам нужно будет использовать операторы командной строки / SQL, и т.д., чтобы помочь. Я действительно использовал только инструменты командной строки. Я дам краткий обзор вещей, которые я знаю / использовал:

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

Убедитесь, что MySQL Query Cache настроен и работает, и выделите ему немного больше оперативной памяти, если можете, и убедитесь, что ваши важные запросы не делают ничего, что мешает MySQL кешировать их. Например, использование функции NOW () в запросах делает это - по очевидным причинам - NOW меняется каждую секунду! Вместо этого вы можете поместить метку времени в sql и использовать время до ближайшей минуты / часа / дня (самый большой период, который вы можете выбрать), чтобы mysql мог получить некоторое преимущество в кэшировании.

Чтобы начать оптимизацию: вставьте «EXPLAIN» перед select, чтобы увидеть, как выполняется запрос, и показать, как его улучшить. Научитесь интерпретировать вывод: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html Вы часто сможете добавлять новые индексы / добавлять столбцы к существующим, чтобы улучшить ситуацию. Но вы также столкнетесь со временем, когда запросы должны быть реструктурированы.

Чтобы повысить производительность с MySQL (при условии, что вы еще не знаете, в чем заключается проблемный запрос), нужно проверить журнал медленных запросов - он записывает в файл все запросы, занимающие более x секунд.

Обзор, включая конфигурацию, если он не регистрируется, находится здесь: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - я также обнаружил, что установка long_query_time для 0 в течение дня или около того, чтобы все запросы регистрировались здесь с учетом затраченного времени, это полезный способ получить представление о том, куда точно идет производительность. Но я бы не пошел туда немедленно! И не оставляйте это включенным, журналы могут стать массивными.

После нескольких дней регистрации я обнаружил mysqlsla (анализатор медленных журналов mysql) здесь: http://hackmysql.com/mysqlsla - хороший инструмент.

Это может сделать больше, чем просто медленный анализ журнала запросов - прочитайте руководство. Но, чтобы объяснить, что это делает для медленных журналов: медленный журнал запросов может содержать много данных, поэтому может быть трудно определить, какие запросы являются самыми дорогими в целом - например: фактор, сколько раз они выполняются и когда два запроса фактически одинаковы с другим идентификатором в предложении where.

MySQL sla делает все это для вас. Он проходит через журнал и может группировать одинаковые запросы / иметь разные значения в предложениях where. Затем он представляет (по умолчанию) топ-10 запросов с точки зрения общего времени выполнения - что часто имеет некоторые неожиданности, но обычно является наиболее продуктивной отправной точкой - возьмите самый дорогой запрос и используйте для него EXPLAIN и посмотрите, сможете ли вы улучшить Это.

Некоторые запросы занимают много времени и не могут быть легко улучшены. В этом случае, вы можете получить данные другим способом или хотя бы кэшировать их? Вы даже можете обнаружить, что изменение схемы БД необходимо. Точно так же некоторые запросы могут быть в верхней части вывода mysqlsla, потому что вы часто их запускаете (особенно верно, если для long_query_time установлено значение 0), даже если они выполняются довольно быстро. Может быть, пришло время добавить кеширование в ваше приложение?

http://www.maatkit.org/ также выглядит многообещающе - никогда не использовал его, но инструмент mk-query-profiler должен быть полезен для дальнейшего изучения причин медленных запросов.

Также совершенно отдельная вещь: страница «status» в PHPMYADMIN (или вы можете выполнить все запросы для генерации этой информации ....) - она ​​выделяет вещи, которые, по ее мнению, могут быть плохими, красным и может помочь вам Посмотрите, где вы можете получить выгоду от распределения системных ресурсов. Я не очень много знаю об этом - мой подход всегда заключался в том, чтобы, если что-то было красным и выглядело плохо, пойти и прочитать об этом и решить, важно ли это и нужно ли что-то делать (обычно это означает выделение большего количества ресурсов для MySQL). изменив конфиг).

Недавно я обнаружил, что запуск SHOW PROCESSLIST также может быть полезен на страдающем сервере. Несмотря на то, что он дает вам только живую (точнее, моментальный снимок) информацию, он может помочь вам понять, что происходит в данный момент времени, особенно если вы обновляете несколько раз и наблюдаете за изменениями. Недавно я заметил сервер, использующий каждое доступное соединение MySQL для выполнения идентичного запроса с использованием этого метода. Конечно, это было бы в медленном журнале запросов, но это действительно быстрый и очевидный способ узнать, что случилось.

79
9.11.2009 23:32:52
Ничего себе ... забавно видеть, что это было принято после почти года :)
benlumley 9.11.2009 23:28:21
+1 за объяснение, очень помогите по моему проекту здесь!
rafa.ferreira 13.05.2011 18:26:14
Насколько я понимаю, mysqlsla и maatkit слились в percona toolkit. Тем не менее, хорошим средством просмотра журнала медленных запросов mysql является веб-сайт github.com/benkaiser/mysql-slow-query-log-visualizer
Bachor 17.05.2017 08:17:23
Я думаю, что если вам нужно что-то мощное и удобное, Navicat Monitor для MySQL / MariaDB - это то, что вам нужно. Он имеет анализатор запросов, специально предназначенный для устранения запаздывающих запросов, взаимоблокировок и т. Д. Он также может отслеживать практически любые другие метрики, которые вы можете себе представить, включая информацию о сервере, такую ​​как нагрузка на сервер, доступность, использование диска, сетевой ввод-вывод, блокировки таблиц и т. Д. Вы должны попробовать. Я думаю, что это сделает вашу жизнь намного проще.
Rob Gravelle 3.11.2018 15:56:22

ОБЪЯСНИТЕ, твой друг. Помимо этого, вы должны полагаться на смесь специальных инструментов, тестирования и инструментов ОС, чтобы точно увидеть, что происходит.

Многое можно эффективно увидеть либо из инструментов ОС (хорошо для определения того, связана ли ситуация с процессором или вводом-выводом), либо из различных переменных, которые можно увидеть в самом MySQL (показать глобальные переменные, показать состояние innodb движка и т. Д.).

Я чувствую, что действительно важно иметь ЭКОЛОГИЧЕСКОЕ ИСПЫТАНИЕ НА ВЫПОЛНЕНИЕ. Получите производственную базу данных с производственной нагрузкой (с использованием имитации нагрузки), работающей на оборудовании промышленного уровня в вашей лаборатории (дорого, но необходимо).

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

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

По сути, при настройке производительности обычно рассматриваются три области в следующем порядке:

  • Структура вашей базы данных (структура таблицы, индексы и т. Д.)
  • Запросы
  • Настройка параметров сервера

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

Не стоит недооценивать важность сокращения объема работы, которую должен выполнять сервер - всегда лучше использовать меньшие поля, меньше строк, меньше столбцов и т. Д.

7
13.12.2008 07:00:31

Я обнаружил, что MONyog - БОЛЬШАЯ помощь, когда у меня был страдающий MySQL-сервер.

Это веб-система, которая анализирует вашу систему 24/7 и дает вам достойные предложения по улучшению значений системных переменных, размеров кэша и т. Д.

Он также имеет встроенную функцию медленного анализа запросов типа MySQLsla.

Жаль, что это не бесплатно. Скриншот MONyog: Текущие подключения

MONyog - MySQL Monitor и Advisor имеет новый пользовательский интерфейс, который мне нравится, мне нравятся эти функции в основном:

  1. Найти проблему SQL - используя медленный журнал, общий журнал, PROCESSLIST и через PROXY
  2. Оповещение о критических состояниях, таких как: сервер не работает, слишком много подключений и т. Д.
  3. Периодически проверяйте собственный результат запроса
  4. Мониторинг репликации

    и т.д .... Полный список возможностей

4
22.11.2018 18:04:03