2009-02-23 5 views
15

Каковы наилучшие методы оптимизации установки MySQL для обеспечения максимальной производительности при работе с несколькими большими таблицами (> 50 тыс. Записей с общим объемом около 100 МБ на таблицу)? В настоящее время мы изучаем переписывание DelphiFeeds.com (новостной сайт для сообщества разработчиков Delphi) и заметили, что простые операторы обновления могут занимать до 50 мс. Это похоже на много. Существуют ли какие-либо рекомендуемые параметры конфигурации, которые мы должны включить/установить, которые обычно отключены при стандартной установке MySQL (например, чтобы использовать больше ОЗУ для кеширования запросов и данных и т. Д.)?Рекомендации по оптимизации базы данных MySQL

Кроме того, каковы последствия для работы с двигателями хранения данных? Мы планируем работать с InnoDB, но если MyISAM рекомендуется по соображениям производительности, мы можем использовать MyISAM.

+0

Единственная огромная причина пойти с двигателем INNODB - это поддержка транзакций. MyIsam этого не поддерживает. Если вы заботитесь о своей целостности данных (как и следовало :)), просто нет другого пути.нет способа надежной отката sql-последовательности, если вы не используете транзакции и что-то плохое произошло, как отключение питания. – Stann

ответ

16

«Лучший практика» является:

  1. Измерять, изолируя соответствующую подсистему, а также вы можете.
  2. Определите основную причину узкого места. Вы связаны с I/O? ЦП связан? Память связана? Ожидание замков?
  3. Внесите изменения, чтобы устранить причину, которую вы обнаружили.
  4. Измерьте снова, чтобы продемонстрировать, что вы зафиксировали узкое место и на сколько.
  5. Перейдите к шагу 2 и повторите при необходимости, пока система работает достаточно быстро.

Подпишитесь на RSS-канал по номеру http://www.mysqlperformanceblog.com и прочитайте его исторические статьи. Это очень полезный ресурс для мудрости, связанной с производительностью. Например, вы спросили о InnoDB и MyISAM. Их вывод: InnoDB имеет на 30% более высокую производительность, чем MyISAM в среднем. Хотя есть также несколько сценариев использования, в которых MyISAM выдает InnoDB.

Авторы этого блога являются также соавторами "High Performance MySQL" книги, упомянутой Barnett @ Андрей.


Re комментарий от @ ʞɔıu: Как сказать ли вы O оценка I/по сравнению с ЦП по сравнению с памятью, связанной зависит от платформы. Операционная система может предлагать такие инструменты, как ps, iostat, vmstat или top. Или вам может потребоваться сторонний инструмент, если ваша ОС не предоставит его.

В принципе, какой ресурс привязан при 100% использовании/насыщении, вероятно, будет вашим узким местом. Если загрузка вашего процессора низкая, но ваша нагрузка ввода-вывода максимальна для вашего оборудования, то вы привязаны к вводу/выводу.

Это всего лишь один пункт данных. Средство может также зависеть от других факторов. Например, сложный SQL-запрос может выполнять файловое управление, и это заставляет занятые операции ввода-вывода. Должно ли вы бросать на него больше/быстрее оборудования или вы должны перепроектировать запрос, чтобы избежать файлового управления?

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


Джефф Этвуд просто написал хорошую статью блога о поиске узких мест в системе:

+0

Как вы можете определить, связаны ли вы с IO и CPU против памяти? –

7

Идите на покупку «Высокопроизводительной MySQL» от O'Reilly. Это почти 700 страниц на эту тему, поэтому я сомневаюсь, что вы найдете краткий ответ на SO.

5

Это трудно broadbrush вещи, но вид умеренно высокого уровня возможно ,

  • Вам необходимо оценить коэффициенты чтения: записи. Для таблиц с коэффициентами ниже, чем около 5: 1, вы, вероятно, выиграете от InnoDB, потому что тогда вставки не будут блокировать выборки. Но если вы не используете транзакции, вы должны изменить innodb_flush_log_at_trx_commit на 1, чтобы получить производительность поверх MyISAM.
  • Посмотрите на параметры памяти. Значения MySQL по умолчанию очень консервативны, и некоторые ограничения на память могут быть увеличены на 10 или более раз даже на обычном аппаратном обеспечении. Это принесет пользу вашим SELECT, а не INSERT.
  • MySQL может записывать такие вещи, как запросы, которые не используют индексы, а также запросы, которые занимают слишком много времени (определяемые пользователем).
  • Кэш запросов может быть полезен, но вам нужно его измерить (то есть увидеть, сколько он используется). Кактусы могут это сделать; как может Munin.
  • дизайн Применение также имеет важное значение:
    • Слегка кэширования часто надуманные, но низковат наборы данных будут иметь большое значение (то есть кэш жизни нескольких секунд).
    • Не переучивайте данные, которые у вас уже есть.
    • Многоступенчатое хранилище может помочь с большим объемом вставок в таблицы, которые также загружаются. Основная идея заключается в том, что у вас может быть таблица для специальных вставок (INSERT DELAYED также может быть полезна), но пакетный процесс для перемещения обновлений в MySQL оттуда туда, где происходят все чтения. Есть вариации этого.
  • Не забывайте, что перспектива и контекст являются важными, тоже: то, что вы могли бы думать, это долгое время для UPDATE произойдет на самом деле может быть довольно тривиальной, если что «долго» обновление происходит только один раз в день.
4

Есть тонны лучших практик, которые обсуждались ранее, поэтому нет причин повторять их. Для фактического конкретного совета о том, что делать, я попробую запустить MySQL Tuner. Его скрипт perl, который вы можете скачать, а затем запустить на сервере базы данных, даст вам множество статистических данных о том, как работает ваша база данных (например, кеш-хиты), а также некоторые конкретные рекомендации по устранению проблем или параметров конфигурации для повышения производительности.

Хотя эти статистические данные доступны в самой MySQL, я считаю, что этот инструмент обеспечивает их гораздо легче понять. Хотя важно отметить, что YMMV в отношении рекомендаций, я нашел их, как правило, довольно точными. Просто убедитесь, что вы хорошо подготовили базу данных заранее с реалистичным трафиком.

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