2008-12-12 3 views
40

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

ответ

72

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

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

Убедитесь, что MySQL Query Cache настроен и работает и дает ему немного больше оперативной памяти, если это возможно, и убедитесь, что ваши важные запросы не делают ничего, что предотвращает кеширование 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

Wow ... забавляли, чтобы увидеть это было принято после того, как почти год :) – benlumley 2009-11-09 23:28:21

6

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

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

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

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

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

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

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

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

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

4

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

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

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

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

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

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

    и т.д .... Complete feature list

Смежные вопросы