8.1 Обзор оптимизации
Производительность базы данных зависит от нескольких факторов на уровне базы данных, таких как таблицы, запросы и параметры конфигурации. Эти программные конструкции приводят к операциям ЦП и Ввода/Вывода на уровне оборудования, которые необходимо минимизировать и сделать максимально эффективными. Начинать работу с производительностью базы данных нужно с изучения общих правил и рекомендаций для программной части и измерения производительности с помощью времени реального выполнения. Став экспертом, вы узнаете больше о том, что происходит внутри, и начнете измерять такие вещи, как циклы ЦП и операции Ввода/Вывода.
Обычные пользователи стремятся получить наилучшую производительность базы данных при имеющейся конфигурации программного и аппаратного обеспечения. Расширенные пользователи ищут возможности улучшить сам программный пакет MySQL или разрабатывать собственные движки хранения и аппаратные устройства для расширения экосистемы MySQL.
Оптимизация на уровне базы данных
Наиболее важным фактором для повышения скорости работы приложения базы данных является ее базовый дизайн:
Правильно ли структурированы таблицы? В частности, имеют ли столбцы правильные типы данных и каждая таблица имеет ли необходимые столбцы для данного типа работы? Например, приложения, которые часто выполняют обновления, обычно имеют много таблиц с небольшим количеством столбцов, а приложения, которые анализируют большие объемы данных, обычно имеют мало таблиц со многими столбцами.
Установлены ли нужные индексы для повышения эффективности запросов?
-
Используется ли для каждой таблицы соответствующий движок хранения и используются ли преимущества и особенности каждого используемого движка хранения? В частности, выбор транзакционного движка хранения, такого как
InnoDB, или не транзакционного, такого какMyISAM, может быть очень важен для производительности и масштабируемости.ПримечаниеInnoDBявляется движком хранения по умолчанию для новых таблиц. На практике, благодаря расширенным функциям производительностиInnoDB, таблицыInnoDBчасто превосходят более простые таблицыMyISAM, особенно для загруженной базы данных. Использует ли каждая таблица подходящий формат строк? Этот выбор также зависит от движка хранения, используемого для таблицы. В частности, сжатые таблицы занимают меньше места на диске и, следовательно, требуют меньшего ввода/вывода с диска для чтения и записи данных. Сжатие доступно для всех типов рабочих нагрузок с таблицами
InnoDBи для только-для-чтения таблицMyISAM.Использует ли приложение подходящую стратегию блокировки? Например, разрешая совместный доступ, когда это возможно, чтобы операции базы данных могли выполняться параллельно, и запрашивая эксклюзивный доступ, когда это необходимо, чтобы критические операции имели наивысший приоритет. Опять же, выбор движка хранения имеет значение. Движок хранения
InnoDBобрабатывает большинство проблем блокировки без вашего участия, что позволяет повысить конкурентность в базе данных и уменьшить количество экспериментов и настройки для вашего кода.Правильно ли настроены все области памяти, используемые для кэширования? То есть, достаточно ли велики они для хранения часто используемых данных, но не настолько велики, чтобы перегружать оперативную память и вызывать подкачку. Основные области памяти для настройки — буферный пул
InnoDB, кэш ключейMyISAMи кэш запросов MySQL.
Оптимизация на уровне оборудования
Любое приложение базы данных в конечном итоге сталкивается с ограничениями оборудования по мере увеличения нагрузки на базу данных. Администратор базы данных должен оценить, можно ли настроить приложение или переконфигурировать сервер, чтобы избежать этого, или требуются дополнительные аппаратные ресурсы. Сбой системы обычно возникает по следующим причинам:
Поиск на диске. Диску требуется время, чтобы найти фрагмент данных. У современных дисков среднее время поиска обычно меньше 10 мс, поэтому теоретически мы можем выполнять около 100 поисков в секунду. Это время медленно улучшается с новыми дисками и очень сложно оптимизировать для одной таблицы. Способ оптимизации времени поиска заключается в распределении данных по нескольким дискам.
Чтение и запись на диск. Когда диск находится в нужном положении, нам необходимо прочитать или записать данные. Современные диски обеспечивают пропускную способность как минимум 10–20 МБ/с. Это проще оптимизировать, чем поиск, так как вы можете параллельно читать с нескольких дисков.
Циклы ЦП. Когда данные находятся в оперативной памяти, нам необходимо обработать их, чтобы получить результат. Наличие больших таблиц по сравнению с объемом памяти является наиболее распространенным ограничивающим фактором. Но с небольшими таблицами скорость обычно не проблема.
Пропускная способность памяти. Когда ЦП нуждается в большем количестве данных, чем может поместиться в кэше ЦП, пропускная способность оперативной памяти становится узким местом. Это редкое узкое место для большинства систем, но нужно об этом знать.
Баланс портативности и производительности
Для использования расширений SQL, ориентированных на производительность, в портативном программном обеспечении MySQL, вы можете обернуть специфичные для MySQL ключевые слова в оператор внутри /*! */ разделителей комментариев. Другие серверы SQL игнорируют прокомментированные ключевые слова. Сведения о написании комментариев см. в разделе 9.6, «Комментарии».
© 2025 Oracle
Licensed under the GPLv2 License.