← ClaudeAtlas

orbit-db-profilelisted

Database query profiling for a WordPress plugin — query count per page, slow queries (>100ms), N+1 detection, autoload bloat (`wp_options` autoload size), transient explosion, missing indexes, and cron-induced churn. Uses Query Monitor + MySQL `performance_schema` against a wp-env site. Use when the user says "DB profile", "query count", "N+1", "slow query", "autoload bloat", "Query Monitor", or after any feature that adds DB writes/reads.
adityaarsharma/orbit · ★ 1 · Data & Documents · score 55
Install: claude install-skill adityaarsharma/orbit
# 🪐 orbit-db-profile — Query profiling The DB layer most plugins ignore. 67 queries on the homepage isn't unusual — it's just preventable. --- ## Quick start ```bash # Default — profiles the homepage on wp-env port 8881 bash ~/Claude/orbit/scripts/db-profile.sh # Custom URL list WP_TEST_URL="http://localhost:8881" \ TEST_PAGES="/,/sample-page/,/wp-admin/admin.php?page=my-plugin" \ bash scripts/db-profile.sh ``` Or via gauntlet (Step 8): ```bash bash scripts/gauntlet.sh --plugin . --mode full ``` Output: `reports/db-profile-<timestamp>.txt`. --- ## What it measures | Metric | Target | Bad | |---|---|---| | Queries per frontend page | < 30 | > 60 | | Queries per admin page | < 50 | > 100 | | Slow queries (>100ms) | 0 | any | | Slowest single query | < 50ms | > 200ms | | Autoload size (wp_options) | < 1MB | > 4MB | | N+1 patterns | 0 | any | | Cron tasks running on every request | 0 | > 0 | | Transients written per request | < 5 | > 20 | Each is a release-blocker if exceeded. --- ## How it works 1. Activate Query Monitor in wp-env 2. Visit each URL via headless Chrome (Playwright) 3. Read the QM panel output via WP-CLI 4. Parse + rank queries 5. Cross-reference against `performance_schema.events_statements_summary_by_digest` for slow-query stats --- ## Common findings + fixes ### N+1 queries ```php // BAD — 1 query for posts, then 1 query per post for meta $posts = get_posts(['post_type' => 'product']); foreach ($posts as $p) { $price = get_post_meta($p->ID