Performance Benchmarks

June 4, 2026 · View on GitHub

Numbers measured on Apple M-series, SQLite, Python 3.12, pytest-mrt 0.7.0.
Run yourself: python benchmarks/run_benchmarks.py


Static analysis (mrt check)

No database required. Parses migration files with Python AST.

MigrationsMeanNotes
1022 msTypical microservice
2554 msMedium Django app
50108 msLarge monolith
100216 msVery large legacy codebase

~2.2 ms per migration file. Safe to run on every commit.


Dynamic verification (mrt fixture)

Requires a real database. Seeds rows, runs upgrade → downgrade, verifies data survival.

MigrationsTotalPer migration
100.33 s33 ms
251.38 s55 ms
504.29 s86 ms
10015.6 s156 ms

SQLite is fastest. PostgreSQL and MySQL add ~20–40 ms per migration due to network round-trips.


Push → static check (< 1s always) → gate on errors
PR   → dynamic check (parallel, only on migration file changes)

For most projects (< 50 migrations), the full dynamic suite runs in under 5 seconds.