Использование ресурсов и память
autovacuum_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 2 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
huge_page_size
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Размер огромной страницы, которую следует запросить. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | huge_page_size |
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Default value | 65536 |
Допустимые значения | 65536 |
Тип параметра | только для чтения |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
min_dynamic_shared_memory
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | min_dynamic_shared_memory |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
vacuum_buffer_usage_limit
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает размер буферного пула для ВАКУУМа, АНАЛИЗА и автовакума. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 0-16777216 |
Тип параметра | по строкам |
Документация | vacuum_buffer_usage_limit |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 2 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
huge_page_size
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Размер огромной страницы, которую следует запросить. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | huge_page_size |
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Default value | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | по строкам |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
min_dynamic_shared_memory
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | min_dynamic_shared_memory |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
vacuum_buffer_usage_limit
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает размер буферного пула для ВАКУУМа, АНАЛИЗА и автовакума. |
Тип данных | integer |
Default value | 256 |
Допустимые значения | 0-16777216 |
Тип параметра | по строкам |
Документация | vacuum_buffer_usage_limit |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 2 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
huge_page_size
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Размер огромной страницы, которую следует запросить. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | huge_page_size |
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Default value | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | по строкам |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
min_dynamic_shared_memory
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | min_dynamic_shared_memory |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 1 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
huge_page_size
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Размер огромной страницы, которую следует запросить. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | huge_page_size |
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Default value | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | по строкам |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
min_dynamic_shared_memory
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | min_dynamic_shared_memory |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 1 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Default value | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | по строкам |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 1 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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. |
Тип данных | integer |
Default value | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | по строкам |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Default value | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Description
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно выгрузит ЦП:
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | по строкам |
Документация | maintenance_work_mem |
Description
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие work_mem
от того, что влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
Ключевые моменты
- Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
VACUUM
имеет встроенное ограничение для сбора мертвых идентификаторовmaintenance_work_mem
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. - Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножества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 ГиБ | 99328 КиБ |
4 ГиБ | 157696 КиБ |
8 ГиБ | 216064 КиБ |
16 ГиБ | 274432 КиБ |
32 ГиБ | 332800 КиБ |
48 ГиБ | 367616 КиБ |
64 ГиБ | 392192 КиБ |
80 ГиБ | 410624 КиБ |
128 ГиБ | 450560 KiB |
160 ГиБ | 468992 KiB |
192 ГиБ | 484352 КиБ |
256 Гиб | 508928 КиБ |
384 ГиБ | 542720 КиБ |
432 ГиБ | 552960 KiB |
672 Гиб | 590848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Default value | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальную глубину стека в килобайтах. |
Тип данных | integer |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | static |
Документация | shared_buffers |
Description
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула, используемая для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значенияshared_buffers
.memoryGib * 32768
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | shared_buffers |
---|---|
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 |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | по строкам |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Default value | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | по строкам |
Документация | 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"
о том, что запрос теперь работает в памяти. - После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.