RowDeck: MySQL® Monitor для iPhone

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

Ночью пришёл алерт, а ноутбук дома? RowDeck открывается на экране «Состояние», находит транзакцию, которая держит блокировку, и считает сессии, застрявшие за ней. Завершите нужный поток с iPhone, а причину устраните уже за рабочим столом.

Free Pro 14,99 $ разово MySQL 8.0+ и MariaDB 10.5+ iOS 17+ iPhone

Инцидент за четыре экрана
Работает с MySQL 8.0 и новееMariaDB 10.5 и новееPercona Server for MySQLAmazon RDSAurora MySQLСвои серверы
В три часа ночи

От алерта до разблокировки за четыре экрана.

Встроенное демо воспроизводит типичный инцидент в MySQL. Забытая транзакция держит блокировку строки в shop.orders, за ней ждёт миграция, а следом в очередь выстраиваются восемь сессий. Выберите шаг, чтобы увидеть его экран.

Попробуйте без сервера: на экране «Соединения» нажмите Открыть демо. Аккаунт не нужен, а действия Pro работают на демонстрационных данных.

Экран «Состояние» сервера prod-shop в статусе «Критично»: «Заблокировано» показывает 8 ожидающих, соединений 112 из 151, самый долгий запрос идёт 09:12
Состояние · Критично · 8 ожидают
  • Строковые блокировки

    Ожидания блокировок InnoDB, сгруппированные под потоком, который их держит, с SQL, который выполняет каждый из них, и временем ожидания.

  • Metadata locks

    Очередь за ALTER TABLE: кто ждёт metadata lock на таблицу, какая транзакция его держит, и кнопка, которая вместо этого отменит ожидающий ALTER.

  • Deadlocks

    Последний deadlock в InnoDB: кто чего ждал и какая транзакция откатилась.

  • Завершение на Amazon RDS

    Amazon RDS или Aurora не дают прав на KILL? RowDeck вызовет mysql.rds_kill и укажет этот способ в подтверждении.

Purge и раздувание

Следите за AUTO_INCREMENT, пока INSERT ещё проходят.

Экран «Purge и раздувание» показывает, какая часть диапазона каждого auto-increment уже израсходована, насколько отстал purge и какие таблицы и индексы занимают место впустую.

  • Запас по каждой колонке. Когда order_items.id дошёл до 93% диапазона INT, RowDeck предупреждает, что на пределе каждый INSERT будет падать, и копирует ALTER, который расширит колонку.
  • History list length и самая старая транзакция, из-за которой InnoDB не может вычистить старые версии строк.
  • Фрагментированные таблицы, а также неиспользуемые и дублирующие индексы с местом, которое занимает каждый из них.
  • Запускайте ANALYZE TABLE прямо из списка, а OPTIMIZE TABLE после ввода имени таблицы. Операторы DROP INDEX и ALTER копируются в буфер обмена, а когда их выполнять, решаете вы. PRO
Экран «Purge и раздувание»: order_items.id на 93% диапазона INT с предупреждением, что на пределе каждый INSERT будет падать, отставание purge 1,2 млн и самая старая транзакция
Внутри приложения

Все экраны, которые вы открываете во время инцидента в MySQL.

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

  • Состояние

    Один вердикт и десять плиток с порогами: соединения относительно max_connections, заблокированные потоки, самый долгий запрос, запросы в секунду, попадания в buffer pool, отставание purge, запас auto-increment, deadlocks, репликация и диск. Пока экран открыт, он обновляется каждые 10 секунд; тема, тёмная или светлая, следует за iOS.

    Экран «Состояние» в светлой теме приложения: «Критично», 8 ожидают, соединений 112 из 151
  • Активность

    Все потоки из processlist, сначала ожидающие. Фильтры: выполняются, в транзакции, дольше 10 с, ожидают; потоки можно сгруппировать по клиентам.

  • Репликация

    На реплике: потоки IO и SQL, отставание и ошибка, на которой остановился канал. На источнике: подключённые реплики и место, которое занимают бинлоги.

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

    Дайджесты запросов из performance_schema с сортировкой по общему времени, среднему времени, числу вызовов или проверенных строк.

  • Хранилище

    Самые большие схемы, таблицы и индексы с разбивкой на данные, индексы и свободное место.

  • Данные

    Просмотр таблиц, фильтр на сервере, переход по внешним ключам, экспорт страницы в CSV или копирование в JSON. Правка строк входит в Pro.

  • SQL-консоль

    Классификатор помечает каждый оператор прямо при наборе: «Чтение», «Запись», DDL или «Деструктивный». Free выполняет чтение, Pro выполняет остальное.

  • PRO

    AI-ассистент с вашей моделью

    Объясняет инцидент или цепочку блокировок и предлагает черновик исправления. Читает очищенный снимок, показывает, что отправит, и сам ничего не выполняет. На демо бесплатно.

    • Anthropic
    • OpenAI
    • OpenRouter
    • Z.ai
    • OpenAI-совместимый сервер
    • Ollama в вашей сети
Перед любой записью

Между вашим пальцем и сервером стоят четыре проверки.

RowDeck проходит их по порядку. «Нет» на любом шаге останавливает действие, и до MySQL ничего не доходит.

  1. Pro

    Free никогда не пишет на ваш сервер.

  2. Соединение Read-only

    Пометьте соединение как Read-only, и запись через него остановится, даже с Pro, пока вы временно не разрешите её на этот сеанс.

  3. Классификатор

    Проверяет каждый оператор, во Free и в Pro.

  4. Ваше подтверждение

    Предпросмотр с целью, схемой, соединением и бейджем PROD. Деструктивные шаги и завершение потоков на соединении Production ждут, пока вы не введёте цель.

Что увидел классификатор prod-shop PROD
SELECT * FROM orders WHERE id = 4820118; Чтение
UPDATE orders SET status = 'shipped' WHERE id = 4820118; Запись
CREATE INDEX idx_orders_total ON orders (total); DDL
TRUNCATE TABLE shop.sessions; Деструктивный
  • Через ваш бастион

    SSH с паролем, одноразовым кодом или ключом: Ed25519, ECDSA или RSA в формате OpenSSH, PEM, PKCS#8 или PuTTY либо ключ Secure Enclave. За бастионом можно добавить до двух промежуточных хостов.

  • Закреплённый TLS

    При первом подключении RowDeck показывает отпечаток SHA-256 сертификата сервера и останавливается, если он потом изменится.

  • Keychain и Face ID

    Пароли, ключи и отпечатки хранятся в iOS Keychain на этом iPhone. Face ID открывает приложение.

  • Без PROCESS говорит как есть

    Без этого права MySQL показывает только ваши собственные потоки. RowDeck прямо об этом говорит и даёт готовое исправление:

    GRANT PROCESS ON *.* TO 'oncall'@'%';
Экраны

RowDeck 1.0 на встроенных демо-данных.

Экран «Состояние»: «Критично», 8 ожидают, десять плиток

Состояние Инцидент ещё до того, как вы открыли ноутбук.

Дерево блокировок с двумя корнями и ALTER TABLE, который ждёт metadata lock

Блокировки Строковые блокировки и metadata locks в одном дереве.

Окно «Закрыть блокирующее соединение» с введённым для подтверждения ID потока

Завершить соединение Что разблокируется, видно до подтверждения.

Экран «Активность» с фильтрами «Выполняется», «В транзакции», «> 10 с», «Ожидают» и «Все»

Активность Сначала ожидающие потоки.

Экран «Purge и раздувание»: шесть неиспользуемых индексов занимают 34 ГБ, кнопка «Копировать DROP INDEX»

Индексы Неиспользуемые и дублирующие индексы, DROP INDEX в буфере обмена.

Репликация на реплике: потоки IO и SQL работают, отставание от источника 4,2 с

Репликация Состояние канала и транзакции, которые ещё нужно применить.

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

Медленные запросы По общему времени.

Экран «Хранилище»: 412 ГБ данных и индексов, схемы и самые большие таблицы

Хранилище Самые большие таблицы и индексы.

Вкладка «Данные» таблицы shop.orders с фильтром по необработанным заказам

Данные Фильтр на странице или на сервере.

SQL-консоль с запросом на чтение к performance_schema и его результатом

SQL-консоль Каждый оператор классифицирован.

SQL-консоль: CREATE INDEX классифицирован как DDL, который фиксирует любую открытую транзакцию

DDL Что увидел классификатор до выполнения.

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

Ассистент Ваша модель, а каждое действие решаете вы.

Форма нового соединения с SSH-туннелем через бастион и импортом ключа

SSH-туннель С вашим ключом и промежуточными хостами.

Состояние Инцидент ещё до того, как вы открыли ноутбук.

Цены

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

Подключите RowDeck к боевому серверу и пользуйтесь всеми экранами мониторинга бесплатно. Заплатите 14,99 $ один раз, в ту ночь, когда понадобится действовать.

Free

навсегда

0 $

Всё видно на одном сервере.

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

Pro

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

14,99 $

Действуйте на любом сервере.

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

Без подписки и без аккаунта. На демо можно до покупки попробовать каждое действие Pro на демонстрационных данных. «Восстановить покупки» есть на экране покупки и в настройках. За пределами США App Store показывает цену в вашей валюте.

Free Pro 14,99 $ разово MySQL 8.0+ и MariaDB 10.5+ iOS 17+ iPhone

Вопросы

Вопросы о RowDeck и MySQL

Не нашли ответа? Пишите на support@rowdeck.app.

Работает ли RowDeck с Amazon RDS, Aurora или моими собственными серверами?

RowDeck работает с MySQL 8.0 и новее и с MariaDB 10.5 и новее, если ваш iPhone может до них достучаться: на своих серверах или в управляемых сервисах, включая Amazon RDS и Aurora MySQL. Percona Server for MySQL тоже поддерживается.

На Amazon RDS и Aurora, где администратор не может выполнить KILL для чужих потоков, RowDeck вызывает процедуру провайдера mysql.rds_kill. За прокси RowDeck не отправляет KILL, потому что ID потока может принадлежать другому серверу, и даёт вам оператор, чтобы выполнить его на самом сервере.

MySQL 5.7 и MariaDB до 10.5 не поддерживаются, а у TiDB другие таблицы мониторинга. Приложение сообщит об этом при подключении.

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

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

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

Уходят ли с iPhone мои учётные данные или данные из базы?

RowDeck подключается к вашему серверу напрямую или через ваш бастион. Сервера RowDeck посередине нет, аккаунт не нужен. Пароли и ключи остаются в iOS Keychain.

Когда вы нажмёте «Готово» на первом экране, отчёты о сбоях начнут уходить в Sentry, а счётчики использования — на наш собственный сервер аналитики. Оба переключателя на этом экране изначально включены. Любой из них можно выключить там же или позже в разделе Настройки › Конфиденциальность. Ни отчёты, ни счётчики не содержат ваш SQL, имена схем, таблиц и колонок, имена хостов, значения и учётные данные. Подробно об этом написано в политике конфиденциальности.

Нужны ли SUPER или учётная запись администратора?

Нет. Экранам мониторинга нужны права только на чтение, и форма соединения перечисляет их для MySQL и для MariaDB. Главное из них — PROCESS: без него MySQL показывает только ваши собственные потоки, и RowDeck говорит об этом на каждом экране, а не показывает пустой список.

Чтобы завершать чужие потоки, действиям Pro нужно право CONNECTION_ADMIN; на Amazon RDS и Aurora RowDeck вместо этого использует процедуру завершения от провайдера. Если сервер скрывает метрику, вы видите причину, а не ноль.

KILL QUERY или KILL CONNECTION: что выбрать?

KILL QUERY останавливает выполняемый оператор, а соединение и его транзакция остаются. KILL CONNECTION закрывает соединение и откатывает его открытую транзакцию.

Поток в Sleep с открытой транзакцией ничего не выполняет, поэтому KILL QUERY ничего не меняет и его блокировки остаются. RowDeck смотрит, что делает корень, и предлагает тот вариант, который освободит очередь.

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

Free никогда не пишет: чтение в консоли идёт внутри транзакции только на чтение. В Pro каждая запись проходит четыре проверки по порядку: Pro, переключатель Read-only в соединении, классификатор и ваше подтверждение. Деструктивные операторы ждут, пока вы не введёте цель, а соединение с пометкой Production получает бейдж PROD и более строгие подтверждения.

DROP INDEX и ALTER … BIGINT RowDeck копирует для вас, а выполнять их оставляет вам. Он не чистит бинлоги и не пропускает транзакции на реплике, а у сервера никогда не запрашивает LOAD DATA LOCAL или выполнение нескольких операторов за один вызов.

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

Можно и так. Но в три часа ночи на клавиатуре телефона RowDeck избавит вас от JOIN по performance_schema и information_schema: дерево блокировок, ждущий ALTER и транзакция за ним открываются одним нажатием с экрана «Состояние».

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

Очищенный снимок экрана, о котором вы спросили. Хост, порт, IP-адреса, имена соединений и пароли никогда не покидают iPhone, как и значения внутри запросов. Для облачных моделей имена схем, таблиц и колонок уходят в виде плейсхолдеров вроде table_1, а RowDeck возвращает настоящие имена у вас на iPhone.

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

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

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

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

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

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

Мы сделали RowDeck для iPhone в портретной ориентации. Своего интерфейса для iPad у него нет.

Amazon Web Services, AWS, Amazon RDS и Amazon Aurora — товарные знаки Amazon.com, Inc. или её аффилированных лиц. RowDeck не связан с Amazon и не одобрен этой компанией.

Руководства

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

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

Руководства и блог на английском.

Из блога

Все статьи

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

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

Free Pro 14,99 $ разово MySQL 8.0+ и MariaDB 10.5+ iOS 17+ iPhone