dbtempo ranks the slow queries in your MySQL, MariaDB, PostgreSQL or MongoDB database and proves the cause from the EXPLAIN plan and your code. Then it applies a fix you can roll back, or opens a draft pull request.
Scans run on each project’s schedule. Queries are ranked by the time they cost, not by how they look.
dbtempo reads the EXPLAIN plan, states the cause and the evidence, and shows its confidence.
Connect a repository through the GitHub App, or a source path on a host, and dbtempo matches the query to the SQL in your code, so a recommendation names the file that sends it.
A database change you apply is stored with the SQL that reverses it. A code change opens as a draft pull request for your team to review and merge.
Each project sets every kind of change to one of three levels. The kinds are:
A change at this level waits in the Awaiting approval queue and notifies you. Nothing runs until someone approves it.
Each database has an audit trail of every write attempted, including the ones a guardrail blocked, with the SQL that ran and the SQL that reverses it. Plans that include audit export can download the trail as CSV.
Every applied change keeps the SQL that reverses it, shown with the fix and on the audit trail, ready to run if you need to undo it. Index removals are staged and reversible, and never happen in one step.
Most query tools see only SQL, so the most they can suggest is a change in the database. dbtempo also reads the code that sends the query, so the fix can be a change to your application, reviewed like any other pull request.
Connect Claude, ChatGPT, Cursor or Claude Code to dbtempo over MCP (Model Context Protocol). Your assistant can read open recommendations, incidents and lock waits, and send dbtempo a slow query to analyze. It cannot apply a change.
Connect an assistantThe index advisor looks at a whole table’s workload and proposes one coherent index set, including indexes you can retire.
Each scan also reads the server’s configuration and health, and says when a condition clears as well as when it starts.
Turn on Record lock waits and Record long transactions for a database, and dbtempo groups what it saw into incidents. Each incident shows the session holding the lock, the statements waiting behind it and how long they waited. Alerts go to the in-app notification bell, email and, if you connect it, Slack.
Which statement blocked which, and on which table.
Transactions that stayed open, and the application that opened them.
Connection pressure, and whether your declared pool sizes fit under the server’s connection limit.
Deadlocks, reported with the statements involved.
Every incident says what dbtempo was recording at the time and what it was not. Short waits can be missed, and data can lag. Nothing is changed for you: stopping a session is advice you run yourself.
How incidents workPaste a query, an EXPLAIN plan or a slow query log. Nothing to install.
Connect a database directly, over SSH, or through the dbtempo agent, and set how often it is scanned.
Install the GitHub App on the repositories you choose.
Apply a recommendation, open a draft PR, or let Apply automatically handle the kinds of change you allowed.
With the agent, every database connection is made from your side; dbtempo’s servers never connect to the database. Linux:
curl -fsSL https://dbtempo.com/install.sh | sudo bashMySQL, MariaDB, PostgreSQL and self-hosted MongoDB 4.4 to 9.0, for both pasted analysis and live collection. SQLite is supported for pasted analysis only.
Paste mode analyzes the SQL or database artifact you submit. Live collection submits query statistics, example query text, schema metadata and execution plans, not table rows. Collection payloads are deleted after 30 days.
No. Paste mode needs nothing installed, and direct or SSH connections are made from dbtempo’s side. The dbtempo agent is optional: choose it when dbtempo’s servers must not connect to your database, because the agent inside your network makes every connection.
For a direct or SSH connection, the password and any SSH key are sealed with a key only the collection worker can open (an X25519 key agreement and AES-256-GCM). The web application that stores them cannot read them back. With the agent, the credentials sit in the agent’s local config file on your machine and the agent makes every connection.
Only through capabilities you turn on. Each project sets every kind of change to Off, Ask me first or Apply automatically. An allowed change still has to pass the safety gates and, if you set one, the maintenance window. Every attempt, including the ones a guardrail blocked, is recorded on the database’s audit trail.
A pull request GitHub marks as not ready to merge. dbtempo opens code fixes as drafts through its GitHub App, so a person on your team reviews and merges them. Opening PRs needs a plan that includes draft PR creation.
Yes. Every database change dbtempo applies is stored with the SQL that reverses it. You see that SQL on the finding and on the database’s audit trail, ready to run against your database. Index removals are staged and reversible, and never happen in one step.
One row per write attempted on a database: what triggered it (Apply automatically, a manual apply, a readiness fix or a rollback), the SQL, its rollback SQL, the outcome, and the guardrail’s reason when one blocked it. Plans that include audit export can download the trail as CSV.
Both. dbtempo ranks slow queries, and its index advisor looks at a whole table’s workload and proposes one index set, including indexes you can retire. Each scan also checks server configuration and maintenance health.
Yes. Paste mode and EXPLAIN analysis work on their own. Connecting a repository adds the location of the query in your code and lets dbtempo open code fixes as draft pull requests.
The written analysis that explains a finding and writes its fix. The product shows usage as a percentage of the allowance.
Cancel from Settings, Billing. Paid features normally stay on until the end of the period you already paid for, then the account moves to the Free plan. Refunds are not issued for partial months, except where the law requires them.