Поделиться через


Высокий уровень использования памяти в Базе данных Azure для PostgreSQL — гибкий сервер

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

В этой статье приводятся распространенные сценарии и первопричины, которые могут привести к высокой загрузке памяти на гибком сервере База данных Azure для PostgreSQL.

В этой статье рассматриваются следующие вопросы:

  • Сведения об устранении неполадок для выявления и получения рекомендаций по устранению основных причин.
  • Средства для выявления высокого уровня использования памяти.
  • Причины высокой памяти и исправлений.

Руководства по устранению неполадок

С помощью руководств по устранению неполадок функций, доступных на портале гибкого сервера База данных Azure для PostgreSQL возможные первопричины и рекомендации по устранению проблем с высокой памятью, можно найти. Как настроить руководства по устранению неполадок, чтобы использовать их, следуйте инструкциям по устранению неполадок установки.

Средства для выявления высокого уровня использования памяти

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

Метрики Azure

Используйте метрики Azure, чтобы отслеживать процент используемой памяти за определенный интервал даты и времени.
Для упреждающего мониторинга настройте оповещения для метрик. Пошаговые инструкции см. в статье Метрики Azure.

Хранилище запросов

Хранилище запросов автоматически ведет журнал запросов и статистики выполнения и сохраняет их для просмотра.

Хранилище запросов может сопоставлять сведения о событии ожидания со статистикой времени выполнения запроса. Используйте хранилище запросов для определения запросов с высоким потреблением памяти в течение интересующего периода.

Дополнительные сведения о настройке и использовании хранилища запросов см. в разделе Хранилище запросов.

Причины и действия по исправлению

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

Параметры сервера

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

Work_Mem

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

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

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

Для work_mem лучше указать значение work_mem = Total RAM / Max_Connections / 16

Значение по умолчанию для параметра work_mem — 4 МБ. Значение work_mem можно задать на нескольких уровнях, в том числе на уровне сервера с помощью страницы параметров на портале Azure.

Хорошая стратегия заключается в мониторинге потребления памяти во время пиковой нагрузки.

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

Maintenance_Work_Mem

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

Например, рассмотрим сценарий, в котором выполняются три рабочих роли автоматической очистки.

Если для maintenance_work_mem задано значение 1 ГБ, все сеансы вместе будут использовать 3 ГБ памяти.

Высокое значение maintenance_work_mem, а также несколько запущенных сеансов для очистки, создания индекса или добавления внешних ключей может привести к высокой загрузке памяти. Максимально допустимое значение параметра maintenance_work_mem сервера в База данных Azure для PostgreSQL гибком сервере составляет 2 ГБ.

Общие буферы

Параметр shared_buffers определяет объем памяти, выделенный серверу для кэширования данных. Цель общих буферов — уменьшить количество операций ввода-вывода диска.

Разумным параметром для общих буферов является 25 % ОЗУ. Установка значения больше 40 % ОЗУ не рекомендуется для большинства распространенных рабочих нагрузок.

Максимальное число подключений

Все новые и неактивные подключения к гибкой базе данных сервера База данных Azure для PostgreSQL используют до 2 МБ памяти. Одним из способов мониторинга подключений является использование следующего запроса:

select count(*) from pg_stat_activity;

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

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

Дополнительные сведения о PgBouncer:

Организация пулов соединений.

Рекомендации.

База данных Azure для PostgreSQL гибкий сервер предлагает PgBouncer в качестве встроенного решения для пула подключений. Дополнительные сведения см. в разделе PgBouncer.

Explain Analyze

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

Дополнительные сведения о команде EXPLAIN см. в разделе План объяснения.