Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for MySQL®
  • Начало работы
    • Все руководства
    • Анализ производительности и оптимизация Managed Service for MySQL®
    • Выгрузка базы данных в Yandex Data Processing
    • Миграция базы данных из стороннего кластера MySQL®
    • Миграция базы данных из Managed Service for MySQL® в MySQL®
    • Поставка данных из Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • "Поставка данных в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer"
    • Поставка данных в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Сайт на WordPress с БД MySQL®
    • Миграция базы данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Миграция базы данных из Managed Service for MySQL® в Yandex Object Storage
    • Перенос данных из Yandex Object Storage в Managed Service for MySQL®
    • Захват изменений MySQL® и поставка в YDS
    • Миграция данных из Yandex Managed Service for PostgreSQL в Managed Service for MySQL® с помощью Yandex Data Transfer
    • Миграция данных из Managed Service for MySQL® в Yandex Managed Service for PostgreSQL с помощью Yandex Data Transfer
    • Миграция данных из Managed Service for MySQL® в Yandex Managed Service for Greenplum® с помощью Yandex Data Transfer
    • Синхронизация данных из стороннего кластера MySQL® в Yandex Managed Service for MySQL® с помощью Yandex Data Transfer
    • Миграция базы данных из MySQL® в ClickHouse® с помощью Yandex Data Transfer
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Диагностика дефицита ресурсов
  • Диагностика неэффективного выполнения запросов
  • Диагностика наличия блокировок
  • Решение проблем
  1. Практические руководства
  2. Анализ производительности и оптимизация Managed Service for MySQL®

Анализ производительности и оптимизация Managed Service for MySQL®

Статья создана
Yandex Cloud
Обновлена 26 августа 2024 г.
  • Перед началом работы
  • Диагностика дефицита ресурсов
  • Диагностика неэффективного выполнения запросов
  • Диагностика наличия блокировок
  • Решение проблем

К снижению производительности кластера Managed Service for MySQL® обычно приводят следующие проблемы:

  • высокая утилизация CPU, дискового I/O и сети;
  • неэффективное выполнение запросов в MySQL®;
  • блокировки.

Инструменты мониторинга MySQL® и диагностики производительности кластера Managed Service for MySQL®, а также специальные запросы MySQL® помогут эти проблемы обнаружить.

Перед началом работыПеред началом работы

  1. Выберите базы данных для диагностики.
  2. Активируйте сбор статистики.
  3. Создайте пользователя MySQL® с привилегией PROCESS для этих баз. Диагностические запросы необходимо выполнять от имени этого пользователя.

Диагностика дефицита ресурсовДиагностика дефицита ресурсов

Дефицит ресурсов — одна из вероятных причин падения производительности кластера. Дефицит ресурсов виден по графикам мониторинга кластера (CPU, дисковые операции I/O, сетевые соединения). Если постоянно росший график нагрузки на ресурс остановился на одном уровне, использование ресурса достигло лимита или выходит за границы гарантированного уровня обслуживания.

Причины повышенной загрузки ресурсов можно установить специальными запросами:

  • Чтобы оценить потребление Disk IO разными потоками MySQL®, выполните запрос:

    SELECT   t.name             AS thread_name,
             t.processlist_user AS user,
             t.processlist_info AS query,
             t.processlist_time AS time,
             io.bytes           AS bytes
    FROM     performance_schema.threads t
    JOIN
             (
                      SELECT   thread_id,
                               sum(number_of_bytes) AS bytes
                      FROM     performance_schema.events_waits_history_long
                      WHERE    object_type='FILE'
                      GROUP BY thread_id) io
    ON       t.thread_id = io.thread_id
    ORDER BY io.bytes DESC 
    

    Запрос возвращает список файловых потоков MySQL®, упорядоченных по убыванию занимаемого объема памяти. Как правило, в начале списка находятся потоки, обслуживающие репликацию и буфер InnoDB для кеширования таблиц и индексов.

  • Чтобы оценить потребление ресурсов сети разными потоками MySQL®, выполните запрос:

    SELECT   t.name                       AS thread_name,
             t.processlist_user           AS user,
             t.processlist_info           AS query,
             t.processlist_time           AS time,
             net.bytes/t.processlist_time AS avg_bytes,
             net.bytes                    AS total_bytes
    FROM     performance_schema.threads t
    JOIN
             (
                      SELECT   thread_id,
                               Sum(variable_value) bytes
                      FROM     performance_schema.status_by_thread
                      WHERE    variable_name IN ('Bytes_sent',
                                                 'Bytes_received')
                      GROUP BY thread_id ) net
    ON       t.thread_id = net.thread_id
    WHERE    t.processlist_time IS NOT NULL
    ORDER BY net.bytes DESC
    

    Этот запрос возвращает статистику с момента запуска потоков, поэтому долгоживущие соединения (например, репликация) будут возвращаться в первых строках.

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

  • Отследить потребление CPU отдельными запросами в MySQL® невозможно, но можно выявить неэффективно выполнявшиеся запросы (см. далее).

Диагностика неэффективного выполнения запросовДиагностика неэффективного выполнения запросов

Чтобы выявить проблемные запросы в MySQL®, выполните запрос:

SELECT *
FROM   sys.statement_analysis
LIMIT  10

Запрос возвращает 10 наиболее долго выполнявшихся запросов за всю историю сервера.

Следует обратить внимание на запросы с высокими значениями ROWS_EXAMINED, ROWS_SORTED или флагом FULL_SCAN.

Подробнее об информации в выдаче см. в документации MySQL®.

Диагностика наличия блокировокДиагностика наличия блокировок

Причиной низкой производительности кластера могут быть блокировки (locks), вызванные попытками одновременного доступа к одному и тому же ресурсу БД (таблице, строке).

Для диагностики проверьте очереди ожидания блокировок в запросах:

  • Очередь ожидания блокировок уровня таблиц:

    SELECT * FROM sys.schema_table_lock_waits 
    
  • Очередь ожидания блокировок уровня отдельных строк:

    SELECT * FROM sys.innodb_lock_waits
    

Решение проблемРешение проблем

Найденные в результате диагностики проблемные запросы можно попробовать оптимизировать. Существует несколько способов оптимизации:

  • проанализировать план запроса (query plan) с помощью команды EXPLAIN и воспользоваться приемами по оптимизации запросов из документации MySQL®;

  • оптимизировать таблицы InnoDB, чтобы снизить нагрузку на диск.

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

Была ли статья полезна?

Предыдущая
Все руководства
Следующая
Выгрузка базы данных в Yandex Data Processing
Проект Яндекса
© 2025 ООО «Яндекс.Облако»