
Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена
sektor305 12 минут назад Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена Простой 4 мин 164 Базы данных * PostgreSQL * SQL * DevOps * Высоконагруженные системы * Туториал В реальных проектах...
Значимый прорыв формирует отрасль ИИ: sektor305 12 минут назад Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена Простой 4 мин 164 Базы данных * PostgreSQL * SQL * DevOps * Высоконагруженные системы * Туториал В реальных проектах PostgreSQL часто работает не на полную мощность из-за дефолтных настроек, которые не учитывают специфику нагрузки. Разберём 5 неочевидных параметров, которые стоит подкрутить в postgresql. conf для стабильной работы в продакшене.
Важно: перед внесением изменений обязательно протестируйте их в тестовой среде. Изменения глобальных параметров конфигурации могут как ускорить, так и замедлить работу базы данных. random_page_cost — учим оптимизатор работать с SSDСуть: этот параметр задаёт относительную стоимость случайного чтения с диска по сравнению с последовательным.
Технические детали
По умолчанию он равен 4. 0, что рассчитано под классические HDD. Проблема: если у вас SSD (или NVMe), база будет «бояться» использовать индексы, предпочитая полное сканирование таблицы, что сильно замедляет запросы.
Решение: уменьшите значение до 1. Это даст сигнал оптимизатору, что случайное чтение почти не уступает последовательному, и он начнёт активнее строить планы с индексами. Пример:sqlALTER SYSTEM SET random_page_cost = 1.
1; ALTER SYSTEM SET random_page_cost = 1. 1; Как применить: после выполнения ALTER SYSTEM обязательно выполните SELECT pg_reload_conf(); или перезапустите сервер, чтобы изменения вступили в силу. effective_cache_size — правильный взгляд на кэшСуть: планировщик запросов использует этот параметр, чтобы оценить, сколько данных может уместиться в кэше ОС и самой базы.
Отраслевые последствия
От него напрямую зависит выбор между индексом и полным сканированием. Ошибка: часто оставляют дефолтные 4 ГБ, даже если у сервера 32+ ГБ ОЗУ. Решение: установите значение в диапазоне 50–75% от общего объёма оперативной памяти сервера.
Это заставит планировщик чаще выбирать индексное сканирование. Пример для сервера с 16 ГБ ОЗУ:sqlALTER SYSTEM SET effective_cache_size = '12GB'; -- Допустимо также без кавычек: effective_cache_size = 12GB ALTER SYSTEM SET effective_cache_size = '12GB'; -- Допустимо также без кавычек: effective_cache_size = 12GB Как проверить эффективность: Выполните запрос, чтобы узнать процент попаданий в кэш:sqlSELECT sum(blks_hit) / (sum(blks_hit) + sum(blks_read)) * 100 AS cache_hit_ratio FROM pg_stat_database; SELECT sum(blks_hit) / (sum(blks_hit) + sum(blks_read)) * 100 AS cache_hit_ratio FROM pg_stat_database; Совет: для более детального анализа используйте представление pg_stat_statements — агрегированные данные по всей базе могут быть неинформативны. autovacuum_vacuum_scale_factor — настраиваем частоту «уборки»Суть: параметр определяет, при каком проценте изменённых строк в таблице запустится VACUUM.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





