MySQL performance monitoring for Laravel, compared
There are two places to watch MySQL from. Laravel Pulse and Nightwatch watch from the application and see the queries it sends. MySQL's performance_schema watches from the server, counting index reads and lock waits for every client, and Releem, Percona PMM, Datadog and Sailfish all read it. What they do with those counters, and how long they keep them, is where they differ.
Where each one runs, and what it remembers
| Tool | Runs | Index usage | Kept |
|---|---|---|---|
| Sailfish | Inside your Laravel app, writing to your own database | Status and last read for every index, through restarts | Daily figures for good, finer detail for 90 days |
| Releem | An agent sending to Releem's cloud | A schema check for duplicate and unused indexes | Three months |
| Percona PMM | PMM Server, which you host, and a client per database | One panel of the five indexes with the most I/O wait | 30 days by default |
| Datadog | The Datadog Agent, sending to Datadog | Per-index usage, and an unused-index recommendation | 15 months of query metrics |
| MySQL's sys schema | Inside MySQL | Indexes with no recorded I/O | Since the last restart |
| Laravel Pulse | Inside your Laravel app | None; queries over a threshold, 1 s by default | 7 days |
Retention figures are each tool's default, and PMM's and Sailfish's are settings you can change. Releem's is the same on every public plan. The pages below give the detail and say where each figure comes from.
Head to head
Each of these does far more than Sailfish does, and the pages compare the part where they overlap. Each one says where the other tool is the better choice.
Hosted MySQL tuning advisor · From $39 a month per server, billed annually
Sailfish vs Releem: MySQL history or MySQL tuning
Releem is a hosted advisor that tunes MySQL and suggests indexes. Sailfish keeps performance_schema history in your own database and alerts when it changes.
Self-hosted database monitoring platform · Free and open source
Sailfish vs Percona PMM: index history or fleet monitoring
PMM is a free, self-hosted platform for monitoring fleets of database servers. Sailfish keeps the index and table history that PMM does not chart for MySQL.
The rest of the field
These get no page of their own. Two are free and come from MySQL and Laravel, and Nightwatch sees queries from the application's side only.
Views over performance_schema, built in · Free, part of MySQL
MySQL's sys schema
schema_unused_indexes lists the indexes with no recorded I/O, and schema_redundant_indexes gives the DROP INDEX for one that another index makes redundant. Two more views show the tables and the statements read without an index. MySQL Workbench's Performance Reports are built on these views. The sys schema is already installed and answers today's question well. The counters behind the unused and full-scan views start over at every restart, and the manual says the unused list only means something once the server has run a representative workload. Sailfish reads the same counters and keeps them.
Slow queries, from the application · Free, MIT
Laravel Pulse
Its Slow Queries card lists the queries your application ran that took longer than a threshold, 1,000 ms by default and settable per query, grouped by their SQL and the file and line that ran them. It listens to Laravel's own query events rather than reading performance_schema, so it sees only your application's queries and nothing about indexes or lock waits. Pulse keeps seven days, and its code treats that as a ceiling.
Every query in a sampled request or job, hosted · A free tier, then $20 to $300 a month by events
Laravel Nightwatch
Nightwatch records each query in a sampled request or job with its duration and the file and line it came from, and lists them grouped by connection and SQL with average and p95 times. Like Pulse it instruments the application and does not read performance_schema. History runs from 14 to 90 days depending on the plan.
We checked every claim here against each project's own documentation or source in November 2026. If one of them has changed since, email tech@boring-observability.dev and we will correct the page.
Common questions
How do I monitor MySQL performance in a Laravel app?
Decide which side you need to see. Laravel Pulse and Nightwatch watch from the application: Pulse lists queries over a threshold, and Nightwatch records every query in a sampled request. MySQL's performance_schema watches from the server, counting index reads and lock waits for every client, and Percona PMM, Releem, Datadog and Sailfish all read it. Sailfish keeps its history inside your Laravel app and your own database.
How do I find unused indexes in MySQL?
MySQL's sys.schema_unused_indexes view lists indexes with no recorded I/O, but only since the server last started, so just after a restart it lists almost every index. To be sure, you need that history kept across restarts. Releem has a schema check for them and Datadog flags them in its recommendations. Sailfish keeps each index's last read through restarts and reports one that saw no read in 30 days. Percona PMM has no unused-index check for MySQL.
Is there a free way to monitor MySQL?
Yes. Percona PMM is free and open source, though you host its server. MySQL's sys schema is built in, and MySQL Workbench's Performance Reports are a view of it. Laravel Pulse is free and shows slow queries from the application. None of the free options keeps per-index history across restarts and alerts on it, which is the part Sailfish charges for.
Do these tools conflict with each other?
No. Releem, PMM, Datadog and Sailfish read performance_schema, which any number of clients can read at once, and Pulse and Nightwatch listen inside the application. The cost of running several is each one's collection queries. If anything truncates a performance_schema summary table, Sailfish takes a new baseline rather than recording a drop.