2.0Kпросмотров
68.7%от подписчиков
13 января 2026 г.
statsScore: 2.2K
🔬 PostgreSQL 18 и поддержка NUMA (libnuma). Всем привет! Надеюсь все пришли в себя после длинных выходных и готовы воспринимать информацию ☺️ В PostgreSQL версии 18 была представлена начальная поддержка архитектуры NUMA (Non-Uniform Memory Access, неоднородный доступ к памяти), которая реализована с использованием библиотеки libnuma. Чтобы эта поддержка работала, PostgreSQL должна быть собрана с опциец конфигурации --with-libnuma. Эта функция помогает оптимизировать производительность на многопроцессорных серверах, управляя распределением памяти между различными узлами NUMA. Ключевые моменты поддержки PostgreSQL libnuma: 1️⃣ До версии 18 управление производительностью PostgreSQL в системах с NUMA в значительной степени зависело от конфигурации на уровне операционной системы (например, использование numactl с политикой чередования interleave и включение огромных страниц(huge pages)). PostgreSQL 18 интегрировал явную поддержку NUMA на уровне приложения, что позволяет осуществлять более детальный контроль и потенциально приводит к значительному повышению производительности, особенно на серверах с несколькими процессорными сокетами; 2️⃣ Чтобы включить эту поддержку, PostgreSQL должен быть скомпилирован из исходного кода с использованием флага --with-libnuma. Если сервер собран с этой поддержкой, SQL-функция pg_numa_available() будет возвращать true; 3️⃣ Поддержка libnuma вводит новые системные представления для наблюдения: 📌 pg_shmem_allocations_numa: Показывает, как распределены аллокации общей памяти по узлам NUMA; 📌 pg_buffercache_numa: Предоставляет информацию о NUMA, связанную с кешем общих буферов; 📌 pg_numa_available(): Функция для проверки, была ли поддержка NUMA включена при компиляции; 4️⃣ Цель интеграции libnuma — обеспечить, чтобы процессы обращались к памяти, которая физически "ближе" к ядру процессора, на котором они выполняются. Это уменьшает задержки, связанные с доступом к удалённой памяти через межсоединение (основное узкое место в архитектурах NUMA); 5️⃣ Даже с новой поддержкой libnuma общие рекомендации по запуску PostgreSQL в системах NUMA по-прежнему включают включение огромных страниц (huge pages) в ОС и конфигурации PostgreSQL (huge_pages = on) для эффективного управления памятью. Однако новая встроенная поддержка меняет некоторые предыдущие лучшие практики, касающиеся политик NUMA на уровне ОС, таких как чередование (interleave). В общем и целом новая поддержка libnuma в PostgreSQL должна упростить настройку производительности на многопроцессорных серверах, так что можно тестировать и начинать пользоваться! Всем легкой рабочей недели! До связи! #pgbase