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


Использование ресурсов и память

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

commit_timestamp_buffers

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша метки времени фиксации. Укажите 0, чтобы это значение было определено как доля shared_buffers.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 0-131072
Тип параметра статичный
Documentation commit_timestamp_buffers

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько значений "work_mem", используемых для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 2
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Использование огромных страниц в Linux или Windows.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

размер огромной страницы (huge_page_size)

Свойство Ценность
Категория Использование ресурсов и память
Description Размер огромной страницы, которую следует запросить.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation huge_page_size

io_combine_limit

Свойство Ценность
Категория Использование ресурсов и память
Description Ограничение размера операций чтения и записи данных.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 1-128
Тип параметра dynamic
Documentation io_combine_limit

io_max_combine_limit

Свойство Ценность
Категория Использование ресурсов и память
Description Ограничение на уровне сервера, которое зажимает io_combine_limit.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 1-128
Тип параметра dynamic
Documentation io_max_combine_limit

io_max_concurrency

Свойство Ценность
Категория Использование ресурсов и память
Description Максимальное число операций ввода-вывода, которые один процесс может выполнять одновременно.
Тип данных целое число
Значение по умолчанию 64
Допустимые значения -1-1024
Тип параметра статичный
Documentation io_max_concurrency

io_method

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает метод для выполнения асинхронного ввода-вывода.
Тип данных enumeration
Значение по умолчанию worker
Допустимые значения worker,sync
Тип параметра статичный
Documentation io_method

io_workers

Свойство Ценность
Категория Использование ресурсов и память
Description Количество рабочих процессов ввода-вывода для io_method=worker.
Тип данных целое число
Значение по умолчанию 3
Допустимые значения 1-32
Тип параметра dynamic
Documentation io_workers

logical_decoding_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для логического декодирования. Этот объем памяти может использоваться каждым внутренним буфером переупорядочения перед сбросом на диск.
Тип данных целое число
Значение по умолчанию 65536
Допустимые значения 64-2147483647
Тип параметра dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания. К ним относятся такие операции, как VACUUM и CREATE INDEX.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

min_dynamic_shared_memory (минимальная динамическая общая память)

Свойство Ценность
Категория Использование ресурсов и память
Description Объем динамической общей памяти, зарезервированной при запуске.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation min_dynamic_shared_memory (минимальная динамическая разделяемая память)

multixact_member_buffers

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша элементов MultiXact.
Тип данных целое число
Значение по умолчанию 32
Допустимые значения 16-131072
Тип параметра статичный
Documentation multixact_member_buffers

multixact_offset_buffers

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша смещения MultiXact.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 16-131072
Тип параметра статичный
Documentation multixact_offset_buffers

буферы уведомлений

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша сообщений LISTEN/NOTIFY.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 16-131072
Тип параметра статичный
Documentation notify_buffers

сериализуемые_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша сериализуемых транзакций.
Тип данных целое число
Значение по умолчанию 32
Допустимые значения 16-131072
Тип параметра статичный
Documentation сериализуемые_буферы

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

Буферы сабтранзакции

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша подтранскции. Укажите 0, чтобы это значение было определено как доля shared_buffers.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 0-131072
Тип параметра статичный
Documentation буферы подтранзакций

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

буферы транзакций

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша состояния транзакций. Укажите 0, чтобы это значение было определено как доля shared_buffers.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 0-131072
Тип параметра статичный
Documentation transaction_buffers

Вакуумный_лимит_использования_буфера

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер буферного пула для ВАКУУМа, АНАЛИЗА и автовакума.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 0-16777216
Тип параметра dynamic
Documentation vacuum_buffer_usage_limit

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для рабочих областей запросов. Это количество памяти может использоваться каждой внутренней операцией сортировки и хэш-таблицей перед переходом на временные файлы на диске.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

commit_timestamp_buffers

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша метки времени фиксации. Укажите 0, чтобы это значение было определено как доля shared_buffers.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 0-131072
Тип параметра статичный
Documentation commit_timestamp_buffers

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько значений "work_mem", используемых для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 2
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Использование огромных страниц в Linux или Windows.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

размер огромной страницы (huge_page_size)

Свойство Ценность
Категория Использование ресурсов и память
Description Размер огромной страницы, которую следует запросить.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation huge_page_size

io_combine_limit

Свойство Ценность
Категория Использование ресурсов и память
Description Ограничение размера операций чтения и записи данных.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 16
Тип параметра read-only
Documentation io_combine_limit

logical_decoding_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для логического декодирования. Этот объем памяти может использоваться каждым внутренним буфером переупорядочения перед сбросом на диск.
Тип данных целое число
Значение по умолчанию 65536
Допустимые значения 64-2147483647
Тип параметра dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания. К ним относятся такие операции, как VACUUM и CREATE INDEX.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

min_dynamic_shared_memory (минимальная динамическая общая память)

Свойство Ценность
Категория Использование ресурсов и память
Description Объем динамической общей памяти, зарезервированной при запуске.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation min_dynamic_shared_memory (минимальная динамическая разделяемая память)

multixact_member_buffers

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша элементов MultiXact.
Тип данных целое число
Значение по умолчанию 32
Допустимые значения 16-131072
Тип параметра статичный
Documentation multixact_member_buffers

multixact_offset_buffers

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша смещения MultiXact.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 16-131072
Тип параметра статичный
Documentation multixact_offset_buffers

буферы уведомлений

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша сообщений LISTEN/NOTIFY.
Тип данных целое число
Значение по умолчанию 16
Допустимые значения 16-131072
Тип параметра статичный
Documentation notify_buffers

сериализуемые_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша сериализуемых транзакций.
Тип данных целое число
Значение по умолчанию 32
Допустимые значения 16-131072
Тип параметра статичный
Documentation сериализуемые_буферы

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

Буферы сабтранзакции

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша подтранскции. Укажите 0, чтобы это значение было определено как доля shared_buffers.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 0-131072
Тип параметра статичный
Documentation буферы подтранзакций

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

буферы транзакций

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер выделенного буферного пула, используемого для кэша состояния транзакций. Укажите 0, чтобы это значение было определено как доля shared_buffers.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 0-131072
Тип параметра статичный
Documentation transaction_buffers

Вакуумный_лимит_использования_буфера

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер буферного пула для ВАКУУМа, АНАЛИЗА и автовакума.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 0-16777216
Тип параметра dynamic
Documentation vacuum_buffer_usage_limit

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для рабочих областей запросов. Это количество памяти может использоваться каждой внутренней операцией сортировки и хэш-таблицей перед переходом на временные файлы на диске.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько work_mem использовать для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 2
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

размер огромной страницы (huge_page_size)

Свойство Ценность
Категория Использование ресурсов и память
Description Размер огромной страницы, которую следует запросить.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation huge_page_size

logical_decoding_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для логического декодирования.
Тип данных целое число
Значение по умолчанию 65536
Допустимые значения 64-2147483647
Тип параметра dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

min_dynamic_shared_memory (минимальная динамическая общая память)

Свойство Ценность
Категория Использование ресурсов и память
Description Объем динамической общей памяти, зарезервированной при запуске.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation min_dynamic_shared_memory (минимальная динамическая разделяемая память)

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом базы данных.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

Вакуумный_лимит_использования_буфера

Свойство Ценность
Категория Использование ресурсов и память
Description Задает размер буферного пула для ВАКУУМа, АНАЛИЗА и автовакума.
Тип данных целое число
Значение по умолчанию 256
Допустимые значения 0-16777216
Тип параметра dynamic
Documentation vacuum_buffer_usage_limit

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько work_mem использовать для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 2
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

размер огромной страницы (huge_page_size)

Свойство Ценность
Категория Использование ресурсов и память
Description Размер огромной страницы, которую следует запросить.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation huge_page_size

logical_decoding_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для логического декодирования.
Тип данных целое число
Значение по умолчанию 65536
Допустимые значения 64-2147483647
Тип параметра dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

min_dynamic_shared_memory (минимальная динамическая общая память)

Свойство Ценность
Категория Использование ресурсов и память
Description Объем динамической общей памяти, зарезервированной при запуске.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation min_dynamic_shared_memory (минимальная динамическая разделяемая память)

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом базы данных.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько work_mem использовать для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 1
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

размер огромной страницы (huge_page_size)

Свойство Ценность
Категория Использование ресурсов и память
Description Размер огромной страницы, которую следует запросить.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation huge_page_size

logical_decoding_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для логического декодирования.
Тип данных целое число
Значение по умолчанию 65536
Допустимые значения 64-2147483647
Тип параметра dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

min_dynamic_shared_memory (минимальная динамическая общая память)

Свойство Ценность
Категория Использование ресурсов и память
Description Объем динамической общей памяти, зарезервированной при запуске.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0
Тип параметра read-only
Documentation min_dynamic_shared_memory (минимальная динамическая разделяемая память)

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом базы данных.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько work_mem использовать для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 1
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

logical_decoding_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для логического декодирования.
Тип данных целое число
Значение по умолчанию 65536
Допустимые значения 64-2147483647
Тип параметра dynamic
Documentation logical_decoding_work_mem

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом базы данных.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

hash_mem_multiplier

Свойство Ценность
Категория Использование ресурсов и память
Description Несколько work_mem использовать для хэш-таблиц.
Тип данных числовой
Значение по умолчанию 1
Допустимые значения 1-1000
Тип параметра dynamic
Documentation hash_mem_multiplier

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

тип общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает реализацию общей памяти, используемую для основного региона общей памяти.
Тип данных enumeration
Значение по умолчанию mmap
Допустимые значения mmap
Тип параметра read-only
Documentation shared_memory_type

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом базы данных.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.

autovacuum_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum.
Тип данных целое число
Значение по умолчанию -1
Допустимые значения -1-2097151
Тип параметра dynamic
Documentation autovacuum_work_mem

тип динамической общей памяти

Свойство Ценность
Категория Использование ресурсов и память
Description Выбирает используемую динамическую реализацию общей памяти.
Тип данных enumeration
Значение по умолчанию posix
Допустимые значения posix
Тип параметра read-only
Documentation dynamic_shared_memory_type

большие страницы

Свойство Ценность
Категория Использование ресурсов и память
Description Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами.
Тип данных enumeration
Значение по умолчанию try
Допустимые значения on,off,try
Тип параметра статичный
Documentation huge_pages

Description

Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.

Использование огромных страниц может обеспечить преимущества в производительности, которые эффективно разгрузят ЦП.

  • Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
  • Они сокращают время, необходимое для управления памятью.

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

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

Recommendations

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

Заметки, относящиеся к Azure

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

maintenance_work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 1024-2097151
Тип параметра dynamic
Documentation maintenance_work_mem

Description

maintenance_work_mem — это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM, CREATE INDEXи ALTER TABLE. В отличие от work_mem, который влияет на выделение памяти для операций с запросами, maintenance_work_mem предназначен для задач по поддержанию и оптимизации структуры базы данных.

! [ПРИМЕЧАНИЕ] Установка maintenance_work_mem чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.

Ключевые моменты

  • Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей путем увеличения maintenance_work_mem, помните, что у VACUUM есть встроенное ограничение на сбор мертвых идентификаторов кортежей. Он может использовать только до 1 ГБ памяти для этого процесса.
  • Разделение памяти для autovacuum: вы можете использовать параметр autovacuum_work_mem для автономного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножества maintenance_work_mem. Вы можете определить, сколько памяти потребляет автовакуум, не влияя на выделение памяти для других задач обслуживания и операций описания данных.

Заметки, относящиеся к Azure

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

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

Формула, используемая для вычисления значенияmaintenance_work_mem.(long)(82.5 * ln(memoryGiB) + 40) * 1024

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти maintenance_work_mem
2 ГиБ 99 328 КиБ
4 ГиБ 157 696 KiБ
8 ГиБ 216 064 КиБ
16 ГиБ 274 432 КиБ
32 ГиБ 332 800 КиБ
48 ГиБ 367 616 КиБ
64 ГиБ 392 192 КиБ
80 ГиБ 410 624 КиБ
128 ГиБ 450 560 КиБ
160 ГиБ 468 992 КиБ
192 ГиБ 484 352 КиБ
256 Гиб 508 928 КиБ
384 ГиБ 542 720 КиБ
432 ГиБ 552 960 КИБ
672 Гиб 590 848 КиБ

max_prepared_transactions

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере.
Тип данных целое число
Значение по умолчанию 0
Допустимые значения 0-262143
Тип параметра статичный
Documentation max_prepared_transactions

max_stack_depth

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальную глубину стека в килобайтах.
Тип данных целое число
Значение по умолчанию 2048
Допустимые значения 2048
Тип параметра read-only
Documentation max_stack_depth

общие_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти.
Тип данных целое число
Значение по умолчанию Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу.
Допустимые значения 16-1073741823
Тип параметра статичный
Documentation shared_buffers

Description

Параметр shared_buffers конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.

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

Заметки, относящиеся к Azure

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

Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers в соответствии со значениями в следующих формулах.

Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffersmemoryGib * 16384.

Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers, равна memoryGib * 32768.

В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:

Размер памяти общие_буферы
2 ГиБ 32768
4 ГиБ 131072
8 ГиБ 262144
16 ГиБ 524288
32 ГиБ 1048576
48 ГиБ 1572864
64 ГиБ 2097152
80 ГиБ 2621440
128 ГиБ 4194304
160 ГиБ 5242880
192 ГиБ 6291456
256 Гиб 8388608
384 ГиБ 12582912
432 ГиБ 14155776
672 Гиб 22020096

временные_буферы

Свойство Ценность
Категория Использование ресурсов и память
Description Задает максимальное количество временных буферов, используемых каждым сеансом базы данных.
Тип данных целое число
Значение по умолчанию 1024
Допустимые значения 100-1073741823
Тип параметра dynamic
Documentation temp_buffers

work_mem

Свойство Ценность
Категория Использование ресурсов и память
Description Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков.
Тип данных целое число
Значение по умолчанию 4096
Допустимые значения 4096-2097151
Тип параметра dynamic
Documentation work_mem

Description

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

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

Ключевые моменты

  • Память частного подключения: work_mem является частью частной памяти, используемой каждым сеансом базы данных. Эта память отличается от используемой shared_buffers общей области памяти.
  • Использование конкретного запроса: не все сеансы или запросы используют work_mem. Простые запросы, такие как SELECT 1 вряд ли требуются work_mem. Однако сложные запросы, связанные с операциями, такими как сортировка или хэширование, могут использовать один или несколько блоков work_mem.
  • Параллельные операции. Для запросов, охватывающих несколько параллельных серверных систем, каждая из них может использовать один или множество блоков work_mem.

Мониторинг и настройка work_mem

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

  • Анализ производительности запросов. Проверьте основные запросы на вкладке временных файлов , чтобы определить запросы, которые создают временные файлы. В этой ситуации может возникнуть необходимость увеличить work_mem.
  • Руководства по устранению неполадок. Используйте вкладку "Высокие временные файлы" в руководствах по устранению неполадок для выявления проблемных запросов.
Тонкая корректировка

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

  • Уровень пользователя: если конкретный пользователь в основном участвует в агрегации или отчетах, которые являются интенсивными в памяти, рассмотрите возможность настройки work_mem значения для этого пользователя. ALTER ROLE Используйте команду для повышения производительности операций пользователя.

  • Уровень функции или процедуры: если определенные функции или процедуры создают существенные временные файлы, увеличение work_mem значения на определенном уровне функции или процедуры может оказаться полезным. Используйте команду ALTER FUNCTION или команду ALTER PROCEDURE, чтобы в частности выделить больше памяти для этих операций.

  • Уровень базы данных: измените work_mem на уровне базы данных, если создаются только определенные базы данных с большим количеством временных файлов.

  • Глобальный уровень: если анализ системы показывает, что большинство запросов создают небольшие временные файлы, в то время как только несколько создают большие, это может быть разумно для глобального увеличения work_mem значения. Это действие упрощает большинство запросов для обработки в памяти, поэтому можно избежать операций на основе дисков и повысить эффективность. Тем не менее, всегда следите за использованием памяти на сервере, чтобы убедиться, что он может обрабатывать увеличенное work_mem значение.

Определение минимального значения work_mem для операций сортировки

Чтобы найти минимальное work_mem значение для определенного запроса, особенно для создания временных файлов дисков во время процесса сортировки, сначала учитывая размер временного файла, созданного во время выполнения запроса. Например, если запрос создает временный файл размером 20 МБ:

  1. Подключитесь к базе данных с помощью psql или предпочтительного клиента PostgreSQL.
  2. Задайте начальное work_mem значение чуть выше 20 МБ для учета дополнительных заголовков при обработке в памяти. Используйте следующую команду: SET work_mem TO '25MB'
  3. Выполните EXPLAIN ANALYZE на проблемном запросе в том же сеансе.
  4. Просмотрите выходные данные для "Sort Method: quicksort Memory: xkB". Если оно указывает "external merge Disk: xkB", увеличивайте значение work_mem и повторно проверяйте до тех пор, пока не появится "quicksort Memory". Появление "quicksort Memory" сигнализирует о том, что запрос теперь выполняется в памяти.
  5. После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.