
Нейросеть рисует и пишет
19 постов
19 постов
16 постов
110 постов
40 постов
107 постов
114 постов
20 постов
📅 Дата публикации: 15 сентября 2025 года
📍 Место: Россия
Комплекс PG_HAZEL представляет собой инновационное решение для глубокого анализа производительности СУБД PostgreSQL. Этот инструмент сочетает в себе методы статистического анализа, мониторинга в реальном времени и причинно-следственного моделирования, что позволяет точно определять корневые причины инцидентов производительности и прогнозировать потенциальные сбои.
PG_HAZEL использует методы корреляционного анализа для установления взаимосвязей между:
Метриками ОС (iostat, vmstat, использование CPU, памяти, дискового I/O).
Ожиданиями СУБД PostgreSQL (типы ожиданий IO, IPC, LWLock, и др.).
Показателями производительности СУБД (операционная скорость, ожидания СУБД, индикатор деградации производительности СУБД).
Тактический и оперативный анализ
PG_HAZEL работает на тактическом уровне, анализируя влияние отдельных SQL-запросов на производительность СУБД. Он идентифицирует запросы, которые оказывают наибольшее негативное воздействие, и связывает их с конкретными типами ожиданий (IO, IPC, LWLOCK).
Многомерный анализ производительности
PG_HAZEL интегрирует данные из различных источников, включая метрики ОС (iostat, vmstat), события ожидания PostgreSQL и статистику выполнения SQL-запросов. Это позволяет построить единую модель производительности и количественно оценить вклад каждого фактора в общую производительность СУБД.
Планируемое направление развития : причинно-следственный анализ и прогнозное моделирование, визуализация и интерактивные дашборды
Используя методы причинности по Грэнджеру и байесовские сети, комплекс поможет выявляет не просто корреляции, а реальные причинно-следственные связи между метриками. Например, он может определить, что рост времени отклика диска (await) вызывает увеличение времени ожидания ввода-вывода в PostgreSQL, что приводит к деградации производительности. Используя методы ARIMA и машинного обучения возможно будет прогнозировать инциденты производительности СУБД PostgreSQL , таких как исчерпание дискового пространства или достижение критической нагрузки на CPU. Это позволит администраторам СУБД заранее принимать превентивные меры.
Тепловые карты(heatmaps) корреляций и дашборды, позволят быстро выявлять аномалии и анализировать их в контексте всех метрик.
PG_HAZEL уже успешно применяется для анализа инцидентов производительности в реальных условиях.
Кроме того, комплекс используется для нагрузочного тестирования, помогая определить предельные значения нагрузки, которые СУБД может выдержать без деградации производительности.
📈 Преимущества подхода
Раннее обнаружение проблем
Анализ метрик ОС позволяет выявлять потенциальные проблемы до их воздействия на производительность СУБД:
Прогнозирование исчерпания дискового пространства
Выявление растущей нагрузки на CPU и память
Обнаружение деградации производительности дисковых подсистем
Точное определение корневой причины инцидентов значительно сокращает время восстановления:
Четкое разграничение проблем ОС и проблем СУБД
Возможность фокусирования на реальной причине, а не симптомах
1.Рост ожиданий типа IO в PostgreSQL:
В ходе анализа инцидента производительности PG_HAZEL выявил, что наибольшая корреляция наблюдается между ожиданиями типа IPC и снижением операционной скорости СУБД. Это указало на проблему взаимодействия между процессами, что позволило администраторам быстро устранить причину.
2.Рост времени отклика дисков в iostat:
Начало инцидента: Рост утилизации CPU и значений iowait в метриках ОС
Корреляционный анализ: Выявление высокой корреляции между:
- Ростом времени ожидания записи для устройств хранения (/data и /wal)
- Снижением производительности СУБД
- Ростом ожиданий типа IO в PostgreSQL
Заключение: Первичной причиной являлись проблемы на уровне дисковых подсистем
«PG_HAZEL — это не просто инструмент мониторинга, а экспертная система, которая превращает разрозненные метрики в понятные и осуществимые предложения. Наша цель — сделать диагностику производительности PostgreSQL максимально автоматизированной и точной».
В ближайших планах развития PG_HAZEL — разработка и внедрение методов причинно-следственного анализа и прогнозного моделирования.
Разработчик PG_HAZEL специализируется на создании решений для мониторинга и анализа производительности СУБД PostgreSQL.
Наша миссия — помогать компаниям поддерживать высокую производительность и надежность их баз данных.
Для получения дополнительной информации обращайтесь:
Имя: Сунгатуллин Ринат Раисович
Телефон: +7 927 245 80 49
Email: kznalp@yandex.ru
Веб-сайт: https://dzen.ru/kznalp
PG_HAZEL устанавливает новый стандарт в мониторинге и диагностике производительности PostgreSQL. Его способность объединять данные из различных источников, выявлять корневые причины проблем и прогнозировать инциденты делает его незаменимым инструментом для администраторов баз данных и IT-специалистов.
Для получения более подробной информации посетите https://dzen.ru/kznalp.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Какие значения метрики vmstat могут являться причиной роста ожиданий СУБД PostgreSQL?
Что показывает:
Процент времени, когда процессоры простаивают в ожидании завершения операций ввода-вывода (I/O).
Медленная дисковая подсистема (например, высокая задержка записи/чтения).
Интенсивные операции записи WAL (Write-Ahead Log) или чтения больших данных.
Недостаточная производительность хранилища (например, перегруженные диски RAID или облачные диски с ограниченным IOPS).
Рост wa часто коррелирует с ожиданиями типа IO в PostgreSQL (например, datafile read, wal write) .
Что показывают:
Количество блоков, читаемых (bi) и записываемых (bo) с диска в секунду.
Активная работа с большими объемами данных (например, полное сканирование таблиц, интенсивная запись WAL).
Неэффективные запросы, вызывающие чрезмерный I/O.
Высокие bi/bo могут указывать на проблемы с ожиданиями BufferPin или IO в PostgreSQL .
Что показывает:
us: Время выполнения пользовательских процессов (например, вычисления в PostgreSQL).
sy: Время выполнения системных вызовов (например, управление памятью, планировщик ОС).
Высокая нагрузка на CPU из-за сложных запросов (агрегации, JOINs).
Конкуренция за ресурсы CPU (например, из-за параллельных процессов).
Резкий рост sy может указывать на проблемы с системными вызовами (например, частое переключение контекста).
Это может коррелировать с ожиданиями CPU в PostgreSQL или блокировками (например, LWLock) .
Что показывает:
Количество процессов, находящихся в состоянии ожидания (например, из-за I/O или блокировок).
Процессы PostgreSQL ждут завершения I/O-операций или освобождения блокировок.
Высокая конкуренция за ресурсы (диск, память, CPU).
Прямо указывает на процессы, которые могут быть заблокированы в состоянии waiting в pg_stat_activity .
Что показывают:
Использование swap-памяти и активность обмена с диском.
Нехватка оперативной памяти (например, из-за большого shared_buffers или неоптимизированных запросов).
Активное использование swap приводит к резкому росту I/O-ожиданий.
Может вызывать ожидания, связанные с памятью (например, buffer read) или общим замедлением из-за свопинга .
Интерпретация:
Это классический признак 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 (возможны правки в исходной статье).
Экспериментально подтвердить корреляцию и причинно-следственную связь снижения производительности СУБД PostgreSQL и рост количества переключений контекста ОС (показатель cs метрики vmstat).
Рост cs/vmstat сильно коррелирует с ожиданиями блокировок (LWLock и heavyweight locks) в PostgreSQL. Эта корреляция не просто совпадение, а прямое указание на то, что снижение производительности вызвано конкуренцией за ресурсы и высокими накладными расходами ОС на переключение между задачами, которые не могут продвинуться из-за этой конкуренции.
В 99% случаев проблем с PostgreSQL первичны именно ожидания внутри СУБД (Locks, I/O). Резкий рост cs в vmstat — это важнейший сигнал и индикатор этих ожиданий на уровне операционной системы, который говорит о том, что процессы не работают, а ждут, и ОС тратит силы на переключения между ними. Поэтому при росте cs нужно сразу смотреть вглубь — на анализ wait events .
...
Гипотеза о причинно-следственной связи ожиданий СУБД и количестве переключений контекста ОС - подтверждается экспериментально:
Первопричина (в СУБД) -> Ожидание (wait event) -> Реакция ОС -> Рост cs
Процесс инициирует ожидание: Сеанс PostgreSQL в процессе выполнения запроса достигает точки, где он не может продолжить работу без какого-то ресурса.
Пример 1: Ему нужна страница данных с диска. Он инициирует операцию I/O и добровольно переходит в состояние сна (sleep), ожидая её завершения. Это регистрируется как wait event DataFileRead.
Пример 2: Он пытается изменить строку, но другая транзакция удерживает на ней блокировку. Сеанс вынужденно переходит в состояние сна, ожидая освобождения блокировки. Это регистрируется как wait event lock.
Реакция планировщика задач ОС: Когда процесс PostgreSQL переходит в состояние сна (добровольно или вынужденно), он отдает свой квант времени процессора. Планировщик задач ОС фиксирует это и производит переключение контекста (cs), чтобы отдать освободившееся процессорное время другому готовому к выполнению процессу (например, другому сеансу БД или процессу самой ОС).
Результат: Таким образом, каждое ожидание внутри PostgreSQL (кроме ожидания CPU) приводит к тому, что процесс будет "усыплен", и ОС будет вынуждена выполнить переключение контекста, чтобы не простаивать. Чем больше сеансов одновременно находятся в состоянии ожидания, тем чаще ОС приходится переключаться между ними и другими процессами — рост cs.
Подробности и детали : PG_HAZEL + CS/VMSTAT : корреляция ожиданий СУБД PostgreSQL и переключений контекста ОС
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Наибольшая корреляция между ожиданиями СУБД и типом ожиданий IO.
ALARM: более 50% наблюдений - Отклик на запись свыше 5мс
Какое событие является первичным - рост ожиданий чтения/записи в метрике iostat(проблемы устройства) или рост ожиданий типа IO в СУБД PostgreSQL ?
Отличный и очень правильный вопрос, который затрагивает самую суть диагностики проблем с производительностью в связке СУБД-жесткий диск.
Короткий ответ: Первичным почти всегда является рост ожиданий чтения/записи в iostat (проблемы на уровне устройства). Рост ожиданий ввода-вывода (I/O wait) в PostgreSQL — это уже следствие этой проблемы.
Продолжение и подробности: PG_HAZEL + IOSTAT : Определение причин инцидента производительности СУБД
В 1974 году инженеры IBM Дональд Чэмберлин и Рэймонд Бойс разработали первый прототип такого языка. Они назвали его SEQUEL (Structured English Query Language) — "структурированный английский язык запросов". Главная идея заключалась в том, чтобы сделать язык максимально похожим на обычный английский, чтобы даже люди без глубоких знаний программирования могли легко формулировать запросы к базе данных.
Пользователи PostgreSQL и Postgres Pro теперь могут сэкономить время при работе с базами данных. Разработчики из команды Postgres Professional создали ChatPPG — первый ИИ-бот для PostgreSQL. Он решает две ключевые задачи:
Быстрый поиск информации. Чат-бот анализирует вопросы пользователей и за секунды находит ответы в технической документации PostgreSQL (более 2800 страниц), Postgres Pro Enterprise, Postgres Pro Shardman и других продуктах компании. Это избавляет от долгого ручного поиска.
Генерация SQL-запросов. Достаточно описать задачу на русском или английском языке, и ChatPPG сформирует SQL-запрос. Это упрощает работу даже для тех, кто плохо знает синтаксис SQL.
Прошло 50 лет и IT-индустрия декларирует те же задачи - снова попытка упростить жизнь тем кто не обладает знаниями.
Неужели в этом задача IT ? Риторический вопрос , конечно.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Получить статистическую картину выполнений и ожиданий по выбранному SQL запросу за период.
Наибольшая корреляция между ожиданиями СУБД и типом ожиданий IO.
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Определить причины снижения производительности СУБД
Начало инцидента 07:05.
Характерные признаки в ходе инцидента - рост утилизации CPU и значений cpu iowait.
Снижение производительности и рост ожиданий типа IO сопровождается ростом времени ожидания записи для устройств, используемых для файловых систем /data и /wal .
В дополнении к старой записи Мысли вслух - DBA ремесло или наука ?
Отличное и более сфокусированное продолжение темы! Применительно к специалистам по PostgreSQL это сравнение раскрывается еще более ярко и конкретно. Сообщество PostgreSQL огромно и разнородно, и в его среде, особенно среди начинающих и практикующих администраторов и разработчиков, действительно сильно влияние «ремесленной», «алхимической» и «астрологической» парадигм.
Давайте разберем, почему это так.
Искусство настройки (postgresql.conf): Настройка PostgreSQL — это во многом ремесло, основанное на опыте и знании «материала». Мастер помнит, как поведет себя СУБД при изменении shared_buffers, work_mem или maintenance_work_mem на конкретном железе с конкретной нагрузкой. Это не всегда строгий расчет, а часто интуитивное понимание, отточенное практикой.
Сборка «на коленке» под конкретную задачу: Специалист ремесленник берет «сырую» PostgreSQL и начинает его «обтачивать»: подбирает расширения (pg_partman, timescaledb, pg_cron), настраивает репликацию, пишет специфические индексы (GIN, GiST, BRIN). Результат — уникальная, настроенная под нужды бизнеса система.
Культура скриптов и «костылей»: Для решения повседневных задач (бэкапы, мониторинг, очистка) создаются тысячи скриптов на Bash, Python. Это ремесленные инструменты, которые передаются из проекта в проект, обрастают легендами и часто работают просто потому, что «всегда так делали».
Магия исполнения запросов (Execution Plan): Почему запрос сегодня выполняется 2 мс, а завтра — 2000 мс? Планы исполнения могут меняться по мистическим, на первый взгляд, причинам: из-за накопленной статистики, количества записей в таблице, состояния кэша и даже времени суток. Разбор такого плана часто похож на попытку алхимика расшифровать древний манускрипт.
Волшебные «посыпы» порошком (Index): Классическая ситуация: запрос тормозит. Специалист добавляет индекс — и все работает мгновенно. Почему этот конкретный индекс (иногда составной, частичный, с включением столбцов) сработал, а другой — нет? Часто ответ — «ну, я почувствовал, что так будет лучше» или «где-то читал про такой случай». Это чистейшая алхимия: добавил правильный ингредиент — получил золото.
Ритуалы для борьбы с автовакуумом (AutoVacuum): Настройка автовакуума — это один из самых больших поводов для мистики. Изменение параметров autovacuum_vacuum_scale_factor и autovacuum_analyze_scale_factor для отдельных таблиц — это ритуал, который часто проводят без глубокого понимания внутренних процессов, надеясь на лучшее.
Предсказание производительности (Performance Forecasting): Попытки предсказать, как поведет себя система при увеличении нагрузки в 10 раз, или сколько IOPS потребуется для нового проекта, часто основаны не на строгих математических моделях, а на приметах, аналогиях и «чтении звезд» (метрик мониторинга за прошлые периоды).
Следование трендам и хайпу: «Все переходят на Kubernetes, давайте и мы загоним туда PostgreSQL!» — звучит как астрологический прогноз: «Меркурий в ретрограде, пора начинать новые дела». Часто это делается без глубокой оценки необходимости и применимости технологии к stateful-приложению, каким является СУБД.
Сложная терминология для посвященных: Разговоры о «WAL journal», «MVCC», «checkpoints», «transaction ids wraparound» звучат для непосвященных как заклинания. Специалист оперирует этими понятиями, чтобы объяснить поведение системы, которое со стороны кажется магическим.
Невероятная гибкость и настраиваемость. PostgreSQL — это не черный ящик. Это конструктор с тысячами винтиков и гаек (параметров конфигурации). Такая свобода требует глубокого понимания, но на практике приводит к тому, что люди начинают крутить ручки наугад.
Огромное количество расширений (extensions). Каждое расширение — это новый пласт потенциальной магии и алхимии. Специалист становится «заклинателем», который приручает эти расширения, не всегда имея возможность заглянуть в их исходный код.
Сложность внутренних механизмов. Такие вещи, как MVCC (Multiversion Concurrency Control), — это очень сложно. Многие используют их, но далеко не все понимают до конца, как именно работает управление версиями строк, транзакциями и их номерами.
Они есть, и их работа фундаментальна:
Команда разработчиков ядра PostgreSQL. Это именно ученые и инженеры, которые проводят исследования, докапываются до сути, пишут академические работы и реализуют новые функции (например, новые типы индексов, улучшения оптимизатора запросов).
Авторы научных статей и докладчики на крупных конференциях. Люди, которые анализируют производительность на уровне дисковых подсистем, памяти, процессоров и строят математические модели работы СУБД.
Эксперты по теме, пишущие книги. Такие авторы, как например, Ханс-Юрген Шёниг (Hans-Jürgen Schönig), разбирают сложные концепции и переводят их с «магического» языка на язык инженерии.
Вывод:
Подавляющее большинство практикующих админов и разработчиков БД — это действительно ремесленники-алхимики. Их главная задача — не открывать новые фундаментальные знания, а используя накопленный опыт, готовые рецепты и заклинания, обеспечить работу бизнес-критичных приложений здесь и сейчас.
Ученые же создают тот фундамент, те инструменты и ту науку, которую ремесленники потом применяют на практике, подчас не до конца понимая всю подноготную. Это естественное разделение труда в любой сложной и быстроразвивающейся области.
Каждый пункт - в точку ! Особенно про автовакуум это 100%.
Мне больше интересно быть ученым и исследователем. За 38 лет наремесленичался с избытком.