[go: up one dir, main page]

HeapDeck: Postgres® Monitor для iPhone

Увидеть, что горит в вашем Postgres.Потушить.

Пришёл алерт по Postgres, а ноутбук остался дома? HeapDeck покажет, кто блокирует и далеко ли сервер от wraparound, а действовать вы сможете прямо с iPhone. Остановите инцидент с телефона, а причину устраните уже за рабочим столом.

Загрузите в App Store
Отсканируйте, чтобы открыть на iPhone

Free · Pro 19,99 $ разово · PostgreSQL 13–19 · iOS 17+ · iPhone и iPad

Экран «Здоровье» в HeapDeck: боевой сервер в состоянии «Критично» — сначала заблокированные сессии, затем соединения, самый долгий запрос, wraparound и репликация

Посмотрите, кто в Postgres блокирует всех. Остановите корень — с предпросмотром.

Экран «Блокировки» строит дерево по pg_blocking_pids() и ставит корень блокировки наверх: его pid, user@app, как долго он держит блокировку и что выполняет. Под ним — все сессии, застрявшие в очереди.

  • Кнопка корня зависит от его состояния: Отменить корень, пока он выполняет запрос, Снять корень, когда он в состоянии idle in transaction. Счётчик на кнопке учитывает сессии, которые ждут сам корень, а подтверждение перечисляет их pid. PRO
  • Перед отправкой HeapDeck заново читает цепочку и спрашивает ещё раз, если цифры изменились. Потом он сообщает, что измерил: сколько сессий разблокировано и сколько ещё ждут.
  • Отмена прерывает текущий запрос. Снятие завершает сессию и откатывает её транзакцию — после того как вы введёте pid корня. PRO
  • У каждой ждущей сессии видно, чего она ждёт, например RowExclusiveLock on public.orders. Корень в состоянии idle in transaction выделен, а дедлок помечен именно как дедлок.
Экран «Блокировки»: корень блокировки уже 06:48 простаивает в транзакции и блокирует четыре сессии; под ним кнопка «Снять корень (разблокирует 2)» и пояснение, почему отмену проигнорируют

Узнайте свой процент wraparound раньше, чем Postgres перестанет принимать запись.

Экран «Vacuum и раздувание» показывает, насколько сервер близок к wraparound ID транзакций, как долю от 2³¹, и самые старые таблицы по возрасту relfrozenxid. На пределе PostgreSQL отказывает в записи с ошибкой database is not accepting commands to avoid wraparound data loss.

  • С 75% экран говорит об этом прямо и перечисляет обычные причины, по которым autovacuum не успевает: долгая открытая транзакция, неактивный слот репликации, застрявший воркер.
  • Мёртвые строки по каждой таблице: их доля и когда таблицу последний раз обрабатывал vacuum.
  • Неиспользуемые индексы и место, которое они занимают. HeapDeck скопирует для вас DROP INDEX CONCURRENTLY, но сам никогда его не выполняет.
  • Запустите VACUUM (ANALYZE) или ANALYZE для таблицы из списка. VACUUM FULL сначала попросит ввести имя таблицы. PRO
Экран «Vacuum и раздувание»: wraparound ID транзакций на 86%, предупреждение, что на 100% база перестанет принимать запись, и три вероятные причины

Ваш Postgres через ваш бастион, с правами, которые у вашей роли уже есть.

HeapDeck подключается с вашего iPhone к вашему серверу напрямую или через ваш SSH-бастион. Посередине нет сервера HeapDeck, аккаунта тоже нет. AI-ассистент, если вы его настроите, общается только с выбранным вами провайдером и по вашему собственному ключу.

  • SSH с паролем, с ключом Ed25519, ECDSA или RSA и паролем к нему или с ключом Secure Enclave, через маршрут до трёх хостов. HeapDeck закрепляет ключ каждого хоста при первом подключении.
  • TLS по умолчанию с sslmode=require. Отпечаток SHA-256 сертификата закрепляется, а сменившийся сертификат останавливает соединение, пока вы не решите, что делать.
  • Пароли, ключи и отпечатки остаются в Keychain этого iPhone и не синхронизируются. Face ID открывает приложение.
  • Нет суперпользователя? Вместо пустого экрана HeapDeck покажет точный GRANT pg_monitor, который ему нужен.
Окно «Проверьте этот сервер» при первом подключении: отпечаток SHA-256 сертификата сервера, чтобы сверить его со своими записями, прежде чем доверять

Проблемы в Postgres, которые можно решить с iPhone

Каждая карточка начинается с того, что вы видите, когда что-то пошло не так, и ведёт к руководству с SQL, порогами и нужным экраном. Руководства на английском.

Всё это можно смотреть бесплатно на одном сервере. Для остановки сессии, VACUUM и удаления слота нужен Pro: разовая покупка за 19,99 $.

Все сценарии

Экраны, которые вы открываете во время инцидента в Postgres

Десять плиток на экране «Здоровье» и за каждой — нативный экран, так что набирать psql на клавиатуре телефона не придётся. SQL-консоль под рукой, когда нужна, и проверяет каждый запрос перед выполнением.

  • Здоровье

    Десять плиток: сессии относительно max_connections, заблокированные сессии, самый долгий запрос, TPS, попадания в кэш, autovacuum, wraparound, репликация, размер базы и медленные запросы. Вердикт «Внимание» или «Критично» называет плитки, которые к нему привели. Пока экран открыт, данные обновляются каждые 10 секунд.

  • Активность

    Все сессии из pg_stat_activity, ждущие — первыми. Фильтры: активные, idle in transaction, дольше 10 с или ждущие. Смахните строку, чтобы отменить запрос или снять сессию.

  • Репликация и слоты

    Отставание проигрывания на каждой реплике с разбивкой по фазам WAL. Каждый слот с объёмом WAL, который он удерживает, и предупреждение, когда неактивный слот забивает диск.

  • Медленные запросы

    300 самых тяжёлых запросов из pg_stat_statements с сортировкой по общему времени, среднему, вызовам или строкам. Подробности запроса показывают его роль, базу, тайминги и I/O, а также сессии, которые выполняют его сейчас (PostgreSQL 14+).

  • Данные и SQL-консоль

    Просмотр таблиц, фильтр на сервере, переход по внешним ключам, экспорт страницы в CSV или JSON. Консоль классифицирует каждый запрос прямо при наборе; во Free чтение идёт внутри BEGIN READ ONLY.

  • AI-ассистент PRO

    Объясняет инцидент или цепочку блокировок и предлагает черновик исправления — с вашим собственным API-ключом или вашим сервером Ollama. Получает очищенный снимок и никогда ничего не запускает сам.

Встроенное демо HeapDeck, в тёмной и светлой теме, как iOS.

Окно «Отменить блокирующую сессию»: pid 24310, миграция ALTER TABLE, активная уже 01:12, и надпись «Это должно разблокировать 2 ждущие сессии»

Отмена корня Что разблокируется, видно ещё до подтверждения.

Экран «Vacuum и раздувание»: мёртвые строки по таблицам и шесть индексов без сканов, всего 34 ГБ

Vacuum и раздувание Мёртвые строки и неиспользуемые индексы с занятым ими местом.

Экран «Активность»: сессии с состоянием, временем ожидания и SQL; блокирующая помечена «блокирует 4 сессии»

Активность Ждущие сессии первыми.

Экран «Репликация»: две реплики с отставанием проигрывания и предупреждение, что из-за неактивного слота PostgreSQL хранит WAL вечно

Репликация Отставание каждой реплики и слоты, удерживающие WAL.

Экран «Медленные запросы»: запросы, отсортированные по общему времени, с числом вызовов, средним временем и строками

Медленные запросы Из pg_stat_statements.

Экран «Активность» для роли без pg_monitor: «Сессии видно, а их SQL — нет» и кнопка «Покажите как»

Ограниченный доступ Нет pg_monitor? Приложение скажет, что скрыто и как это исправить.

SQL-консоль: DELETE FROM public.orders классифицирован как «Деструктив», условия WHERE нет, оценка — 18,1 млн строк

SQL-классификатор Его вердикт для DELETE без WHERE.

Ответ ассистента: простаивающая транзакция держит блокировку строки в orders, ждут семь сессий, и предложены следующие шаги

AI-ассистент Объясняет цепочку блокировок.

Экран «Что видит модель»: снимок, который уходит модели, с именами, заменёнными плейсхолдерами вроде table_1

Что видит модель Точный текст до отправки.

Вкладка «Данные»: таблица orders в сетке, показано 200 из 18 412 004 строк

Данные Страницы по 200 строк, фильтр на сервере.

Отмена корня Что разблокируется, видно ещё до подтверждения.

Мониторинг Postgres бесплатный. Pro — одна покупка.

Сначала попробуйте на своём боевом сервере: все экраны мониторинга бесплатны для одного сервера. Pro добавляет остальные серверы и все действия — один раз, за 19,99 $. Без подписки и без аккаунта.

Free

навсегда

Подключите к одному боевому серверу и смотрите всё.

  • Все экраны мониторинга: Здоровье, Активность, Блокировки, Vacuum и раздувание, Репликация, Хранилище, Медленные запросы
  • Одно сохранённое соединение с TLS, SSH-туннелем, закреплёнными отпечатками и Face ID
  • Просмотр данных с фильтрами на сервере, внешними ключами, экспортом в CSV и JSON
  • SQL-консоль для чтения — внутри транзакции только на чтение
  • SQL-классификатор и его пояснения

Pro

19,99 $

разовая покупка

Для момента, когда нужно действовать.

  • Сколько угодно сохранённых соединений — все серверы, за которые вы дежурите
  • Отмена запросов и снятие сессий, остановка корня цепочки блокировок
  • VACUUM, ANALYZE и удаление слота репликации
  • Запись и DDL в консоли — через подтверждения
  • Вставка, правка и удаление строк в таблицах с первичным ключом
  • AI-ассистент с вашим ключом или вашей моделью

Действия Pro видны и во Free с пометкой PRO, чтобы было понятно, что они сделают. На встроенном демо-инциденте ассистент работает бесплатно. За пределами США App Store показывает цену в вашей валюте.

Free · Pro 19,99 $ разово · PostgreSQL 13–19 · iOS 17+ · iPhone и iPad

Вопросы о HeapDeck и Postgres

Работает ли HeapDeck с Neon, Supabase, Amazon RDS, Cloud SQL или Azure?

HeapDeck работает с любым PostgreSQL 13–19, до которого дотянется ваш iPhone: свой или управляемый, основной или реплика. Если ваша роль не суперпользователь, экраны показывают, что скрыто, и GRANT pg_monitor, который это исправит.

Neon, Supabase и Amazon RDS проверены вживую. Вставьте строку подключения из панели Connect в Neon или Supabase; для RDS укажите endpoint инстанса из консоли RDS. Neon подключается напрямую и через хост -pooler. У прямого хоста Supabase есть только IPv6-адрес: в сети без IPv6 HeapDeck скажет об этом и предложит строку Session pooler.

verify-full работает, если сертификат ведёт к корневому CA, которому доверяет iOS, как у Neon. Amazon RDS подписывает сертификаты собственным корневым CA, которого нет в iOS; для RDS и похожих провайдеров используйте sslmode=require: соединение шифруется, а HeapDeck закрепляет отпечаток сертификата при первом подключении.

Подключится ли HeapDeck к базе за бастионом?

Да. Включите SSH-туннель в соединении и укажите хост и пользователя бастиона, а также пароль или ключ. HeapDeck читает ключи Ed25519, ECDSA и RSA в форматах OpenSSH, PEM, PKCS#8 и PuTTY, с паролем ключа или без него, и может создать ключ Secure Enclave, который никогда не покидает ваш iPhone.

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

Уходят ли с iPhone мои пароли, ключи или данные?

HeapDeck подключается к вашему серверу напрямую или через ваш SSH-бастион, без нашего сервера посередине. Аккаунт не нужен. Пароли, SSH-ключи и закреплённые отпечатки остаются в iOS Keychain на этом устройстве, без синхронизации с iCloud.

С телефона могут уйти две вещи, обе под вашим контролем: вопрос AI-провайдеру, которого вы настроили (Pro), а также отчёты о сбоях и счётчики использования — их можно выключить при первом запуске или в Настройках. Ни там, ни там нет SQL, имён таблиц, имён хостов, значений или учётных данных. Подробности — в политике конфиденциальности.

Нужен ли суперпользователь?

Нет. Роли с pg_monitor хватает для экранов мониторинга: GRANT pg_monitor TO your_role;. Без неё HeapDeck тоже работает и помечает, что сервер скрывает от вашей роли. Чтобы отменять запросы в сессиях других ролей, нужны обычные права PostgreSQL, например pg_signal_backend; без них HeapDeck выдаст команду, которую можно передать вашему DBA.

Отменить запрос или снять сессию: что выбрать?

Отмена (pg_cancel_backend) останавливает запрос, который выполняет сессия; сама сессия и её транзакция остаются открытыми. Снятие (pg_terminate_backend) завершает всю сессию и откатывает её транзакцию.

У сессии в состоянии idle in transaction нет выполняемого запроса, поэтому отмена на неё не действует: её блокировки освободит снятие. Перед снятием корня цепочки блокировок или сессии на боевом соединении HeapDeck попросит ввести pid.

Может ли HeapDeck сломать мне базу?

Free вообще ничего не пишет: чтение в консоли идёт внутри BEGIN READ ONLY … ROLLBACK. В Pro каждая запись проходит четыре проверки по порядку: Pro, переключатель «Только чтение» в соединении, SQL-классификатор и ваше подтверждение.

Для VACUUM FULL, удаления слота и снятия корня блокировки сначала нужно ввести имя таблицы, имя слота или pid. Соединение с пометкой «Боевой» получает бейдж PROD и более строгие подтверждения.

Почему бы просто не зайти по SSH и не запустить psql?

Можно и так. HeapDeck отводит каждому вопросу инцидента свой экран, чтобы не набирать запросы на клавиатуре телефона: кто блокирует и сколько ждут, что выполняет корень, далеко ли до wraparound, какой слот держит WAL. Перед действием он заново читает цепочку блокировок и просит подтвердить.

Что видит AI-ассистент?

Очищенный снимок экрана, о котором вы спросили. Хоста, порта, паролей и ключей в нём никогда нет, а значения превращаются в плейсхолдеры вроде $1. Для облачных моделей имена баз данных, таблиц и колонок по умолчанию скрыты и возвращаются на место у вас в телефоне, когда приходит ответ.

Запросы идут с вашего iPhone к выбранному провайдеру по вашему собственному ключу (Anthropic, OpenAI, OpenRouter, Z.ai) или на ваш собственный сервер Ollama либо OpenAI-совместимый сервер. «Что видит модель» показывает точный текст до отправки. Ассистент входит в Pro и никогда не выполняет SQL сам.

Есть ли подписка?

Нет. Мониторинг одного сервера бесплатный, а Pro — сколько угодно серверов и все действия — одна покупка за 19,99 $, привязанная к вашему Apple ID. Аккаунта нет, пробного периода с обратным отсчётом тоже.

Пришлёт ли он алерт, если что-то сломается?

Нет. HeapDeck работает, пока открыт, и ничего не мониторит в фоне. Алертинг оставьте там, где он есть: HeapDeck — это экран, который вы открываете после алерта.

Работает ли он на iPad?

Да. На iPad HeapDeck работает на весь экран в любой ориентации, с боковой панелью вместо панели вкладок. Экран «Блокировки» показывает дерево блокировок рядом с выбранной сессией, а SQL-консоль занимает всю ширину. Pro привязан к вашему Apple ID, поэтому одна покупка действует и на iPhone, и на iPad.

Amazon Web Services, AWS и Amazon RDS — товарные знаки Amazon.com, Inc. или её аффилированных лиц. Neon, Supabase, Google Cloud SQL и Microsoft Azure — товарные знаки их владельцев. HeapDeck не связан ни с одной из этих компаний и не одобрен ими.

Руководства по инцидентам в Postgres

Проблемы, из-за которых будят ночью, — по странице на каждую: SQL для ручной проверки и что показывает HeapDeck. Руководства на английском.

Из блога

Все статьи

Поставьте его на телефон до следующего инцидента в Postgres.

Добавьте сервер, закрепите его сертификат — и все экраны мониторинга ваши бесплатно. Pro — для той ночи, когда придётся действовать.

Загрузите в App Store
Отсканируйте, чтобы открыть на iPhone

Free · Pro 19,99 $ разово · PostgreSQL 13–19 · iOS 17+ · iPhone и iPad