Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Как только у вас есть несколько дней регистрации, я нашел mysqlsla (mysql slow log analyzer) здесь: http://hackmysql.com/mysqlsla является хорошим инструментом.

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

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

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

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

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

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

Ответ 2

EXPLAIN - ваш друг. Помимо этого, вы должны полагаться на смесь специальных инструментов, тестов и инструментов ОС, чтобы точно видеть, что происходит.

Многие вещи можно увидеть эффективно либо из инструментов ОС (полезно для определения, является ли ситуация ЦП или IO привязана), либо к различным переменным, которые можно увидеть в самой MySQL (показать глобальные переменные, показать статус innodb и т.д.)).

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

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

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

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

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

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

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

Ответ 3

Я нашел MONyog, чтобы быть БОЛЬШОЙ справкой, когда у меня был страшный сервер mysql.

Его веб-система, которая анализирует вашу систему 24/7 и дает вам достойные рекомендации по лучшим значениям системных переменных, размерам кеша и т.д.

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

Жаль, что это не бесплатно. enter image description here

Мониторинг и советник MONYOG-MySQL имеет новый пользовательский интерфейс, который мне нравится, мне больше нравятся эти функции:

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

    и т.д. Полный список функций