Spec-Zone.ru › MySQL 8.4

10.1 Обзор оптимизации

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

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

  • Оптимизация на уровне базы данных

  • Оптимизация на уровне аппаратного обеспечения

  • Балансировка переносимости и производительности

Оптимизация на уровне базы данных

Наиболее важным фактором для ускорения работы приложения базы данных является его базовый дизайн:

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

  • Есть ли необходимые индексы для повышения эффективности запросов?

  • Используете ли вы подходящий движок хранения для каждой таблицы и используете ли преимущества и особенности каждого используемого вами движка хранения? В частности, выбор транзакционного движка хранения, такого как InnoDB, или не транзакционного, такого как MyISAM, может быть очень важным для производительности и масштабируемости.

    Примечание

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

  • Использует ли каждая таблица соответствующий формат строк? Этот выбор также зависит от движка хранения, используемого для таблицы. В частности, сжатые таблицы занимают меньше места на диске и, следовательно, требуют меньшего ввода-вывода с диска для чтения и записи данных. Сжатие доступно для всех типов рабочих нагрузок с таблицами InnoDB и для только для чтения таблиц MyISAM.

  • Использует ли приложение подходящую стратегию блокировки? Например, разрешая совместный доступ, когда это возможно, чтобы операции базы данных могли выполняться параллельно, и запрашивая эксклюзивный доступ, когда это необходимо, чтобы критические операции имели наивысший приоритет. Опять же, выбор движка хранения имеет значение. Движок хранения InnoDB обрабатывает большинство проблем с блокировкой без вашего вмешательства, позволяя повысить конкурентность в базе данных и уменьшить количество экспериментов и настройки вашего кода.

  • Все ли области памяти, используемые для кэширования, имеют правильный размер? То есть, достаточно большой, чтобы содержать часто используемые данные, но не настолько большой, чтобы перегружать физическую память и вызывать подкачку. Основные области памяти для настройки — буферный пул InnoDB и кэш ключей MyISAM.

Оптимизация на уровне аппаратного обеспечения

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

  • Поиск на диске. Поиск фрагмента данных на диске занимает время. У современных дисков среднее время поиска обычно ниже 10 мс, поэтому теоретически мы можем выполнить около 100 поисков в секунду. Это время медленно улучшается с новыми дисками и очень сложно оптимизировать для одной таблицы. Способ оптимизации времени поиска заключается в распределении данных по нескольким дискам.

  • Чтение и запись на диск. Когда диск находится в нужном положении, нам необходимо прочитать или записать данные. Современные диски обеспечивают пропускную способность как минимум 10–20 МБ/с. Это легче оптимизировать, чем поиск, потому что вы можете параллельно читать с нескольких дисков.

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

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

Балансировка переносимости и производительности

Для использования ориентированных на производительность расширений SQL в портативной программе MySQL можно обернуть специфичные для MySQL ключевые слова в операторе в комментариях /*! */. Другие серверы SQL игнорируют прокомментированные ключевые слова. Сведения о написании комментариев см. в разделе 11.7, «Комментарии».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/optimize-overview.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API