Добавить в корзинуПозвонить
Найти в Дзене
Postgres DBA

Детализированное описание методологической инструкции PG_EXPECTO(v.2) для анализа производительности СУБД PostgreSQL

Формализованный протокол экспертного анализа метрик производительности PostgreSQL.
Инструкция регламентирует процедуры интерпретации данных, верификации гипотез, разрешения противоречий и ранжирования достоверности выводов. Ключевыми компонентами выступают четырёхуровневая система градации утверждений, протокол обработки конфликтующих метрик и свод правил, исключающих необоснованные
Оглавление
deepseek-pg-perf-prompts/_prompt-instruction.txt at main · pg-expecto/deepseek-pg-perf-prompts

Аннотация

Формализованный протокол экспертного анализа метрик производительности PostgreSQL.

Инструкция регламентирует процедуры интерпретации данных, верификации гипотез, разрешения противоречий и ранжирования достоверности выводов. Ключевыми компонентами выступают четырёхуровневая система градации утверждений, протокол обработки конфликтующих метрик и свод правил, исключающих необоснованные умозаключения. Академическое описание раскрывает методологические основания каждого требования и демонстрирует их вклад в обеспечение воспроизводимости и строгости анализа.

1. Введение

ℹ️Диагностика производительности реляционных СУБД традиционно страдает от эвристических, слабо формализованных подходов, зависящих от опыта администратора.

С развитием больших языковых моделей (LLM) появилась возможность автоматизировать первичный анализ, однако возникла потребность в жёстких методологических рамках, предотвращающих галлюцинации, ложные корреляции и необоснованные рекомендации. Описываемая инструкция v.2 представляет собой экспертную систему правил, нацеленную на получение строго обоснованных, проверяемых заключений исключительно на основе предоставленных эмпирических данных.

ℹ️Она не является алгоритмом тюнинга, а служит фильтром, разделяющим наблюдаемые факты, статистически обоснованные предположения и спекуляции.

2. Структура инструкции

Документ состоит из трёх функциональных блоков:

  • 1️⃣Базовые принципы анализа — свод ограничений и критериев проверки, управляющий процессом интерпретации.
  • 2️⃣Уровни достоверности выводов — классификационная схема, позволяющая каждому утверждению приписать степень эпистемической надёжности.
  • 3️⃣Протокол обработки противоречий — алгоритм действий при обнаружении взаимоисключающих показаний различных источников.

Декларируемая цель — минимизация субъективных суждений и обеспечение прозрачности логических переходов от сырых метрик к итоговым заключениям.

3. Принципы доказательного анализа

3.1. Обязательность эмпирического базиса

Фундаментальный запрет формулировать выводы, не подкреплённые конкретными числовыми значениями из входного набора данных. Всякое утверждение обязано сопровождаться ссылкой на метрику, её значение и период наблюдения. Если данных недостаточно, инструкция предписывает явно указывать перечень отсутствующих показателей (например, планов выполнения, гистограмм ожиданий, параметров pg_stat_bgwriter) и конкретные инструменты их получения (pg_stat_statements, auto_explain, iostat). Тем самым исключаются общие фразы типа «вероятно, проблема в индексах» без подтверждения соотношением seq_scan / idx_scan и размерами таблиц.

3.2. Проверка внутренней согласованности

Инструкция обязывает анализировать математические отношения между метриками. Классический пример: если IPC составляет 100% от общей категории ожиданий WAITINGS, это не является независимым свидетельством критичности, а тавтологично указывает на преобладание данного типа. Требование различать информативные и тривиальные соотношения предотвращает ложное удвоение значимости одного и того же явления. Подобная логика распространяется на любые аддитивные категории (суммы типов блокировок, распределение буферного кеша и пр.).

3.3. Учет артефактов агрегации

Специальное внимание уделяется композитным показателям, таким как SPEED = запросы + строки. Инструкция предписывает декомпозицию на составляющие с раздельным анализом динамики. Изменение интегрального индикатора может полностью определяться одной компонентой, маскируя стагнацию или деградацию другой. Без такой декомпозиции невозможно установить реальный характер изменений нагрузки. Аналогичное правило действует для утилизации ресурсов: средняя CPU utilization может скрывать кратковременные насыщения, видимые только на перцентилях, поэтому при наличии только усреднённых данных требуется указание на возможное искажение.

3.4. Сопоставление конфигурации с фактической нагрузкой

Анализ параметров shared_buffers, effective_cache_size, work_mem, checkpoint_timeout производится не изолированно, а путём сравнения с наблюдаемыми метриками: hit ratio для буферного кеша, объём грязных страниц и частота контрольных точек для чекпоинтов, утилизация temp_files для work_mem. Выявление значительного расхождения (например, выделено 8 ГБ shared_buffers при hit ratio 99.9%, но основная рабочая выборка 50 ГБ) фиксируется как несоответствие без директивных рекомендаций по изменению — вывод остаётся констатацией факта, а не предписанием.

3.5. Ограничение интерпретации корреляций

Документ жёстко разграничивает математическую зависимость и причинно-следственную связь. Запрещается делать выводы о каузальности исключительно на основе высокого коэффициента корреляции Пирсона или визуального совпадения трендов. Особо оговаривается случай, когда одна метрика является компонентой другой (например, количество DataFileRead и общее IO); их синхронное изменение является прямым следствием определения, а не свидетельством скрытого механизма. Для допущения причинности требуются дополнительные данные: планы запросов, тайминги выполнения, последовательность событий.

3.6. Экспликация границ применимости

Любой анализ ограничен горизонтом предоставленных данных. Инструкция требует чётко перечислять, какие именно гипотезы невозможно проверить без дополнительной информации. Например, утверждение о росте DataFileRead невозможно верифицировать как следствие seq scan без плана запроса, объёмов участвующих таблиц и статистики pg_stat_user_tables. Подобное суждение маркируется как «требует проверки» с указанием конкретного типа недостающих данных.

4. Уровни достоверности выводов

Формальная четырёхуровневая шкала вносит стратификацию истинности, отсутствующую в неформальных экспертных заключениях.

  • 1️⃣Уровень-1: Подтверждено данными — утверждение базируется на непосредственно измеренной величине или выводится из неё строгой математической операцией (суммирование типов ожиданий, вычисление процентных долей). Пример: «Медианное значение времени записи WAL во втором периоде составило 2.3 мс».
  • 2️⃣Уровень-2: Вероятно, но требует проверки — вывод опирается на косвенные индикаторы, статистические закономерности или общепринятые эмпирические зависимости, однако не верифицирован прямой метрикой в предоставленном массиве. Пример: «Рост отношения blks_hit/blks_read позволяет предположить повышение эффективности буферного кеша после увеличения shared_buffers, но для окончательного заключения необходима статистика по конкретным запросам».
  • 3️⃣Уровень-3: Предположение / данные устарели — гипотетическое объяснение, проверка которого требует сбора отсутствующей информации (трейсов, планов выполнения за период аномалии). Сюда же относятся ситуации, когда доступные данные устарели относительно рассматриваемого инцидента.
  • 4️⃣Уровень-4: Невозможно оценить — метрика или понятие вообще не присутствуют в отчёте, и никакое косвенное суждение о них невозможно. Пример: «Наличие дедлоков в системе оценить невозможно — pg_stat_database_conflicts не предоставлен».

➡️Каждый итоговый тезис должен предваряться соответствующим маркером, что создаёт карту достоверности отчёта и позволяет лицу, принимающему решение, калибровать степень доверия к каждому элементу заключения.

5. Протокол обработки противоречий в данных

Специализированная процедура для ситуаций, когда различные источники дают конфликтующую картину (например, %iowait ОС минимален, но статистика СУБД демонстрирует высокие задержки ввода-вывода). Инструкция задаёт трёхшаговый алгоритм:

1️⃣Фиксация противоречия уровня-1. Формулируется явное указание на расхождение с точным перечнем конфликтующих значений и источников.

  • Применение иерархии доверия. Вводится порядок приоритета источников: прямые измерения внутренней статистики PostgreSQL (pg_stat_*, pg_stat_bgwriter, событийные тайминги из pg_stat_statements) обладают наивысшей достоверностью, поскольку фиксируют реальное время, затраченное движком на операции. Данные уровня операционной системы (iostat, vmstat, sar) занимают промежуточное положение, так как агрегируют все процессы и могут сглаживать краткосрочные всплески. Косвенные корреляции имеют минимальный вес.

2️⃣Формулирование гипотез уровня-2. Предлагаются объяснения, согласующиеся с имеющимися фактами, но не претендующие на окончательность (например, асинхронные операции ядра, не попадающие в %iowait, влияние дискового кеша ОС, несинхронность моментов снятия метрик).

3️⃣Указание дополнительных данных (Уровень-3). Перечень конкретных метрик (blk_read_time, blk_write_time из pg_stat_statements, детализированная активность дисков с помощью blktrace), позволяющих разрешить противоречие.

Такой подход предотвращает произвольный выбор удобной цифры и явно обозначает неопределённость, требуя дальнейшего исследования.

6. Требования к представлению результатов и стилистика

Инструкция предписывает строгий деловой стиль, исключающий риторические украшения и повествовательные обороты. Терминология жёстко стандартизирована: используются только устоявшиеся названия параметров конфигурации («checkpoint_timeout», а не «таймаут контрольной точки») с обязательным указанием единиц измерения для физических величин (миллисекунды, мегабайты, страницы). Период наблюдения указывается для всякой анализируемой выборки. Ответ на запрос без предоставления конкретных метрик ограничивается требованием направить данные с явным списком необходимой информации.

7. Научно-методологическая значимость и ограничения

☑️Описанная инструкция реализует модель доказательной диагностики, близкую принципам доказательной медицины и формальной верификации.

☑️Введение уровней достоверности и иерархии источников создаёт воспроизводимый baseline, позволяющий сравнивать качество аналитических заключений, полученных различными экспертами или разными запусками LLM.

⚠️Её ограничения очевидны: она не генерирует готовые рецепты тюнинга, а лишь подготавливает почву для принятия решений человеком.

⚠️Инструкция сознательно избегает предписывающих рекомендаций («увеличьте effective_cache_size до X»), ограничиваясь констатацией несоответствий, что предотвращает потенциальный вред от автоматизированного конфигурирования без учёта полного контекста архитектуры приложения.

8. Заключение

Формализованный протокол анализа производительности PostgreSQL, сформулированный в инструкции v.2, представляет собой методологически проработанную систему, нацеленную на повышение объективности и обоснованности экспертных суждений.

Ключевыми инновациями являются обязательная стратификация достоверности каждого вывода, принудительная декомпозиция агрегированных показателей и формальный процесс разрешения противоречивых данных. Такой дизайн превращает анализ из искусства интерпретации в строгую, хотя и ограниченную доступными данными, процедуру, готовую к программной реализации и систематическому аудиту качества.