PG_HAZEL + VMSTAT : Причины роста ожиданий СУБД PostgreSQL
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Вопрос
Какие значения метрики vmstat могут являться причиной роста ожиданий СУБД PostgreSQL?
Ответ
⚙️ 1. Высокое значение wa (I/O wait)
Что показывает:
Процент времени, когда процессоры простаивают в ожидании завершения операций ввода-вывода (I/O).
Причины роста ожиданий СУБД:
Медленная дисковая подсистема (например, высокая задержка записи/чтения).
Интенсивные операции записи WAL (Write-Ahead Log) или чтения больших данных.
Недостаточная производительность хранилища (например, перегруженные диски RAID или облачные диски с ограниченным IOPS).
Связь с PostgreSQL:
Рост wa часто коррелирует с ожиданиями типа IO в PostgreSQL (например, datafile read, wal write) .
📊 2. Высокие значения bi (blocks in) и bo (blocks out)
Что показывают:
Количество блоков, читаемых (bi) и записываемых (bo) с диска в секунду.
Причины роста ожиданий СУБД:
Активная работа с большими объемами данных (например, полное сканирование таблиц, интенсивная запись WAL).
Неэффективные запросы, вызывающие чрезмерный I/O.
Связь с PostgreSQL:
Высокие bi/bo могут указывать на проблемы с ожиданиями BufferPin или IO в PostgreSQL .
💻 3. Низкое значение id (idle time) при высоком us (user time) или sy (system time)
Что показывает:
us: Время выполнения пользовательских процессов (например, вычисления в PostgreSQL).
sy: Время выполнения системных вызовов (например, управление памятью, планировщик ОС).
Причины роста ожиданий СУБД:
Высокая нагрузка на CPU из-за сложных запросов (агрегации, JOINs).
Конкуренция за ресурсы CPU (например, из-за параллельных процессов).
Резкий рост sy может указывать на проблемы с системными вызовами (например, частое переключение контекста).
Связь с PostgreSQL:
Это может коррелировать с ожиданиями CPU в PostgreSQL или блокировками (например, LWLock) .
🔄 4. Рост значения b (processes sleeping)
Что показывает:
Количество процессов, находящихся в состоянии ожидания (например, из-за I/O или блокировок).
Причины роста ожиданий СУБД:
Процессы PostgreSQL ждут завершения I/O-операций или освобождения блокировок.
Высокая конкуренция за ресурсы (диск, память, CPU).
Связь с PostgreSQL:
Прямо указывает на процессы, которые могут быть заблокированы в состоянии waiting в pg_stat_activity .
💾 5. Аномалии с swpd (swap used) и si/so (swap in/out)
Что показывают:
Использование swap-памяти и активность обмена с диском.
Причины роста ожиданий СУБД:
Нехватка оперативной памяти (например, из-за большого shared_buffers или неоптимизированных запросов).
Активное использование swap приводит к резкому росту I/O-ожиданий.
Связь с PostgreSQL:
Может вызывать ожидания, связанные с памятью (например, buffer read) или общим замедлением из-за свопинга .
📈 6. Сочетание высокого wa с низким id и высокими bi/bo
Интерпретация:
Это классический признак I/O-bound системы, где диск становится узким местом.
Пример:
Если wa постоянно превышает 20-30%, а id близок к 0, это указывает на перегруженность дисковых подсистем .
💎 Рекомендации по анализу:
Пороговые значения:
wa > 10-15% часто указывает на проблему с I/O.
us + sy > 80% может сигнализировать о нехватке CPU.
si/so > 0 — тревожный признак нехватки памяти.
Эти метрики помогают быстро определить тип проблемы (I/O, CPU, память) и начать углубленный анализ именно тех компонентов, которые вызывают ожидания в СУБД.
🚨 Пример из практики:
В PG_HAZEL : Определение причин инцидента производительности СУБД описывается инцидент, где рост wa в vmstat сопровождался увеличением времени записи на дисках /data и /wal, что прямо коррелировало с ростом ожиданий типа IO в PostgreSQL.

Postgres DBA
157 постов27 подписчиков
Правила сообщества
Пока действуют стандартные правила Пикабу.