Free tool · no signup · runs in your browser
Which queries are eating your database?
Paste a MySQL, MariaDB or PostgreSQL slow query log. Get the query shapes ranked by total time, how often each runs, rows examined against rows returned, lock waits, and the fix for each. Nothing is uploaded.
Connect a server to watch this all the time
This is one window of one log. The Opservo agent reads the slow log on every server continuously, with literals stripped before anything leaves the box, and shows the top shapes next to the buffer-pool hit rate, temp tables on disk, index-less joins and the queries running right now, each with the runnable fix. PostgreSQL and Redis too. Free for 2 servers.
Questions
How do I turn on the MySQL slow query log?+
At runtime: SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1; SET GLOBAL log_queries_not_using_indexes = ON; then SHOW VARIABLES LIKE 'slow_query_log_file' tells you where it is written. Put the same three settings under [mysqld] in my.cnf to keep them across restarts. One second is a good starting threshold; lower it once the obvious queries are fixed.
Where is the slow log on a typical server?+
Usually /var/log/mysql/mysql-slow.log on Debian and Ubuntu, or /var/lib/mysql/<hostname>-slow.log on RHEL-style systems; SHOW VARIABLES LIKE 'slow_query_log_file' gives the exact path. Paste the last part of the file, up to 4 MB.
Does this work with PostgreSQL?+
Yes, for lines produced by log_min_duration_statement (for example "duration: 2345.678 ms statement: SELECT …"). Set log_min_duration_statement = 1000 in postgresql.conf and reload. Rows examined are not in that format; for them, enable the pg_stat_statements extension.
What does "rows examined vs sent" tell me?+
Rows examined is how many rows the server read to answer the query; rows sent is how many it returned. Reading a million rows to return twenty is the signature of a missing index on the WHERE or JOIN column. EXPLAIN the query: a type of ALL, or a large "rows" estimate, confirms it.
Is my data safe here?+
The log is parsed in your browser and never uploaded. Query literals (emails, ids, tokens) are replaced with ? before anything is shown, the same rule the Opservo agent applies before a query shape leaves a server.
How is this different from mysqldumpslow or pt-query-digest?+
Those are the right tools on a server and this page does the same grouping, by query shape, biggest total time first, without installing anything. Opservo goes further on your servers: it reads the slow log every minute, keeps the history per shape, and shows it beside the buffer-pool hit rate, temp tables on disk and the queries running right now.