# Monitor: monitor_read_timeout, 6 ноября 2026

Сессия: `e553d21f-3e16-4891-9321-65b73fed9cee`. Проверяемое окно:
`2026-11-06T04:10:47.106193+00:00` — `2026-11-06T04:25:47.106193+00:00`.

## Причина

Ошибка воспроизведена на HTTPS Monitor. Gateway оставался доступен, блокирующих
SQL-запросов не обнаружено. В сессии 15 769 записей nats_log, 174 request_id и
28 аудиозаписей. Отдельное последовательное чтение через действующий TrafficStore:
сессии — 535 мс; потоки и запросы — QueryCanceledError при лимите SQL 2000 мс.

Список запросов использовал asyncpg.fetchrow для агрегата, который всегда возвращает
одну строку. Ненулевой fetch count запрещает запуск параллельных workers PostgreSQL,
хотя план может рассчитывать на них. Это подтверждено сравнением одного SQL и
[документацией PostgreSQL 16](<https://www.postgresql.org/docs/16/when-can-parallel-query-be-used.html>).

Каталог потоков использовал полную проекцию журнала и разбирал поля конвертов больших
сообщений модели, которые каталог не показывает. Он переведён на существующую
archive_sql(envelopes=False); полные сведения выбранного события остаются доступны.

## Сопоставимые чтения production без изменения данных

| Выборка | До | После | Проверка содержимого |
|---|---:|---:|---|
| Агрегат списка запросов | 3870 мс | 1317 мс | Полные результаты равны |
| Каталог потоков | 2361 мс | 821 мс | Полные результаты равны, 25 строк страницы |

Измерения выполнены последовательно на одном фиксированном окне. Для чтения старого
варианта использован только локальный лимит диагностической read-only транзакции
5000 мс. Настройки приложения и PostgreSQL не изменены. Это одиночные сравнения,
не нагрузочный тест и не p95. В приложении остаются 2 с на SQL и 3 с на чтение.

## Исходники и тесты

- [MR !62](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/merge_requests/62>).
- Commit: `351c8d53f99894e695fffe9d46f3df1d78ac38d1`.
- Merge/main: `66a98354c484b0c382d0b4b91c24176babcb2959`.
- 3 файла, +20 / −7 строк; корневой CI и схема базы не менялись.
- Локально: 45 PostgreSQL integration tests passed, 2 NATS tests skipped.
- Тест больших тел проверяет оба списка запросов, каталог потоков, счётчики и
  доступность полных отложенно загружаемых деталей при существующих лимитах.
- MR pipeline #5776: все 5 обязательных checks прошли.

## Поставка

Обновляется только Gateway. Прежний digest:
`builder-registry.builder.giscloud.ru/gis/chat-agent/api-gateway/main@sha256:16d586daf4a52b81c823f719e9ee0b7682e8b1855ac17a3febfffb1123caea40`.

- Main pipeline #5777: все 5 обязательных jobs завершились успешно; Front и Ruby
  штатно пропущены как незатронутые. На MR эти группы выполнялись и прошли.
- Публикация только Gateway: job #30200; preflight #30207; адресная поставка
  `refresh component`, `CI_COMPONENT=gateway`: job #30233. Все завершились успешно.
- Фактический digest в Insight:
  `builder-registry.builder.giscloud.ru/gis/chat-agent/api-gateway/main@sha256:48d6545e4f7b4f4f2d350da0c5b1182791557bca7f0263054bdd1b33862fedcb`.
- Revision `66a98354c484b0c382d0b4b91c24176babcb2959`, версия Insight `7.0.1185`,
  replicas 1/1 running, readiness `/healthz` — HTTP 200.
- Контроль штатного TrafficStore в новом контейнере: сессии 600 мс, потоки 894 мс,
  запросы 1389 мс. Использованы неизменённые ограничения приложения.
- HTTPS Monitor: в исходном окне показаны 28 завершённых потоков, команда и
  транскрипция. Открыты схема команды (38 передач), журнал, боковые подробности и
  отложенное JSON-содержимое исходного вопроса. Ошибка тайм-аута не повторилась.
- [Снимок загруженной истории](#archive-availability).

Другие сервисы, пакет расширения и production-данные не изменялись. Расширение
перезагружать не нужно. На контрольной вкладке включена пауза, чтобы сохранить
исходное временное окно при проверке.
