Блокировки, которых не видно на учебном стенде: практикум по диагностике PostgreSQL
Статья посвящена разработке учебного практикума по диагностике блокировочной деградации в PostgreSQL 18. Его цель — дополнить изучение механизма транзакций наблюдением за поведением СУБД при конкурентной нагрузке. В практикуме воспроизводятся четыре типа конфликтов: конкуренция за «горячую» запись, широкий UPDATE с вложенным SELECT, DDL-блокировка и взаимоблокировка. Для локализации используются pg_stat_activity, pg_locks и pg_blocking_pids(), а влияние оценивается по TPS, p99, p99,9 и динамике очереди ожиданий. Техническая воспроизводимость проверена в 75 прогонах — по 15 для baseline и каждого конфликтного режима. Среднее парное отношение TPS сценария к TPS baseline составило 0,066 для hotspot, 0,243 для широкого UPDATE и 0,221 для DDL. В сценарии широкого UPDATE средняя p99,9 достигла 817 мс против 23 мс в baseline, а очередь наблюдалась в 77,8% снимков. Результаты подтверждают пригодность сценариев для воспроизводимой демонстрации связи между блокировками и деградацией производительности; оценка образовательного эффекта требует отдельного исследования.