3

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, это указывает на перегруженность дисковых подсистем .

💎 Рекомендации по анализу:

Пороговые значения:

  1. wa > 10-15% часто указывает на проблему с I/O.

  2. us + sy > 80% может сигнализировать о нехватке CPU.

  3. si/so > 0 — тревожный признак нехватки памяти.

Эти метрики помогают быстро определить тип проблемы (I/O, CPU, память) и начать углубленный анализ именно тех компонентов, которые вызывают ожидания в СУБД.

🚨 Пример из практики:

В PG_HAZEL : Определение причин инцидента производительности СУБД описывается инцидент, где рост wa в vmstat сопровождался увеличением времени записи на дисках /data и /wal, что прямо коррелировало с ростом ожиданий типа IO в PostgreSQL.

Дополнительные материалы

Анализ и аудит состояния инфраструктуры сервера СУБД с точки зрения связи производительности СУБД и состояния операционной системы.

Postgres DBA

157 постов27 подписчиков

Правила сообщества

Пока действуют стандартные правила Пикабу.