orbit-db-profilelisted
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