Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Самостоятельное развертывание веб-интерфейса Apache Kafka®
    • Обновление кластера Managed Service for Apache Kafka® с ZooKeeper на KRaft
    • Миграция БД из стороннего кластера Apache Kafka® в Managed Service for Apache Kafka®
    • Перенос данных между кластерами Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for YDB в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Yandex MPP Analytics for PostgreSQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Yandex StoreDoc с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MySQL® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for OpenSearch с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for PostgreSQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Data Streams с помощью Data Transfer
    • Поставка данных из Data Streams в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Data Streams в Managed Service for Apache Kafka® с помощью Data Transfer
    • Захват изменений YDB и поставка в YDS
    • Настройка Kafka Connect для работы с кластером Managed Service for Apache Kafka®
    • Синхронизация топиков Apache Kafka® в Object Storage без использования интернета
    • Отслеживание утери сообщений в топике Apache Kafka®
    • Автоматизация задач Query с помощью Managed Service for Apache Airflow™
    • Отправка запросов к API Yandex Cloud через Yandex Cloud Python SDK
    • Настройка SMTP-сервера для отправки уведомлений по электронной почте
    • Добавление данных в БД ClickHouse®
    • Миграция данных в Managed Service for ClickHouse® средствами ClickHouse®
    • Миграция данных в Managed Service for ClickHouse® при помощи Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for ClickHouse® с помощью Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse®
    • Обмен данными между Managed Service for ClickHouse® и Yandex Data Processing
    • Настройка Managed Service for ClickHouse® для Graphite
    • Получение данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse®
    • Получение данных из Managed Service for Apache Kafka® в ksqlDB
    • Получение данных из RabbitMQ в Managed Service for ClickHouse®
    • Сохранение потока данных Data Streams в Managed Service for ClickHouse®
    • Асинхронная репликация данных из Яндекс Метрика в ClickHouse® с помощью Data Transfer
    • Использование гибридного хранилища в Managed Service for ClickHouse®
    • Шардирование таблиц Managed Service for ClickHouse®
    • Загрузка данных из Яндекс Директ в витрину Managed Service for ClickHouse® с использованием Cloud Functions, Object Storage и Data Transfer
    • Загрузка данных из Object Storage в Managed Service for ClickHouse® с помощью Data Transfer
    • Миграция данных со сменой хранилища из Managed Service for OpenSearch в Managed Service for ClickHouse® с помощью Data Transfer
    • Загрузка данных из Managed Service for YDB в Managed Service for ClickHouse® с помощью Data Transfer
    • Интеграция Yandex Managed Service for ClickHouse® с Microsoft SQL Server через ClickHouse® JDBC Bridge
    • Миграция базы данных из Google BigQuery в Managed Service for ClickHouse®
    • Интеграция Yandex Managed Service for ClickHouse® с Oracle через ClickHouse® JDBC Bridge
    • Настройка Cloud DNS для доступа к кластеру Managed Service for ClickHouse® из других облачных сетей
    • Миграция кластера Yandex Data Processing с HDFS в другую зону доступности
    • Импорт данных из Managed Service for MySQL® в Yandex Data Processing с помощью Sqoop
    • Импорт данных из Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
    • Монтирование бакетов Object Storage к файловой системе хостов Yandex Data Processing
    • Работа с топиками Apache Kafka® с помощью Yandex Data Processing
    • Автоматизация работы с Yandex Data Processing с помощью Managed Service for Apache Airflow™
    • Совместная работа с таблицами Yandex Data Processing с использованием Apache Hive™ Metastore
    • Перенос метаданных между кластерами Yandex Data Processing с помощью Apache Hive™ Metastore
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Миграция коллекций из стороннего кластера MongoDB в Yandex StoreDoc
    • Миграция данных в Yandex StoreDoc
    • Миграция кластера Yandex StoreDoc с версии 4.4 на 6.0
    • Шардирование коллекций Yandex StoreDoc
    • Анализ производительности и оптимизация Yandex StoreDoc
    • Миграция БД из стороннего кластера MySQL® в кластер Managed Service for MySQL®
    • Анализ производительности и оптимизация Managed Service for MySQL®
    • Синхронизация данных из стороннего кластера MySQL® в Managed Service for MySQL® с помощью Data Transfer
    • Миграция БД из Managed Service for MySQL® в сторонний кластер MySQL®
    • Миграция БД из Managed Service for MySQL® в Object Storage с помощью Data Transfer
    • Перенос данных из Object Storage в Managed Service for MySQL® с использованием Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Debezium
    • Миграция БД из Managed Service for MySQL® в Managed Service for YDB с помощью Data Transfer
    • Захват изменений MySQL® и поставка в YDS
    • Миграция данных из Managed Service for MySQL® в Managed Service for PostgreSQL с помощью Data Transfer
    • Миграция данных из AWS RDS for PostgreSQL в Managed Service for PostgreSQL с помощью Data Transfer
    • Миграция данных из Managed Service for MySQL® в Yandex MPP Analytics for PostgreSQL с помощью Data Transfer
    • Настройка политики индексов в Managed Service for OpenSearch
    • Миграция данных в Managed Service for OpenSearch из стороннего кластера OpenSearch с помощью Data Transfer
    • Загрузка данных из Managed Service for OpenSearch в Object Storage с помощью Data Transfer
    • Миграция данных из Managed Service for OpenSearch в Managed Service for YDB с помощью Data Transfer
    • Копирование данных из Managed Service for OpenSearch в Yandex MPP Analytics for PostgreSQL с помощью Yandex Data Transfer
    • Миграция данных из Managed Service for PostgreSQL в Managed Service for OpenSearch с помощью Data Transfer
    • Аутентификация в OpenSearch Dashboards кластера Managed Service for OpenSearch с помощью Keycloak
    • Использование плагина yandex-lemmer в Managed Service for OpenSearch
    • Создание кластера PostgreSQL для «1С:Предприятия»
    • Поиск проблем с производительностью кластера Managed Service for PostgreSQL
    • Анализ производительности и оптимизация Managed Service for PostgreSQL
    • Логическая репликация PostgreSQL
    • Миграция БД из стороннего кластера PostgreSQL в Managed Service for PostgreSQL
    • Миграция БД из Managed Service for PostgreSQL
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for YDB с помощью Data Transfer
    • Миграция БД из Managed Service for PostgreSQL в Object Storage
    • Перенос данных из Object Storage в Managed Service for PostgreSQL с использованием Data Transfer
    • Захват изменений PostgreSQL и поставка в YDS
    • Миграция данных из Managed Service for PostgreSQL в Managed Service for MySQL® с помощью Data Transfer
    • Миграция данных из Managed Service for PostgreSQL в Managed Service for OpenSearch с помощью Data Transfer
    • Решение проблем с сортировкой строк в PostgreSQL после обновления glibc
    • Миграция БД из Greenplum® в ClickHouse®
    • Миграция БД из Greenplum® в PostgreSQL
    • Выгрузка данных Greenplum® в холодное хранилище Object Storage
    • Загрузка данных из Object Storage в Yandex MPP Analytics for PostgreSQL с помощью Data Transfer
    • Копирование данных из Managed Service for OpenSearch в Yandex MPP Analytics for PostgreSQL с помощью Yandex Data Transfer
    • Создание внешней таблицы на базе таблицы из бакета Object Storage с помощью конфигурационного файла
    • Получение данных из внешних источников с помощью именованных запросов в Greenplum®
    • Миграция БД из стороннего кластера Valkey™ в Yandex Managed Service for Valkey™
    • Использование кластера Yandex Managed Service for Valkey™ в качестве хранилища сессий PHP
    • Загрузка данных из Object Storage в Managed Service for YDB с помощью Data Transfer
    • Загрузка данных из Managed Service for YDB в Object Storage с помощью Data Transfer
    • Обработка аудитных логов Audit Trails
    • Обработка логов Cloud Logging
    • Обработка потока изменений Debezium
    • Анализ данных с помощью Jupyter
    • Обработка файлов детализации в сервисе Yandex Cloud Billing
    • Ввод данных в системы хранения
    • Умная обработка логов
    • Передача данных в микросервисных архитектурах
    • Миграция данных в Object Storage с помощью Data Transfer
    • Миграция данных из стороннего кластера Greenplum® или PostgreSQL в Yandex MPP Analytics for PostgreSQL с помощью Data Transfer
    • Миграция кластера Yandex StoreDoc
    • Миграция кластера MySQL®
    • Миграция на сторонний кластер MySQL®
    • Миграция кластера PostgreSQL
    • Создание реестра схем для поставки данных в формате Debezium CDC из Apache Kafka®
    • Автоматизация работы с помощью Yandex Managed Service for Apache Airflow™
    • Работа с таблицей в Object Storage из PySpark-задания
    • Интеграция Yandex Managed Service for Apache Spark™ и Apache Hive™ Metastore
    • Запуск PySpark-задания с помощью Yandex Managed Service for Apache Airflow™
    • Использование Yandex Object Storage в Yandex Managed Service for Apache Spark™

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

  • Перед началом работы
  • Диагностика неэффективного выполнения запросов
  • Устранение проблем с неэффективными запросами
  • Диагностика дефицита ресурсов
  • Устранение проблем с дефицитом ресурсов
  • Диагностика наличия блокировок
  • Устранение проблем с блокировками
  • Диагностика ошибок подключения
  • Устранение проблем с подключениями
  • Диагностика недостатка места в хранилище
  • Устранение проблем с недостатком места в хранилище
  1. Построение Data Platform
  2. Анализ производительности и оптимизация Managed Service for PostgreSQL

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

Статья создана
Yandex Cloud
Обновлена 6 февраля 2025 г.
  • Перед началом работы
  • Диагностика неэффективного выполнения запросов
  • Устранение проблем с неэффективными запросами
  • Диагностика дефицита ресурсов
  • Устранение проблем с дефицитом ресурсов
  • Диагностика наличия блокировок
  • Устранение проблем с блокировками
  • Диагностика ошибок подключения
  • Устранение проблем с подключениями
  • Диагностика недостатка места в хранилище
  • Устранение проблем с недостатком места в хранилище

Снижение производительности кластера Managed Service for PostgreSQL чаще всего происходит по одной из следующих причин:

  • неэффективное выполнение запросов в PostgreSQL,
  • высокая утилизация CPU, дискового I/O и сети,
  • блокировки,
  • исчерпание доступных подключений,
  • исчерпание свободного места в хранилище.

Ниже приводятся советы по диагностике и решению этих проблем.

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

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

  1. Выберите базы данных для диагностики.

  2. Включите в кластере опцию Доступ из консоли управления.

  3. Активируйте сбор статистики о сессиях и запросах.

  4. Включите модуль auto_explain для расширенного логирования планов выполнения запросов.

  5. Чтобы в лог производительности попадало больше запросов, в настройках СУБД уменьшите значение параметра log_min_duration_statement.

    Важно

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

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

Выявить проблемные запросы можно двумя способами:

  • Сделать выборку из системной таблицы PostgreSQL pg_stat_activity:

    SELECT NOW() - query_start AS duration, query, state
    FROM pg_stat_activity
    WHERE state != 'idle' ORDER BY 1 DESC;
    

    Будет возвращен список запросов, выполняющихся на сервере. Обратите внимание на запросы с высоким значением duration.

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

  • Получить и проанализировать статистику по запросам с помощью встроенного в Managed Service for PostgreSQL инструмента для диагностики.

Устранение проблем с неэффективными запросамиУстранение проблем с неэффективными запросами

Проблемные запросы можно оптимизировать несколькими способами:

  • Проанализировать план запроса (query plan) с помощью команды EXPLAIN.

    Обратите внимание на запросы, не использующие индексы (большое количество строк в узлах Seq Scan). Такие запросы увеличивают как потребление I/O (чтений с диска будет больше), так и CPU (требуется больше процессорного времени на обработку большого числа строк).

    Создайте или обновите необходимые индексы.

    Совет

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

    Подробнее см. в разделе SQL-запросы в Yandex WebSQL.

  • Автоматически логировать план выполнения запросов с помощью модуля auto_explain.

  • Обновить статистику с помощью команды ANALYZE.

    План выполнения запроса строится на основе статистики, собранной СУБД. Если данные в СУБД обновляются часто, эта статистика быстро устаревает. Используйте запрос ANALYZE, чтобы СУБД выполнила повторный анализ таблицы или всей базы данных:

    ANALYZE <имя_таблицы_или_базы_данных>;
    

    При необходимости в настройках СУБД увеличьте значение параметра default_statistics_target, затем выполните запрос ANALYZE повторно.

    Подробнее про параметр default_statistics_target см. в настройках PostgreSQL.

  • Создать расширенные объекты статистики.

    PostgreSQL не собирает статистику о корреляции данных между столбцами одной таблицы. Это связано с тем, что число возможных комбинаций столбцов может быть очень большим. Если между некоторыми столбцами есть связь, создайте расширенные объекты статистики. Тогда планировщик сможет оптимизировать запросы на основе информации о корреляции данных в столбцах.

  • Проанализировать статистику планов выполнения запросов в логах PostgreSQL.

    Модуль PostgreSQL auto_explain выводит информацию о планах выполнения запросов в лог PostgreSQL. Вы можете собрать статистику поиском по строкам лога. Подробнее читайте в документации PostgreSQL.

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

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

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

В большинстве случаев высокая утилизация CPU и дискового I/O связана с неоптимальными индексами или большой нагрузкой на хосты. Изучите данные о сессиях и запросах, собранные инструментом диагностики производительности.

Устранение проблем с дефицитом ресурсовУстранение проблем с дефицитом ресурсов

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

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

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

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

  1. Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.

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

  3. На вкладке Сессии в поле Срез выберите значение WAIT_EVENT_TYPE.

    • Обратите внимание на график Lock. Он показывает количество запросов, которые в выбранный период находились в состоянии блокировки.
    • Чтобы получить детальную информацию о запросах, выполнявшихся в выбранный период, перейдите на вкладку Запросы.

    Подробнее про отображаемые сведения см. в документации PostgreSQL.

Чтобы диагностировать наличие блокировок средствами PostgreSQL, выполните запрос:

SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa
    ON pl.pid = psa.pid;

Подробнее о выборке запросов с блокировками см. в документации PostgreSQL.

Устранение проблем с блокировкамиУстранение проблем с блокировками

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

Диагностика ошибок подключенияДиагностика ошибок подключения

Количество соединений с базой данных ограничено параметром max_connections и рассчитывается по формуле:

200 × <доля_vCPU_на_хосте> — 15

Здесь <доля_vCPU_на_хосте> — произведение количества vCPU на их гарантированную долю, а 15 — количество зарезервированных служебных соединений. Полученное количество подключений распределяется между ролями базы данных.

Если количество открытых соединений достигает лимита, в логах кластера появляются ошибки:

  • Too many connections for role.
  • Server conn crashed.
  • Invalid server parameter.
  • Query wait timeout.

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

  1. Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.

  2. Нажмите на имя нужного кластера, затем выберите вкладку Мониторинг.

  3. Изучите график Total pooler connections.

    Managed Service for PostgreSQL не допускает подключений напрямую к СУБД, вместо этого происходит подключение к менеджеру подключений.

    • Характеристика Clients отражает количество клиентских подключений к менеджеру подключений.

    • Характеристика Servers отражает количество соединений между СУБД и менеджером подключений.

      Обратите внимание на количество соединений — высокие значения говорят о том, что некоторые запросы держат подключения открытыми слишком долго.

Устранение проблем с подключениямиУстранение проблем с подключениями

Чтобы решить проблему с количеством подключений:

  • Увеличьте значение параметра max_connections в настройках СУБД.

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

  • Оптимизируйте запросы таким образом, чтобы не было длинных транзакций.

Если нагрузка все еще высокая или оптимизировать нечего, остается только поднять класс хостов.

Диагностика недостатка места в хранилищеДиагностика недостатка места в хранилище

Если кластер демонстрирует низкую производительность и в логах наблюдается ошибка ERROR: cannot execute INSERT in a read-only transaction, возможно, в хранилище кластера закончилось свободное место, и он перешел в режим read-only.

Чтобы проверить наличие свободного места в хранилище кластера:

  1. Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.

  2. Нажмите на имя нужного кластера, затем выберите вкладку Мониторинг.

  3. Проверьте график Disk capacity in primary, [bytes].

    Обратите внимание на значение параметра Used, показывающего степень заполнения хранилища кластера.

Устранение проблем с недостатком места в хранилищеУстранение проблем с недостатком места в хранилище

Рекомендации по устранению проблем приведены в разделе Управление дисковым пространством.

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

Предыдущая
Поиск проблем с производительностью кластера Managed Service for PostgreSQL
Следующая
Логическая репликация PostgreSQL
Проект Яндекса
© 2025 ООО «Яндекс.Облако»