MySQL monitor for iPhone

RowDeck is the on-call screen for MySQL and MariaDB on your iPhone: one verdict, ten health tiles and a screen behind each tile, with a data browser and SQL console for the questions the tiles don't answer.

Coming soon to the App Store Email me when it's out

Free Pro $14.99 once MySQL 8.0+ and MariaDB 10.5+ iOS 17+ iPhone

RowDeck Health screen for prod-shop, MySQL 8.4.6 source, marked Critical: Blocked 8 waiting with the deepest chain at 3, connections 112 of 151, longest query 09:12, 1,840 qps, buffer pool hit 99.2%, purge lag 1.2M, auto-increment at 87% on order_items.id, 3 deadlocks in 10 minutes, 2 replicas and 412 GB of data and indexes

The page arrives, the laptop is at home

Your phone buzzes at 3 a.m.: checkout latency is up, or the logs say Too many connections. Before you decide whether to get up, you want to know two things. Is the server overloaded or blocked, and where? RowDeck connects from your iPhone to MySQL or MariaDB, opens on Health and puts the answer on one screen.

The triage you would type

On a laptop, the first minute looks like this:

SHOW GLOBAL STATUS WHERE Variable_name IN ('Threads_connected', 'Threads_running');
SELECT @@max_connections;

SELECT ID, USER, TIME, STATE, LEFT(INFO, 60) AS query
FROM information_schema.PROCESSLIST
WHERE COMMAND = 'Query'
ORDER BY TIME DESC LIMIT 5;

SELECT COUNT(*) AS waiting
FROM information_schema.INNODB_TRX
WHERE trx_state = 'LOCK WAIT';

SHOW ENGINE INNODB STATUS;  -- history list length, latest deadlock
SHOW REPLICA STATUS;        -- MySQL 8.0.22+, MariaDB 10.5.1+; SHOW SLAVE STATUS on older

Typed on a phone through a VPN, that takes five minutes and a few typos. RowDeck runs the same kind of reads, adds the joins across performance_schema and information_schema, and grades the results for you.

One verdict, ten tiles

Health shows Healthy, Warning, Critical or Unknown for the server and ten tiles under it. It reads the server every 10 seconds while it is on screen. The tiles change color at these thresholds:

Tile Shows Amber Red
Connections threads against max_connections, running and in a transaction 70%, or 5 in a transaction 90%
Blocked threads waiting on a lock, deepest chain 1 waiting 3 waiting, a chain 3 deep, or a queue behind a waiting ALTER
Longest query the oldest running statement 60 s 5 min
Throughput queries per second and share of rollbacks 5% rollbacks none
Buffer pool hit ratio below 99% below 95%
Purge lag history list length, oldest transaction 100,000 or 60 s 1,000,000 or 10 min
Auto-increment the fullest AUTO_INCREMENT column 75% 90%
Deadlocks deadlocks in the last 10 minutes 1 10
Replication replicas on a source, lag on a replica 30 s 5 min, or a stopped SQL thread
Disk size of data and indexes none none

A red tile pulls the verdict to Critical. If the server hides a metric from your account, the tile shows the reason, never a zero.

A screen behind each tile

  • Activity, behind Connections and Longest query: the processlist with filters for running, in transaction, over 10 seconds and waiting. See the processlist on iPhone.
  • Locks, behind Blocked: row locks and metadata locks in one tree, the root blocker on top, and the kill that frees it. See blocking queries, Waiting for table metadata lock and killing a query.
  • Purge & Bloat, behind Purge lag and Auto-increment: AUTO_INCREMENT headroom, history list length, fragmented tables and unused indexes.
  • Replication: IO and SQL threads, lag and the error that stopped a channel. See replication lag.
  • Slow queries, behind Throughput: statement digests from performance_schema, by total time, average time, calls or rows examined.
  • Storage, behind Disk: the largest schemas, tables and indexes.

Activity and Locks refresh every 5 seconds while open. Two more tabs cover the client side. Data browses tables with filters that run on the server, follows foreign keys, copies a page as CSV or JSON and exports it as a CSV file. The SQL console labels each statement Read, Write, DDL or Destructive before it runs.

RowDeck connects from the phone to your server, with no RowDeck server in between, or through an SSH tunnel to your bastion with up to two jump hosts. New connections use TLS REQUIRED, and RowDeck pins the certificate’s SHA-256 fingerprint on first connect. Passwords and keys stay in the iOS Keychain, and Face ID locks the app.

Free and Pro

Free gives you each monitoring screen for one saved connection, TLS and SSH, the data browser with its exports, and read-only SQL. RowDeck Pro is a one-time purchase with no subscription. It adds unlimited connections, KILL QUERY and KILL CONNECTION (the root of a chain and a waiting ALTER included), ANALYZE TABLE and OPTIMIZE TABLE, writes, DDL and row edits, and an AI assistant on your own model. Each write passes four checks in order: Pro, the connection’s Read-only switch, the statement classifier and your confirmation. Tap Explore demo data to try every Pro action on sample data, no server needed.

Before the next page

RowDeck supports MySQL 8.0 and later, MariaDB 10.5 and later, Percona Server for MySQL, Amazon RDS and Aurora MySQL. Give it an account that can read what the screens show:

-- MySQL
GRANT PROCESS, REPLICATION CLIENT, REFERENCES ON *.* TO 'oncall'@'%';
GRANT SELECT ON performance_schema.* TO 'oncall'@'%';
GRANT SELECT ON mysql.innodb_index_stats TO 'oncall'@'%';

-- MariaDB
GRANT PROCESS, SLAVE MONITOR, BINLOG MONITOR, REFERENCES ON *.* TO 'oncall'@'%';
GRANT SELECT ON performance_schema.* TO 'oncall'@'%';
GRANT SELECT ON mysql.innodb_index_stats TO 'oncall'@'%';

These grants read status and metadata and write nothing. For Pro kills, add CONNECTION_ADMIN on MySQL or CONNECTION ADMIN on MariaDB.

RowDeck works while it is open. It doesn’t monitor in the background or send push alerts, so keep your alerting in Grafana, Datadog or PagerDuty and open RowDeck when they page you. We built it for iPhone in portrait, and it has no iPad layout.

Amazon Web Services, AWS, Amazon RDS and Amazon Aurora are trademarks of Amazon.com, Inc. or its affiliates. Datadog, Grafana and PagerDuty are trademarks of their respective owners. RowDeck is not affiliated with or endorsed by any of them.