Сравнительный сводный отчет по производительности СУБД и инфраструктуры
Периоды наблюдения:
- Период 1 (P1): 2026-03-11 14:35 – 15:35 (тестовый отрезок)
- Период 2 (P2): 2026-03-11 15:35 – 16:35 (инцидент производительности)
Используемые данные:
- Настройки СУБД и ОС (файл _1.settings.txt)
- Комплексный анализ СУБД и vmstat (файлы _2.1.test.postgresql_vmstat.txt, _2.postgresql_vmstat.txt)
- Анализ метрик vmstat-iostat по дисковым устройствам (файлы _3.1.test.vmstat_iostat.txt, _3.vmstat_iostat.txt)
Общая информация
- Версия СУБД: PostgreSQL 15.13 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1
- Аппаратная конфигурация:
CPU: 192 логических ядра (Intel Xeon Platinum 8280L @ 2.70GHz, 4 сокета, 48 ядер/сокет, 1 поток/ядро)
RAM: 1007.58 GB
NUMA: 4 узла - Ключевые параметры конфигурации СУБД:
shared_buffers = 251807 MB (~246 GB)
effective_cache_size = 747230 MB (~730 GB)
work_mem = 1 GB
maintenance_work_mem = 16 GB
autovacuum_work_mem = 2 GB
checkpoint_timeout = 15 min
max_wal_size = 8 GB
wal_keep_size = 500 GB
random_page_cost = 1.1
effective_io_concurrency = 300
max_parallel_workers_per_gather = 0 (параллелизм запросов отключен)
synchronous_commit = remote_write - Дисковая подсистема:
Отдельные устройства:
vdg → /wal (WAL)
vdh, vdi, vdj, vdk → /data (LVM datavg-datalv)
vde → /log
vdc → /backup
Файловые системы на LVM, данные и WAL разделены.
1. Общий анализ операционной скорости и ожиданий СУБД
Граничные значение операционной скорости (SPEED) и ожиданий СУБД (WAITINGS)
Медианные значения за P1 (14:35–15:35):
- SPEED (запросы+строки): 11 902 820
- WAITINGS (суммарные ожидания): 326 902 257
- Extension: 59 219 875
- IO: 33 726 969
- IPC: 79 217 761
- Lock: 31 024 665
- LWLock: 127 259 602
- Timeout: 0
- BufferPin: 0
Медианные значения за P2 (15:35–16:35):
- SPEED (запросы+строки): 11 778 367
- WAITINGS (суммарные ожидания): 318 777 363
- Extension: 56 665 278
- IO: 32 835 679
- IPC: 70 793 441
- Lock: 31 158 102
- LWLock: 128 013 134
- Timeout: 0
- BufferPin: 0
Изменение от P1 к P2:
- SPEED: снижение на 1.05%
- WAITINGS: снижение на 2.48%
- Extension: снижение на 4.31%
- IO: снижение на 2.64%
- IPC: снижение на 10.63%
- Lock: рост на 0.43%
- LWLock: рост на 0.59%
- Timeout и BufferPin без изменений.
Комментарий:
Операционная скорость снизилась при одновременном снижении суммарных ожиданий. Снижение ожиданий IPC и IO может указывать на уменьшение соответствующей активности или изменение паттерна нагрузки. Рост медианы LWLock и Lock на фоне снижения SPEED является негативным сигналом.
Анализ трендов операционной скорости (SPEED) и ожиданий СУБД (WAITINGS)
Тренд SPEED (операционная скорость):
- P1:
Коэффициент детерминации R²: 0.64 (качество модели хорошее)
Угол наклона (b): +38.68 (рост) - P2:
Коэффициент детерминации R²: 0.94 (качество модели очень высокое)
Угол наклона (b): -44.09 (падение) - Комментарий: в P2 произошла смена тренда с роста на падение, причем модель в P2 объясняет 94% вариации.
Тренд WAITINGS (ожидания СУБД):
- P1:
R²: 0.07 (непригодное качество модели)
Угол наклона (b): -14.93 (незначим) - P2:
R²: 0.58 (удовлетворительное качество модели)
Угол наклона (b): +37.28 (рост) - Комментарий: в P2 ожидания стали устойчиво расти, тренд стал выраженным.
Регрессия SPEED по WAITINGS:
- P1:
R²: 0.30 (слабое качество модели)
Угол наклона (b): -28.68 - P2:
R²: 0.59 (удовлетворительное качество модели)
Угол наклона (b): -37.64 - Комментарий: связь усилилась, обратная зависимость стала круче.
Корреляция SPEED ~ WAITINGS:
- P1: коэффициент корреляции r = -0.5469 (умеренная обратная связь)
- P2: коэффициент корреляции r = -0.7712 (сильная обратная связь)
- Комментарий: обратная связь стала сильной, что подтверждает негативное влияние возросших ожиданий на производительность.
Вывод:
В P2 произошло качественное изменение: операционная скорость перешла от слабого роста к устойчивому падению (R²=0.94), а ожидания — от нестабильных к уверенному росту (R²=0.58). Обратная корреляция между скоростью и ожиданиями усилилась с умеренной до сильной, что подтверждает негативное влияние возросших ожиданий на производительность.
1.1. СТАТИСТИЧЕСКИЙ АНАЛИЗ ОЖИДАНИЙ СУБД
P1
- Тип ожидания LWLock:
Взвешенная корреляция ожиданий (ВКО): 0.27 (критическое значение)
Корреляция с общими ожиданиями (r): 0.9969
Коэффициент детерминации R²: 0.99
Интегральный приоритет: 0.3718 (единственный значимый тип) - Остальные типы ожиданий (BufferPin, Extension, IO, IPC, Lock, Timeout): корреляция отсутствует или отрицательная.
P2
- Тип ожидания Extension:
ВКО: 0.14 (высокое значение)
r: 0.8118
R²: 0.66 (хорошее качество модели)
Интегральный приоритет: 0.6625 - Тип ожидания LWLock:
ВКО: 0.30 (критическое значение)
r: 0.7438
R²: 0.55 (удовлетворительное качество модели)
Интегральный приоритет: 0.5960 - Тип ожидания IO:
ВКО: 0.08 (среднее значение)
r: 0.8036
R²: 0.65 (хорошее качество модели)
Интегральный приоритет: 0.5691 - Тип ожидания Lock:
ВКО: 0.08 (среднее значение)
r: 0.8034
R²: 0.65 (хорошее качество модели)
Интегральный приоритет: 0.5690
Итог по разделу "1.1. СТАТИСТИЧЕСКИЙ АНАЛИЗ ОЖИДАНИЙ СУБД"
- В P1 единственной критической точкой были легковесные блокировки (LWLock), объясняющие 99% вариации общих ожиданий.
- В P2 картина усложнилась: появились значимые корреляции для Extension, IO и Lock. LWLock сохранил критический уровень ВКО, но его объясняющая способность снизилась (R²=0.55). На первый план по интегральному приоритету вышли Extension и LWLock.
- Аномалия: в P2 типы ожиданий Extension, IO, Lock имеют практически идентичные коэффициенты корреляции (~0.80) и R² (~0.65). Это может указывать на общий фактор, влияющий на все три типа (например, рост интенсивности транзакционной нагрузки с участием расширений).
1.2. ТРЕНДОВЫЙ АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ vmstat
Метрика procs r (процессы в очереди на выполнение):
- P1:
Медиана: 53
R² тренда: 0.84 (очень высокое качество)
Наклон: -42.44 (улучшение) - P2:
Медиана: 47 (снижение на 6 процессов)
R² тренда: 0.22 (слабое качество)
Наклон: +25.03 (ухудшение) - Комментарий: тренд разрушился, направление сменилось на рост к концу периода.
Метрика procs b (процессы в uninterruptible sleep):
- P1:
Медиана: 5
R² тренда: 0.71 (хорошее качество)
Наклон: +40.18 (рост) - P2:
Медиана: 5 (без изменений)
R² тренда: 0.33 (слабое качество)
Наклон: -29.77 (снижение) - Комментарий: тренд ослаб, направление сменилось на улучшение.
Метрика cpu wa (процент простоя CPU в ожидании IO):
- P1:
Медиана: 2%
R² тренда: 0.00 (тренд отсутствует)
Наклон: 0 - P2:
Медиана: 3% (рост на 1 п.п.)
R² тренда: 0.28 (слабое качество)
Наклон: -27.89 (снижение) - Комментарий: появился слабый тренд на снижение iowait.
Метрика cpu id (процент полного простоя CPU):
- P1:
Медиана: 69%
R² тренда: 0.28 (слабое качество)
Наклон: +28.07 (рост idle) - P2:
Медиана: 72% (рост на 3 п.п.)
R² тренда: 0.79 (хорошее качество)
Наклон: -41.71 (падение idle) - Комментарий: резкое ухудшение — сильный отрицательный тренд, классифицированный в отчете как «Очень высокая скорость изменения... указывают на серьёзные проблемы».
Итог по разделу "1.2. ТРЕНДОВЫЙ АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ vmstat"
- Ключевое изменение: в P2 проявился сильный отрицательный тренд cpu idle (R²=0.79, наклон -41.71). Это означает, что свободное процессорное время устойчиво сокращалось на протяжении часа.
- Очередь исполнения (r) снизилась по медиане, но тренд стал положительным (растет к концу периода).
- Процессы в uninterruptible sleep (b) остались на уровне 5, но тренд P2 показывает их снижение, что не согласуется с ростом iowait и загрузки дисков (см. раздел IO). Возможно, процессы быстрее уходят из состояния D, но новые быстро поступают.
- Недостаточно данных: vmstat не предоставляет разбивки CPU на user/system в трендовом анализе, только граничные значения и медианы. Для точной оценки изменения соотношения us/sy требуются исходные временные ряды.
1.3. СТАТИСТИЧЕСКИЙ АНАЛИЗ ОЖИДАНИЙ СУБД и МЕТРИК vmstat
Корреляции в P1
- Extension ↔ us (user time):
r = 0.6521 (высокая корреляция)
R² = 0.43 (удовлетворительное качество модели)
Интерпретация: расширения потребляют CPU в user space. - Lock ↔ r (run queue):
r = 0.8394 (очень высокая корреляция)
R² = 0.70 (хорошее качество модели)
Интерпретация: блокировки приводят к росту очереди процессов на CPU. - cs ↔ in (переключения контекста и прерывания):
r = 0.9379 (очень высокая корреляция)
R² = 0.88 (очень высокое качество модели)
Интерпретация: сильная связь переключений контекста с прерываниями.
Корреляции в P2
- Extension ↔ us (user time):
r = 0.9051 (очень высокая корреляция)
R² = 0.82 (очень высокое качество модели)
Интерпретация: связь усилилась, расширения стали еще сильнее влиять на загрузку CPU в user mode. - Extension ↔ in (прерывания):
r = 0.8252 (очень высокая корреляция)
R² = 0.68 (хорошее качество модели)
Интерпретация: новая значимая связь, возможно, из-за интенсивного взаимодействия расширений с внешними ресурсами. - Lock ↔ r (run queue):
r = 0.5774 (высокая корреляция)
R² = 0.33 (слабое качество модели)
Интерпретация: связь ослабла, модель стала слабой. - cs ↔ in: корреляция исчезла (стала незначимой).
Относительные показатели vmstat
- free RAM < 5%:
P1: 100% времени (ALARM)
P2: 100% времени (ALARM)
Комментарий: свободной памяти стабильно менее 5% (≈13 GB при 1007 GB). Swap не используется. Вся память занята под файловый кэш (memory_cache ~720 GB) и, вероятно, shared_buffers (246 GB). Это нормально для heavily loaded PostgreSQL, но требует мониторинга на предмет вытеснения страниц.
Итог по разделу "1.3. СТАТИСТИЧЕСКИЙ АНАЛИЗ ОЖИДАНИЙ СУБД и МЕТРИК vmstat"
- В P2 усилилось влияние расширений на CPU (us) и появилась связь с прерываниями. Это может указывать на активизацию расширений, интенсивно взаимодействующих с внешними ресурсами (сеть, файлы) через системные вызовы.
- Связь блокировок Lock с очередью run queue ослабла, что при росте LWLock и сохранении Lock на уровне говорит о смещении конкуренции в сторону легковесных блокировок.
1.4. ДИАГРАММЫ ПАРЕТО ПО WAIT_EVENT_TYPE И QUERYID
Основные изменения в WAIT_EVENT
P1:
- Extension: 100% (событие Extension)
- LWLock:
BufferMapping: 31.68%
WALWrite: 25.18%
pgpro_stats: 19.99% - IO: DataFileRead: 83.5%
- Lock: transactionid: 85.84%
P2:
- Extension: 100% (событие Extension)
- LWLock:
BufferMapping: 30.07%
WALWrite: 26.07%
pgpro_stats: 18.17% - IO:
DataFileRead: 78.28%
WALSync: 11.03% (появились ожидания) - Lock:
transactionid: 78.97%
tuple: 20.41% (появились блокировки)
Вывод:
В P2 в IO добавились ожидания WALSync (11% от всех IO), а в Lock — блокировки tuple (20.4%). Это коррелирует с ростом нагрузки на WAL (устройство vdg) и усилением конкуренции за строки.
QUERYID по типам ожиданий
Доминирующие запросы в обоих периодах:
- Запрос -5038981907002478858 (CALLS ~38.8 млн в P2)
- Запрос -4280293605113329019 (CALLS ~17.5 млн в P2)
- Запрос -1757223094415174739 (CALLS ~9.2 млн)
Изменения в P2:
- Доля ожиданий Extension для запроса -5038981907002478858: рост с 8.51% до 33.69% от всех Extension.
- Доля ожиданий LWLock для этого же запроса: рост с 6.10% до 32.24% от всех LWLock.
- Появились значимые ожидания Lock/tuple у всех топ-запросов (в P1 tuple отсутствовал).
Итог по разделу "1.4. ДИАГРАММЫ ПАРЕТО ПО WAIT_EVENT_TYPE И QUERYID"
- Смена характера нагрузки: запрос -5038981907002478858 стал основным генератором ожиданий Extension и LWLock.
- Появление WALSync и tuple указывает на увеличение интенсивности записи WAL и конфликтов на уровне строк, вероятно, из-за возросшего числа UPDATE/DELETE или конкурентных вставок.
Детальный анализ – граничные значения и корреляции
Ожидания СУБД
- LWLock остается критическим в обоих периодах, но в P2 его влияние на общие ожидания снизилось с 99% до 55% (по R²). Основные события — BufferMapping, WALWrite, pgpro_stats.
- Extension вышел на первый план по интегральному приоритету в P2 (0.6625). Сильно коррелирует с user time CPU (r=0.91) и прерываниями (r=0.83).
- IO и Lock в P2 приобрели умеренную значимость (ВКО=0.08), коррелируя с общими ожиданиями на уровне ~0.80.
Память и буферный кэш
- shared_buffers = 246 GB при общем RAM 1007 GB — соответствует ~24% ОЗУ, что в пределах рекомендаций для систем с большим объемом памяти.
- effective_cache_size = 730 GB — адекватно для планировщика, учитывая объем кэша страниц ОС (~720 GB в memory_cache).
- Потенциальное несоответствие: при maintenance_work_mem = 16 GB и autovacuum_work_mem = 2 GB, work_mem = 1 GB на запрос. Учитывая высокую конкуренцию за LWLock (BufferMapping) и наличие 192 ядер, большое количество одновременных сессий с высоким work_mem может приводить к давлению на память, но данных о количестве активных сессий нет.
Дисковая подсистема (I/O)
- vdg (WAL): в P2 значительно выросли операции записи (w/s медиана с 373 до 689, wMB/s с 7.75 до 16.0), при этом util остался низким (до 10%). Появились ожидания WALSync.
- vdh, vdi, vdj, vdk (/data): в P2 util увеличился до 90%+ (в P1 было ~87%), aqu_sz вырос с ~2.0 до 2.5+, r/s и w/s значительно возросли. Корреляция vmstat/wa с iostat/util стала высокой (r ~0.80–0.84), что указывает на прямую связь ожиданий IO с загрузкой устройств.
CPU и системные вызовы
- В P2 тренд cpu idle резко пошел вниз (наклон -41.71). При этом cpu us и cpu sy в абсолютных значениях оставались низкими (медиана us 20–23%, sy 5%). Это может означать, что снижение idle связано с ростом других компонент (возможно, iowait или steal, но steal=0). Рост wa с 2% до 3% лишь частично объясняет снижение idle.
- Недостаточно данных: детализация по CPU (гостевые метрики, детальный профиль) отсутствует.
Блокировки и ожидания LWLock
- LWLock BufferMapping — основной источник ожиданий. Указывает на конкуренцию за доступ к буферному кэшу. Возможные причины: высокая частота обращений к одним и тем же страницам, недостаточное количество буферных разделов (lwlock partitioning).
- WALWrite LWLock — конкуренция при записи WAL. Рост в P2 коррелирует с увеличением записи на vdg.
- pgpro_stats LWLock — ожидания внутри расширения pgpro_stats (сбор статистики). Занимает ~18% всех LWLock.
Анализ запросов (queryid)
- Запрос -5038981907002478858 выделяется аномальным ростом ожиданий Extension и LWLock. Вероятно, содержит вызовы функций расширений или генерирует высокую нагрузку на буферный кэш/WAL.
- Запрос -4280293605113329019 также демонстрирует высокую активность по всем типам ожиданий, но его доля в P2 снизилась по сравнению с -503898....
Ограничения:
Отсутствуют планы выполнения запросов и тексты SQL. Невозможно определить, какие именно операции вызывают конкуренцию. Требуется трассировка запросов с auto_explain (включено, но данные не предоставлены).
2. Анализ IO
Список дисковых устройств
- vdg — WAL
- vdh, vdi, vdj, vdk — данные (LVM datavg-datalv)
Граничные значения по дисковым устройствам (медианы)
Устройство vdg:
- P1:
w/s: 372.7
wMB/s: 7.75
util %: 5.92 - P2:
w/s: 689.2 (рост на 85%)
wMB/s: 16.0 (рост на 106%)
util %: 10.19 (рост на 72%)
Устройство vdh:
- P1:
r/s: 12194
w/s: 501.6
util %: 86.98
aqu_sz: 2.03 - P2:
r/s: 13554 (рост на 11%)
w/s: 1093.2 (рост на 118%)
util %: 90.26 (рост на 3.8%)
aqu_sz: 2.54 (рост на 25%)
Устройство vdi:
- P1:
r/s: 12183
w/s: 502.6
util %: 87.16
aqu_sz: 2.01 - P2:
r/s: 13535 (рост на 11%)
w/s: 1094.0 (рост на 118%)
util %: 89.87 (рост на 3.1%)
aqu_sz: 2.51 (рост на 25%)
Устройство vdj:
- P1:
r/s: 12181
w/s: 498.3
util %: 86.45
aqu_sz: 2.00 - P2:
r/s: 13528 (рост на 11%)
w/s: 1097.2 (рост на 120%)
util %: 90.03 (рост на 4.1%)
aqu_sz: 2.53 (рост на 26%)
Устройство vdk:
- P1:
r/s: 12189
w/s: 500.8
util %: 87.20
aqu_sz: 2.05 - P2:
r/s: 13544 (рост на 11%)
w/s: 1089.6 (рост на 118%)
util %: 90.33 (рост на 3.6%)
aqu_sz: 2.51 (рост на 22%)
Относительные показатели iostat
- %util > 50%: 100% времени для vdh, vdi, vdj, vdk в обоих периодах (ALARM). В P2 значения util выросли до 90%+.
- aqu_sz > 1: 100% времени для устройств данных в обоих периодах (ALARM). В P2 средняя очередь увеличилась с ~2.0 до ~2.5.
- r_await, w_await: оставались низкими (<0.3 мс), что указывает на быстрое обслуживание запросов накопителями (вероятно, NVMe/SSD). Рост очереди при низких задержках характерен для высокопараллельной нагрузки.
2.1. СРАВНИТЕЛЬНЫЙ СТАТИСТИЧЕСКИЙ АНАЛИЗ "КОРРЕЛЯЦИЯ VMSTAT и IOSTAT" по дисковым устройствам
2.1.1 КОРРЕЛЯЦИЯ VMSTAT и IOSTAT (wa ~ util)
P1: анализ не проводился (отсутствует в отчете).
P2:
- Устройство vdg: r = 0.745, R² = 0.56
- Устройство vdh: r = 0.840, R² = 0.70
- Устройство vdi: r = 0.842, R² = 0.71
- Устройство vdj: r = 0.802, R² = 0.64
- Устройство vdk: r = 0.824, R² = 0.68
Итог по 1.1 КОРРЕЛЯЦИЯ VMSTAT и IOSTAT:
В P2 на всех устройствах данных появилась сильная корреляция между ожиданиями IO на уровне ОС (wa) и загрузкой устройства (util).
2.1.2 БУФЕРИЗАЦИЯ ВВОДА-ВЫВОДА (vmstat buff ~ iostat)
P1:
- На устройствах данных (vdh, vdi, vdj, vdk):
Корреляция buff с r/s и rMB/s: r ~0.94–0.95, R² ~0.89–0.91 (очень высокая). - Интерпретация: активное использование буферного кэша ОС при чтении.
P2:
- Эти корреляции разрушились (стали незначимыми или слабыми).
- Появилась умеренная связь buff с wps на vdg: r = 0.51, R² = 0.26.
- Интерпретация: изменение паттерна ввода-вывода — в P2 возросла запись, и буферный кэш стал использоваться иначе.
Итог по 1.2 БУФЕРИЗАЦИЯ ВВОДА-ВЫВОДА:
В P2 произошло разрушение сильных корреляций buff с чтением на устройствах данных и появление слабой связи с записью на WAL.
2.1.3 КЭШИРОВАНИЕ ВВОДА-ВЫВОДА (vmstat cache ~ iostat)
P1:
- Высокая корреляция cache с w/s и wMB/s на всех устройствах данных: r ~0.80, R² ~0.64–0.65.
P2:
- Корреляция cache с метриками чтения (r/s, rMB/s) усилилась: r = 0.70–0.71, R² = 0.49–0.50.
- Корреляция cache с записью осталась на уровне: r ~0.70–0.76, R² = 0.50–0.57.
- Интерпретация: связь стала более сбалансированной между чтением и записью.
Итог по 1.3 КЭШИРОВАНИЕ ВВОДА-ВЫВОДА:
В P2 кэш страниц стал более равномерно связан как с чтением, так и с записью.
2.1.4 КОРРЕЛЯЦИЯ ОПЕРАЦИОННОЙ СКОРОСТИ И МЕТРИК ПРОИЗВОДИТЕЛЬНОСТИ ДИСКОВОГО УСТРОЙСТВА
Устройство vdg:
- P1: r = 0.776, R² = 0.60 (с MBps)
- P2: r = 0.662, R² = 0.44 (с MBps)
Устройство vdh:
- P1: r = 0.464, R² = 0.22 (с MBps)
- P2: r = 0.732, R² = 0.54 (с MBps) — очень высокая корреляция
Устройство vdi:
- P1: r = 0.462, R² = 0.21 (с MBps)
- P2: r = 0.733, R² = 0.54 (с MBps) — очень высокая корреляция
Устройство vdj:
- P1: r = 0.462, R² = 0.21 (с MBps)
- P2: r = 0.732, R² = 0.54 (с MBps) — очень высокая корреляция
Устройство vdk:
- P1: r = 0.464, R² = 0.22 (с MBps)
- P2: r = 0.732, R² = 0.54 (с MBps) — очень высокая корреляция
Ключевое изменение:
В P2 на устройствах данных появилась очень высокая корреляция операционной скорости с пропускной способностью записи (MBps). R² ~0.54 указывает, что ~54% вариации операционной скорости объясняется объемом записываемых данных. В P1 связь была слабой. Это прямой признак того, что в P2 производительность СУБД стала ограничена пропускной способностью дисковой подсистемы данных.
Итог по 1.4 КОРРЕЛЯЦИЯ ОПЕРАЦИОННОЙ СКОРОСТИ И МЕТРИК ПРОИЗВОДИТЕЛЬНОСТИ ДИСКОВОГО УСТРОЙСТВА:
В P2 операционная скорость стала сильно зависеть от объема записи на диски данных, что подтверждает насыщение дисковой подсистемы.
ИНДЕКС ПРИОРИТЕТА КОРРЕЛЯЦИИ (CPI)
P1 (доминирующие корреляции):
- buff ~ rMB/s на устройствах данных: CPI ~0.954
P2 (доминирующие корреляции):
- wa ~ util на устройствах данных: CPI 0.80–0.84
- cache ~ wMB/s на устройствах данных: CPI 0.57–0.64
Итог по разделу "СРАВНИТЕЛЬНЫЙ СТАТИСТИЧЕСКИЙ АНАЛИЗ "КОРРЕЛЯЦИЯ VMSTAT и IOSTAT" по дисковым устройствам"
- В P2 произошел сдвиг нагрузки на запись: резко выросли w/s и wMB/s на всех устройствах.
- Устройства данных (vdh–vdk) достигли утилизации >90%, очередь запросов выросла.
- Появилась сильная корреляция операционной скорости с объемом записи, что подтверждает, что дисковая подсистема стала узким местом.
Проблемы инфраструктуры по итогам сравнительного анализа
- Высокая утилизация устройств данных (>90% в P2) и рост очереди запросов.
- Увеличение объема записи на WAL (vdg) в 2 раза, сопровождающееся появлением ожиданий WALSync.
- Исчерпание свободной памяти (<5% свободно) при отсутствии swap — риск вытеснения страниц из кэша при пиковых нагрузках.
- Устойчивое снижение CPU idle в P2, указывающее на рост общей загрузки системы.
3. Итог
3.1 Ключевые проблемы
- Деградация операционной скорости в P2 с одновременным ростом ожиданий СУБД.
- Дисковая подсистема данных стала узким местом: утилизация >90%, высокая корреляция SPEED с MBps записи.
- Резкое увеличение нагрузки на WAL (в 2 раза), появление ожиданий WALSync.
- Критический уровень ожиданий LWLock в обоих периодах, в P2 добавился высокий приоритет Extension.
- Появление блокировок tuple в P2, указывающее на конкуренцию за строки в транзакциях.
- Аномальное поведение запроса -5038981907002478858, генерирующего основную долю ожиданий Extension и LWLock в P2.
3.2 Проблемы СУБД
- Конкуренция за LWLock BufferMapping — возможен дефицит буферных разделов (lwlock_shared_limit не задан, используется по умолчанию).
- Высокая активность расширения pgpro_stats, создающая LWLock ожидания.
- Отсутствие параллелизма в запросах (max_parallel_workers_per_gather = 0) — потенциально неэффективное использование CPU для сканирований.
- Возможное влияние расширений (Extension) на CPU user time и прерывания — требуется анализ кода расширений и вызываемых функций.
3.3 Проблемы инфраструктуры
- Насыщение пропускной способности дисков данных при текущем объеме записи.
- Увеличенная нагрузка на WAL-устройство, хотя его утилизация остается низкой, рост объема записи может влиять на синхронизацию.
- Недостаток свободной памяти для дополнительного кэширования, но текущий объем кэша (720 GB) близок к effective_cache_size (730 GB). Риск связан с возможным вытеснением страниц при пиковых аллокациях.
4. Общие рекомендации по оптимизации производительности СУБД и инфраструктуры
Важно: Рекомендации формулируются как направления для дальнейшей диагностики и возможных изменений, без конкретных значений параметров, поскольку окончательные решения требуют дополнительных данных и тестирования.
4.1 Конкретные рекомендации по оптимизации производительности СУБД
- Исследовать запрос -5038981907002478858:
Получить план выполнения и трассировку с auto_explain.log_analyze.
Проверить, какие расширения используются в запросе, оценить их необходимость и эффективность. - Анализ LWLock BufferMapping:
Проверить статистику по pg_stat_bgwriter на предмет buffers_backend_fsync и buffers_alloc.
Оценить эффективность увеличения shared_buffers (текущие 246 GB при ~720 GB кэша ОС могут быть увеличены, но это требует тестирования).
Рассмотреть увеличение числа буферных разделов через параметр lwlock_shared_limit (только после анализа конкуренции). - Оптимизация работы с WAL:
Изучить причины роста записи WAL: возможно, увеличилась частота UPDATE/DELETE или количество транзакций.
Проверить настройки wal_writer_delay, wal_writer_flush_after.
Рассмотреть возможность группировки мелких транзакций в приложении. - Блокировки tuple:
Выявить запросы, вызывающие конфликты на уровне строк (анализ логов, pg_stat_user_tables, pg_locks).
Проверить индексы на часто обновляемых таблицах — отсутствие индексов может приводить к блокировкам большого числа строк. - Параллелизм:
Оценить возможность включения параллельного выполнения запросов (max_parallel_workers_per_gather > 0) для операций, которые могут выиграть от распараллеливания (seq scan больших таблиц). Учитывая 192 ядра, потенциал значительный. - Расширение pgpro_stats:
Оценить накладные расходы на сбор детальной статистики. При необходимости уменьшить частоту сбора или детализацию.
4.2 Конкретные рекомендации по оптимизации инфраструктуры
- Дисковая подсистема данных:
Провести профилирование ввода-вывода (iostat -x 1, pidstat -d) для выявления источников нагрузки.
Рассмотреть возможность добавления более производительных дисков или увеличения числа устройств в LVM-группе.
Проверить, сбалансирована ли нагрузка между устройствами vdh–vdk (по медианам выглядит равномерно). - WAL-устройство:
Убедиться, что vdg действительно выделено исключительно под WAL и не конкурирует с другими процессами.
Мониторить задержки записи (w_await). При росте задержек может потребоваться более быстрое устройство. - Память:
Несмотря на ALARM по свободной памяти (<5%), текущая ситуация допустима для dedicated сервера БД, если не наблюдается подкачки (swap=0). Рекомендуется контролировать memory_free и memory_cache на предмет резких провалов кэша. - CPU:
Исследовать причину устойчивого снижения cpu idle в P2 с помощью детального мониторинга (mpstat -P ALL, perf top). Убедиться, что нет роста steal из-за гипервизора (KVM).
5. Заключение
В период 15:35–16:35 (P2) зафиксировано значительное ухудшение производительности СУБД по сравнению с предыдущим часом (P1). Основные признаки:
- Операционная скорость перешла к устойчивому падению (R²=0.94).
- Ожидания СУБД стали уверенно расти (R²=0.58), усилилась их обратная корреляция со скоростью (r = -0.77).
- Критическими типами ожиданий стали LWLock (ВКО=0.30) и Extension (ВКО=0.14).
- Дисковая подсистема данных достигла утилизации >90%, а операционная скорость стала сильно коррелировать с объемом записи на диск (r=0.73, R²=0.54).
- Нагрузка на WAL возросла вдвое, появились ожидания WALSync.
- Выделен проблемный запрос -5038981907002478858, генерирующий основную долю ожиданий Extension и LWLock.
Требуются дополнительные данные для углубленного анализа:
- Планы выполнения и трассировка топ-запросов.
- Детализация по CPU (распределение us/sy/wa во времени).
- Статистика pg_stat_bgwriter, pg_stat_database, pg_stat_user_tables.
- Информация о количестве одновременных сессий и их состояниях.
- Логи PostgreSQL за указанные периоды (особенно сообщения о checkpoint, autovacuum, блокировках).
На основе полученных данных рекомендуется сфокусироваться на оптимизации выявленного запроса, анализе конкуренции за легковесные блокировки и оценке пропускной способности дисковой подсистемы данных.