Использование ресурсов и память
autovacuum_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum. |
Тип данных | целое число |
Значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамический |
Документация | autovacuum_work_mem |
буферы временных меток фиксации
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем памяти, используемый для кэширования содержимого pg_commit_ts. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 1024 |
Тип параметра | только для чтения |
Документация | commit_timestamp_buffers |
тип динамической общей памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Коэффициент work_mem для использования в хэш-таблицах. |
Тип данных | числовой |
Значение по умолчанию | 2 |
Допустимые значения | 1-1000 |
Тип параметра | динамичный |
Документация | hash_mem_multiplier |
большие страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Значение по умолчанию | try |
Допустимые значения | on,off,try |
Тип параметра | статичный |
Документация | большие_страницы |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности и эффективно разгружает ЦП.
- Они уменьшают накладные расходы, связанные с задачами управления памятью, за счет снижения числа промахов буфера преобразования страниц (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который их поддерживает, оставьте
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами выделение больших страниц автоматически выполняется из операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения в shared_buffers
.
размер_большой_страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Размер огромной страницы, которую следует запросить. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | huge_page_size |
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Значение по умолчанию | 65536 |
Допустимые значения | 65536 |
Тип параметра | только для чтения |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | динамический |
Документация | maintenance_work_mem |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для запросов, maintenance_work_mem
зарезервировано для задач, поддерживающих и оптимизирующих структуру базы данных.
![ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
на чрезмерно агрессивные значения может периодически приводить к ошибке нехватки памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Ограничение памяти на вакуум: если вы хотите ускорить очистку мертвых кортежей, увеличивая
maintenance_work_mem
, помните, что уVACUUM
есть встроенное ограничение на сбор идентификаторов мертвых кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: вы можете использовать параметр
autovacuum_work_mem
для независимого управления памятью, используемой операциями автовакуума. Этот параметр выступает в качестве подмножестваmaintenance_work_mem
. Вы можете определить, сколько памяти используется функцией autovacuum, не влияя на выделение памяти для других задач технического обслуживания и операций определения данных.
Заметки, относящиеся к Azure
Значение по умолчанию для maintenance_work_mem
параметра сервера вычисляется при подготовке экземпляра гибкого сервера Azure Database для PostgreSQL на основе названия продукта, выбранного для его вычислительных ресурсов. Любые последующие изменения в выборе вычислительного продукта, поддерживающего гибкий сервер, не будут влиять на значение по умолчанию для параметра сервера maintenance_work_mem
этого экземпляра.
При каждой смене продукта, назначенного экземпляру, необходимо также скорректировать значение параметра maintenance_work_mem
в соответствии с формулой, приведенной ниже.
Формула, используемая для вычисления значенияmaintenance_work_mem
.(long)(82.5 * ln(memoryGiB) + 40) * 1024
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | объём памяти для обслуживания |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157,696 КиБ |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450 560 КиБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
максимальное количество подготовленных транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | статичный |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
минимальная динамическая общая память (min_dynamic_shared_memory)
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | минимальная динамическая общая память |
multixact_member_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем общей памяти, используемой для кэширования содержимого pg_multixact/членов. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 32 |
Допустимые значения | 32 |
Тип параметра | только для чтения |
Документация | multixact_member_buffers |
мультисакт смещение буферов
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем общей памяти, используемой для кэширования содержимого pg_multixact/offsets. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 16 |
Допустимые значения | 16 |
Тип параметра | только для чтения |
Документация | multixact_offset_buffers |
буферы уведомления
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем общей памяти, используемой для кэширования содержимого pg_notify. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 16 |
Допустимые значения | 16 |
Тип параметра | только для чтения |
Документация | notify_buffers |
сериализуемые_буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем общей памяти, используемой для кэширования содержимого pg_serial. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 32 |
Допустимые значения | 32 |
Тип параметра | только для чтения |
Документация | сериализуемые_буферы |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статический |
Документация | shared_buffers |
Описание
Параметр 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 |
тип разделяемой памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | тип_разделяемой_памяти |
буферы_подтранзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем общей памяти, используемой для кэширования содержимого pg_subtrans. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 1024 |
Тип параметра | только для чтения |
Документация | буферы субтранзакций |
временные_буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамичный |
Документация | temp_buffers |
буферы транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Указывает объем общей памяти, используемой для кэширования содержимого pg_xact. Единица составляет 8 кб. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 1024 |
Тип параметра | только для чтения |
Документация | буферы_транзакций |
предел использования буфера вакуума
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает размер буферного пула для ВАКУУМа, АНАЛИЗА и автовакума. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 0-16777216 |
Тип параметра | динамичный |
Документация | vacuum_buffer_usage_limit |
work_mem (оперативная память)
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | целое число |
Значение по умолчанию | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | динамичный |
Документация | work_mem |
Описание
Параметр 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
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый каждым процессом автовакуумирования. |
Тип данных | целое число |
Значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамичный |
Документация | autovacuum_work_mem |
тип динамической общей памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | динамический_тип_общей_памяти |
множитель памяти хеша
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | числовой |
Значение по умолчанию | 2 |
Допустимые значения | 1-1000 |
Тип параметра | динамичный |
Документация | hash_mem_multiplier |
большие страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Значение по умолчанию | try |
Допустимые значения | on,off,try |
Тип параметра | статичный |
Документация | huge_pages |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование больших страниц может предложить преимущества для производительности, которые эффективно снижают нагрузку на ЦП.
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если начать с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который делает, сохраните
huge_pages
параметрTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество больших страниц автоматически корректируется при изменении настроек общей памяти, включая изменения shared_buffers
.
размер больших страниц
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Размер огромной страницы, которую следует запросить. |
Тип данных | integer |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | размер_большой_страницы |
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | целое число |
Значение по умолчанию | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | динамический |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | динамический |
Документация | maintenance_work_mem |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для операций с запросами, maintenance_work_mem
предназначено для задач, которые обеспечивают поддержку и оптимизацию структуры базы данных.
! [ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Ограничение памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая объем памяти, помните, что
VACUUM
имеет встроенное ограничение на сбор идентификаторов мертвых кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: вы можете использовать настройку
autovacuum_work_mem
, чтобы управлять памятью, которую независимо используют операции автовакуума. Этот параметр выступает в качестве подмножестваmaintenance_work_mem
. Вы можете решить, сколько памяти использует autovacuum, не влияя на выделение памяти для других задач обслуживания и операций определения данных.
Заметки, относящиеся к Azure
Значение по умолчанию для параметра сервера maintenance_work_mem
рассчитывается при настройке экземпляра базы данных Azure для гибкого сервера PostgreSQL на основе имени продукта, который вы выбираете для его вычислительных ресурсов. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не будут влиять на значение по умолчанию для maintenance_work_mem
параметра сервера этого экземпляра.
При каждом изменении продукта, назначенного экземпляру, необходимо также настроить значение параметра maintenance_work_mem
в соответствии со значениями в следующей формуле.
Формула, используемая для вычисления значенияmaintenance_work_mem
.(long)(82.5 * ln(memoryGiB) + 40) * 1024
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | maintenance_work_mem |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157 696 КиБ |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450,560 КиБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
max_подготовленных_транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | статичный |
Документация | max_prepared_transactions |
max_stack_depth
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
min_dynamic_shared_memory
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | min_dynamic_shared_memory |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статический |
Документация | shared_buffers |
Описание
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, они быстро извлекаются, позволяя избежать более длительного чтения с диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при создании экземпляра базы данных Azure для гибкого сервера PostgreSQL, на основе имени продукта, который вы выбираете для его вычислительных ресурсов. Любые последующие изменения выбора продукта на вычисления, поддерживающие гибкий сервер, не влияют на значение по умолчанию параметра сервера shared_buffers
для этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffers
и memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers
, это memoryGib * 32768
.
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | общие буферы |
---|---|
2 ГиБ | 32768 |
4 ГиБ | 131072 |
8 ГиБ | 262144 |
16 ГиБ | 524288 |
32 ГиБ | 1048576 |
48 ГиБ | 1572864 |
64 ГиБ | 2097152 |
80 ГиБ | 2621440 |
128 ГиБ | 4194304 |
160 ГиБ | 5242880 |
192 ГиБ | 6291456 |
256 Гиб | 8388608 |
384 ГиБ | 12582912 |
432 ГиБ | 14155776 |
672 Гиб | 22020096 |
тип общей памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
временные буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамичный |
Документация | temp_buffers |
предел использования вакуумного буфера
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает размер буферного пула для вакуума, анализа и автовакуума. |
Тип данных | целое число |
Значение по умолчанию | 256 |
Допустимые значения | 0-16777216 |
Тип параметра | динамичный |
Документация | vacuum_buffer_usage_limit |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | целое число |
Значение по умолчанию | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | динамичный |
Документация | work_mem |
Описание
Параметр 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
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти для каждого рабочего процесса autovacuum. |
Тип данных | целое число |
Значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамический |
Документация | autovacuum_work_mem |
dynamic_shared_memory_type
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | тип динамической общей памяти |
множитель памяти hash
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Значение по умолчанию | 2 |
Допустимые значения | 1-1000 |
Тип параметра | динамичный |
Документация | hash_mem_multiplier |
большие страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Значение по умолчанию | try |
Допустимые значения | on,off,try |
Тип параметра | static |
Документация | huge_pages |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно разгрузят ЦП.
- Они снижают нагрузку, связанную с задачами управления памятью, например, уменьшают количество промахов буфера трансляции транзакций (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если вы начинаете с меньшего сервера, который не поддерживает огромные страницы, но ожидаете масштабирования до сервера, который поддерживает, оставьте параметр
huge_pages
наTRY
для беспрепятственного перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными процессорными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество больших страниц автоматически корректируется при изменении параметров общей памяти, включая изменения shared_buffers
.
huge_page_size
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Размер огромной страницы, которую следует запросить. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | размер_большой_страницы |
логическое_декодирование_рабочая_память
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | целое число |
Значение по умолчанию | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | динамичный |
Документация | logical_decoding_work_mem |
память для обслуживания
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | динамичный |
Документация | maintenance_work_mem |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для операций с запросами, maintenance_work_mem
зарезервировано для задач, которые поддерживают и оптимизируют структуру базы данных.
! [ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Ограничение памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличив
maintenance_work_mem
, помните, чтоVACUUM
имеет встроенное ограничение для сбора идентификаторов мертвых кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: вы можете использовать настройку
autovacuum_work_mem
для независимого управления памятью, используемой операциями автовакуума. Этот параметр выступает в качестве подмножестваmaintenance_work_mem
. Вы можете определить, сколько памяти использует autovacuum, не влияя на распределение памяти для других задач обслуживания и операций определения данных.
Заметки, относящиеся к Azure
Значение по умолчанию для maintenance_work_mem
параметра сервера вычисляется при подготовке экземпляра гибкого сервера Azure Database для PostgreSQL, на основе имени продукта, выбранного для вычислительных мощностей. Любые последующие изменения в выборе продукта в пользу вычислительных ресурсов, поддерживающих гибкий сервер, не будут влиять на значение по умолчанию для параметра сервера maintenance_work_mem
этого экземпляра.
При каждом изменении продукта, назначенного экземпляру, необходимо также настроить значение параметра maintenance_work_mem
в соответствии со значениями в следующей формуле.
Формула, используемая для вычисления значенияmaintenance_work_mem
.(long)(82.5 * ln(memoryGiB) + 40) * 1024
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | параметр_обслуживания_work_mem |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157 696 КИБ |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450,560 КиБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
максимальное количество подготовленных транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | статический |
Документация | max_prepared_transactions |
максимальная глубина стека
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
минимальная динамическая общая память
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | минимальная_динамическая_общая_память |
Распределенные_буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статический |
Документация | shared_buffers |
Описание
Параметр 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 |
тип_общей_памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
временные буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамичный |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | целое число |
Значение по умолчанию | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | динамический |
Документация | work_mem |
Описание
Параметр 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
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum. |
Тип данных | целое число |
Значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамичный |
Документация | autovacuum_work_mem |
тип_динамической_разделяемой_памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | числовой |
Default value | 1 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
огромные страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Значение по умолчанию | try |
Допустимые значения | on,off,try |
Тип параметра | неподвижный |
Документация | большие_страницы |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование страниц большого размера может предложить преимущества производительности, которые эффективно разгружают ЦП.
- Они снижают нагрузку, связанную с задачами управления памятью, например, приводя к уменьшению числа промахов буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если вы начнете с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который поддерживает, сохраните
huge_pages
параметрTRY
для плавного перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами большие страницы автоматически выделяются из операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически корректируется при изменении параметров общей памяти, включая изменения shared_buffers
.
размер больших страниц
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Размер большой страницы, которую следует запросить. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | размер_огромной_страницы |
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 |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервирован для задач, поддерживающих и оптимизирующих структуру базы данных.
! [ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
на чрезмерно агрессивные значения может периодически приводить к ошибке нехватки памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Ограничение объёма памяти вакуума: если вы хотите ускорить очистку мёртвых кортежей, увеличив
maintenance_work_mem
, помните, что вVACUUM
имеется встроенное ограничение для сбора идентификаторов мёртвых кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая используется операциями автовакуума независимо. Этот параметр выступает в качестве подмножестваmaintenance_work_mem
. Вы можете решить, сколько памяти используется автоматически, не влияя на выделение памяти для других задач обслуживания и операций определения данных.
Заметки, относящиеся к Azure
Значение по умолчанию для параметра сервера maintenance_work_mem
вычисляется при выделении инстанции гибкого сервера Azure Database for PostgreSQL, на основе имени продукта, которое вы выбрали для его вычислительных ресурсов. Любые последующие изменения в выборе продукта на вычислительную мощность, поддерживающую гибкий сервер, не будут влиять на значение параметра сервера maintenance_work_mem
по умолчанию для этого экземпляра.
При каждом изменении продукта, назначенного экземпляру, необходимо также настроить значение параметра maintenance_work_mem
в соответствии со значениями в следующей формуле.
Формула, используемая для вычисления значенияmaintenance_work_mem
.(long)(82.5 * ln(memoryGiB) + 40) * 1024
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | память_обслуживания_работы |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157 696 КИБ |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450 560 КИБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
max_prepared_transactions
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | integer |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | стационарный |
Документация | max_prepared_transactions |
max_stack_depth (максимальная глубина стека)
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
min_dynamic_shared_memory
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Объем динамической общей памяти, зарезервированной при запуске. |
Тип данных | целое число |
Default value | 0 |
Допустимые значения | 0 |
Тип параметра | только для чтения |
Документация | min_dynamic_shared_memory |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | целое число |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статичный |
Документация | shared_buffers |
Описание
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, оно быстро извлекается, избегая более трудоемкого чтения с диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра гибкого сервера базы данных Azure для PostgreSQL на основе имени продукта, выбранного для вычислительных ресурсов. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffers
, memoryGib * 16384
.
Для виртуальных машин с объемом памяти более 2 ГиБ используется формула 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 |
тип_общей_памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Default value | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | shared_memory_type |
temp_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | integer |
Default value | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамичный |
Документация | temp_buffers |
work_mem (рабочая память)
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | integer |
Значение по умолчанию | 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
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum. |
Тип данных | целое число |
Значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамичный |
Документация | autovacuum_work_mem |
тип динамической разделяемой памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
hash_mem_multiplier
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Множитель work_mem, используемое для хэш-таблиц. |
Тип данных | numeric |
Значение по умолчанию | 1 |
Допустимые значения | 1-1000 |
Тип параметра | динамичный |
Документация | hash_mem_multiplier |
большие страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Значение по умолчанию | try |
Допустимые значения | on,off,try |
Тип параметра | статический |
Документация | huge_pages |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно снизят нагрузку на ЦП.
- Они снижают нагрузку, связанную с задачами управления памятью, например, за счет уменьшения пропусков буфера трансляции TLB.
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если вы начинаете с меньшего сервера, который не поддерживает большие страницы, но ожидаете переход на сервер, который поддерживает, оставьте параметр
huge_pages
наTRY
для плавного перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при изменении параметров общей памяти, включая изменения shared_buffers
.
logical_decoding_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для логического декодирования. |
Тип данных | integer |
Значение по умолчанию | 65536 |
Допустимые значения | 64-2147483647 |
Тип параметра | динамичный |
Документация | logical_decoding_work_mem |
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | integer |
Default value | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | динамический |
Документация | maintenance_work_mem |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для выполнения запросов, maintenance_work_mem
зарезервирован для задач, которые поддерживают и оптимизируют структуру базы данных.
! [ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
чрезмерно агрессивных значений может периодически привести к ошибке памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Ограничение памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличив
maintenance_work_mem
, учтите, чтоVACUUM
имеет встроенное ограничение на сбор идентификаторов мертвых кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: вы можете использовать
autovacuum_work_mem
параметр для управления памятью, которая использует операции автовакуума независимо. Этот параметр выступает в качестве подмножестваmaintenance_work_mem
. Вы можете настроить, сколько памяти использует autovacuum, не влияя на выделение памяти для других задач обслуживания и операций определения структуры данных.
Заметки, относящиеся к Azure
Значение по умолчанию для параметра сервера maintenance_work_mem
вычисляется при подготовке экземпляра гибкого сервера базы данных Azure для PostgreSQL на основе имени продукта, выбранного для вычислительных ресурсов. Любые последующие изменения выбора продукта на вычислительные ресурсы, поддерживающие гибкий сервер, не будут влиять на значение по умолчанию для maintenance_work_mem
параметра сервера этого экземпляра.
При каждом изменении продукта, назначенного экземпляру, необходимо также скорректировать значение параметра maintenance_work_mem
согласно значениям в следующей формуле.
Формула, используемая для вычисления значенияmaintenance_work_mem
.(long)(82.5 * ln(memoryGiB) + 40) * 1024
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | память_для_обслуживания |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157 696 КиБ |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450 560 КиБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
максимум_подготовленных_транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | статичный |
Документация | max_prepared_transactions |
максимальная глубина стека
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | максимальная_глубина_тека |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | integer |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статический |
Документация | shared_buffers |
Описание
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, он быстро извлекается и проходит более много времени чтения диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для shared_buffers
параметра сервера вычисляется при подготовке экземпляра База данных Azure для PostgreSQL гибкого сервера на основе имени продукта, выбранного для вычисления. Любые последующие изменения выбора продуктов для вычислительной системы, поддерживающей гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffers
, которая является memoryGib * 16384
.
Для виртуальных машин с более чем 2 ГиБ используется формула 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 |
тип общей памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | тип_общей_памяти |
временные буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамичный |
Документация | temp_buffers |
рабочая память
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | целое число |
Значение по умолчанию | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | динамичный |
Документация | work_mem |
Описание
Параметр 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
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum. |
Тип данных | целое число |
Значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамичный |
Документация | autovacuum_work_mem |
тип динамической общей памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | dynamic_shared_memory_type |
множитель памяти хэширования
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Несколько work_mem использовать для хэш-таблиц. |
Тип данных | numeric |
Default value | 1 |
Допустимые значения | 1-1000 |
Тип параметра | по строкам |
Документация | hash_mem_multiplier |
huge_pages
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Description | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Default value | try |
Допустимые значения | on,off,try |
Тип параметра | статический |
Документация | большие_страницы |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, которые эффективно разгружают процессор.
- Они снижают нагрузку, связанную с задачами управления памятью, например, уменьшая количество промахов буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если вы начинаете с меньшего сервера, который не поддерживает большие страницы, но предполагаете масштабирование до сервера, который их поддерживает, сохраните настройку
huge_pages
наTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически настраивается при внесении изменений в параметры общей памяти, включая shared_buffers
.
объем памяти для обслуживания
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | динамический |
Документация | maintenance_work_mem |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для операций запросов, maintenance_work_mem
зарезервирован для задач, поддерживающих и оптимизирующих структуру базы данных.
! [ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
на слишком агрессивные значения может периодически вызывать ошибку нехватки памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Крышка памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая, помните, что
maintenance_work_mem
имеет встроенное ограничение для сбора мертвых идентификаторовVACUUM
кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: Вы можете использовать
autovacuum_work_mem
параметр для управления памятью, используемой автовакауумом, отдельно от других операций. Этот параметр выступает в качестве подмножества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
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | память для обслуживания |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157 696 КиБ |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450 560 КиБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
макс_подготовленных_транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | статичный |
Документация | max_prepared_transactions |
максимальная глубина стека
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Значение по умолчанию | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
общие_буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статический |
Документация | shared_buffers |
Описание
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, они быстро извлекаются и обходят более длительное считывание с диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для параметра сервера shared_buffers
вычисляется при развертывании экземпляра базы данных Azure для PostgreSQL гибкого сервера, основываясь на названии продукта, который вы выбрали для вычислительных ресурсов. Любые последующие изменения выбора продукта на вычислительные мощности, поддерживающие гибкий сервер, не влияют на значение по умолчанию для shared_buffers
параметра сервера этого экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ используется формула для вычисления значения shared_buffers
memoryGib * 16384
.
Для виртуальных машин с объемом памяти более чем 2 ГиБ формула, используемая для вычисления значения shared_buffers
, является memoryGib * 32768
.
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | общие буферы |
---|---|
2 ГиБ | 32768 |
4 ГиБ | 131072 |
8 ГиБ | 262144 |
16 ГиБ | 524288 |
32 ГиБ | 1048576 |
48 ГиБ | 1572864 |
64 ГиБ | 2097152 |
80 ГиБ | 2621440 |
128 ГиБ | 4194304 |
160 ГиБ | 5242880 |
192 ГиБ | 6291456 |
256 Гиб | 8388608 |
384 ГиБ | 12582912 |
432 ГиБ | 14155776 |
672 Гиб | 22020096 |
тип_совместной_памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает реализацию общей памяти, используемую для основного региона общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | mmap |
Допустимые значения | mmap |
Тип параметра | только для чтения |
Документация | тип_совместной_памяти |
временные буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамический |
Документация | temp_buffers |
рабочая память
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | целое число |
Значение по умолчанию | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | динамичный |
Документация | work_mem |
Описание
Параметр 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
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый каждым рабочим процессом autovacuum. |
Тип данных | целое число |
значение по умолчанию | -1 |
Допустимые значения | -1-2097151 |
Тип параметра | динамичный |
Документация | autovacuum_work_mem |
тип динамической общей памяти
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Выбирает используемую динамическую реализацию общей памяти. |
Тип данных | перечисление |
Значение по умолчанию | posix |
Допустимые значения | posix |
Тип параметра | только для чтения |
Документация | тип_динамической_общей_памяти |
большие страницы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Включает или отключает использование огромных страниц памяти. Этот параметр не применим к серверам с менее чем 4 виртуальными ядрами. |
Тип данных | перечисление |
Значение по умолчанию | try |
Допустимые значения | on,off,try |
Тип параметра | статический |
Документация | huge_pages |
Описание
Огромные страницы — это функция, которая позволяет управлять памятью в больших блоках. Обычно можно управлять блоками до 2 МБ, а не стандартными 4 КБ страницами.
Использование огромных страниц может предложить преимущества производительности, эффективно разгружая ЦП.
- Они снижают нагрузку, связанную с задачами управления памятью, например меньше ошибок буфера преобразования (TLB).
- Они сокращают время, необходимое для управления памятью.
В частности, в PostgreSQL можно использовать огромные страницы только для общей области памяти. Значительную часть общей области памяти выделяется для общих буферов.
Еще одним преимуществом является то, что огромные страницы предотвращают переключение общей области памяти на диск, что еще больше стабилизирует производительность.
Рекомендации
- Для серверов, имеющих значительные ресурсы памяти, избегайте отключения огромных страниц. Отключение огромных страниц может нарушить производительность.
- Если вы начнете с меньшего сервера, который не поддерживает огромные страницы, но вы ожидаете масштабирование до сервера, который поддерживает, оставьте
huge_pages
параметр наTRY
для простого перехода и оптимальной производительности.
Заметки, относящиеся к Azure
Для серверов с четырьмя или более виртуальными ядрами огромные страницы автоматически выделяются из базовой операционной системы. Эта функция недоступна для серверов с менее чем четырьмя виртуальными ядрами. Количество огромных страниц автоматически регулируется, если изменяется любой параметр общей памяти, включая изменения shared_buffers
.
maintenance_work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальный объем памяти, используемый для операций обслуживания, таких как VACUUM, Create Index. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 1024-2097151 |
Тип параметра | динамичный |
Документация | maintenance_work_mem |
Описание
maintenance_work_mem
— это параметр конфигурации в PostgreSQL. Он управляет объемом памяти, выделенной для операций обслуживания, таких как VACUUM
, CREATE INDEX
и ALTER TABLE
. В отличие от work_mem
, который влияет на выделение памяти для операций с запросами, maintenance_work_mem
зарезервирован для задач по поддержанию и оптимизации структуры базы данных.
! [ПРИМЕЧАНИЕ] Установка
maintenance_work_mem
слишком агрессивных значений может периодически привести к ошибке из-за нехватки памяти в системе. Крайне важно понимать объем памяти, доступный на сервере, и количество параллельных операций, которые могут выделить память для описанных ранее задач, прежде чем вносить изменения в этот параметр.
Ключевые моменты
-
Ограничение памяти вакуума: если вы хотите ускорить очистку мертвых кортежей, увеличивая
maintenance_work_mem
, помните, чтоVACUUM
имеет встроенное ограничение на количество идентификаторов мертвых кортежей. Он может использовать только до 1 ГБ памяти для этого процесса. -
Разделение памяти для autovacuum: вы можете использовать параметр
autovacuum_work_mem
для самостоятельного управления памятью, которую используют операции autovacuum. Этот параметр выступает в качестве подмножестваmaintenance_work_mem
. Вы можете решить, сколько памяти использует autovacuum, не влияя на выделение памяти для других задач обслуживания и операций определения данных.
Заметки, относящиеся к Azure
Значение по умолчанию для параметра сервера maintenance_work_mem
вычисляется при создании экземпляра гибкого сервера базы данных Azure для PostgreSQL на основе выбранного вами имени продукта для вычислительной мощности. Любые последующие изменения выбора продукта на вычисление, поддерживающее гибкий сервер, не будут влиять на значение по умолчанию для параметра сервера maintenance_work_mem
.
Каждый раз, когда вы меняете продукт, назначенный экземпляру, необходимо также настроить значение параметра maintenance_work_mem
в соответствии со значениями в следующей формуле.
Формула, используемая для вычисления значенияmaintenance_work_mem
.(long)(82.5 * ln(memoryGiB) + 40) * 1024
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | параметр maintenance_work_mem |
---|---|
2 ГиБ | 99 328 КиБ |
4 ГиБ | 157 696 KiB |
8 ГиБ | 216 064 КиБ |
16 ГиБ | 274 432 КиБ |
32 ГиБ | 332 800 КиБ |
48 ГиБ | 367 616 КиБ |
64 ГиБ | 392 192 КиБ |
80 ГиБ | 410 624 КиБ |
128 ГиБ | 450,560 КиБ |
160 ГиБ | 468 992 КиБ |
192 ГиБ | 484 352 КиБ |
256 Гиб | 508 928 КиБ |
384 ГиБ | 542 720 КиБ |
432 ГиБ | 552 960 КИБ |
672 Гиб | 590 848 КиБ |
максимальное количество подготовленных транзакций
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество одновременно подготовленных транзакций. При запуске сервера-реплики этот параметр должен иметь то же или более высокое значение, чем на основном сервере. |
Тип данных | целое число |
Значение по умолчанию | 0 |
Допустимые значения | 0-262143 |
Тип параметра | static |
Документация | max_prepared_transactions (максимальное количество подготовленных транзакций) |
max_stack_depth (максимальная глубина стека)
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальную глубину стека в килобайтах. |
Тип данных | целое число |
Default value | 2048 |
Допустимые значения | 2048 |
Тип параметра | только для чтения |
Документация | max_stack_depth |
shared_buffers
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает количество буферов общей памяти, используемых сервером. Единица составляет 8 кб. Допустимые значения находятся в диапазоне от 10% до 75% доступной памяти. |
Тип данных | целое число |
Значение по умолчанию | Зависит от ресурсов (виртуальных ядер, ОЗУ или дискового пространства), выделенных серверу. |
Допустимые значения | 16-1073741823 |
Тип параметра | статический |
Документация | shared_buffers |
Описание
Параметр shared_buffers
конфигурации определяет объем системной памяти, выделенной базе данных PostgreSQL для буферизации данных. Он служит централизованным пулом памяти, доступным для всех процессов базы данных.
Когда требуются данные, процесс базы данных сначала проверяет общий буфер. Если необходимые данные присутствуют, они быстро извлекаются и обходят более трудоемкое чтение с диска. Общие буферы служат посредником между процессами базы данных и диском, а также эффективно сокращают количество необходимых операций ввода-вывода.
Заметки, относящиеся к Azure
Значение по умолчанию для параметра сервера shared_buffers
вычисляется при развертывании экземпляра гибкого сервера Azure Database для PostgreSQL, на основе названия продукта, который вы выбираете для его вычислительных ресурсов. Любые последующие изменения выбора продукта для вычислительных ресурсов, которые поддерживают гибкий сервер, не влияют на значение по умолчанию параметра сервера данного экземпляра.
Каждый раз, когда вы изменяете продукт, назначенный экземпляру, следует также настроить значение параметра shared_buffers
в соответствии со значениями в следующих формулах.
Для виртуальных машин с объемом памяти до 2 ГиБ формула для вычисления значения shared_buffers
— это memoryGib * 16384
.
Для виртуальных машин, у которых объем памяти превышает 2 ГиБ, используется формулаshared_buffers
для вычисления значенияmemoryGib * 32768
.
В соответствии с предыдущей формулой в следующей таблице перечислены значения этого параметра сервера в зависимости от объема подготовленной памяти:
Размер памяти | разделяемые_буферы |
---|---|
2 ГиБ | 32768 |
4 ГиБ | 131072 |
8 ГиБ | 262144 |
16 ГиБ | 524288 |
32 ГиБ | 1048576 |
48 ГиБ | 1572864 |
64 ГиБ | 2097152 |
80 ГиБ | 2621440 |
128 ГиБ | 4194304 |
160 ГиБ | 5242880 |
192 ГиБ | 6291456 |
256 Гиб | 8388608 |
384 ГиБ | 12582912 |
432 ГиБ | 14155776 |
672 Гиб | 22020096 |
временные буферы
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает максимальное количество временных буферов, используемых каждым сеансом базы данных. |
Тип данных | целое число |
Значение по умолчанию | 1024 |
Допустимые значения | 100-1073741823 |
Тип параметра | динамичный |
Документация | temp_buffers |
work_mem
Атрибут | Значение |
---|---|
Категория | Использование ресурсов и память |
Описание | Задает объем памяти, используемый внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы дисков. |
Тип данных | целое число |
Значение по умолчанию | 4096 |
Допустимые значения | 4096-2097151 |
Тип параметра | динамичный |
Документация | work_mem |
Описание
Параметр 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"
сигнализирует, что запрос теперь выполняется в памяти. - После определения значения с помощью этого метода вы можете применить его глобально или на более детальном уровне (как описано ранее) для удовлетворения ваших операционных потребностей.