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