P95 Query Time

P95 Query Time

The 95th percentile database query duration — 95% of queries complete faster than this. Weighted by execution frequency across all queries. Slow queries are often caused by missing indexes or N+1 patterns.

34 ms

21.2%

Compared to previous 7 days

Execution Rate

Query Execution Rate

Total database queries executed over the last 14 days, expressed as an average rate. Spikes may indicate N+1 queries or inefficient data access patterns.

11.0 / day

11.0%

Compared to previous 7 days

Query Responses

Query Responses

This panel shows all executions of this query, including performance metrics, duration distribution, and query execution details.

Click marker to copy SHA
Time Period ▲ Executions Avg Duration Min Duration Max Duration
Sep 9, 2026 11 19.27 ms 2.0 ms 42.0 ms
Sep 10, 2026 11 22.36 ms 7.0 ms 36.0 ms
Sep 11, 2026 7 18.0 ms 8.0 ms 33.0 ms
Sep 12, 2026 11 25.09 ms 5.0 ms 50.0 ms
Sep 13, 2026 9 24.78 ms 2.0 ms 43.0 ms
Sep 14, 2026 16 20.88 ms 4.0 ms 38.0 ms
Sep 15, 2026 8 22.5 ms 10.0 ms 38.0 ms
Sep 16, 2026 9 23.33 ms 9.0 ms 33.0 ms
Sep 17, 2026 16 20.56 ms 1.0 ms 32.0 ms
Sep 18, 2026 7 19.14 ms 2.0 ms 33.0 ms
Total of 15 record(s).

Normalized Query

SELECT id, name, email FROM users WHERE id = ?

Diagnostics

Query Diagnostics

Automatically generated analysis for this query. Includes N+1 detection (from live request data), query characteristics, detected issues, optimization suggestions, and a database EXPLAIN plan. Click Re-analyze to regenerate.


Query Characteristics
Query Type
SELECT
Tables
1
Joins
0
Complexity Score
3
Has LIMIT
No
Has ORDER BY
No
Has GROUP BY
No
Has Subqueries
No

Optimization Suggestions
  • Add single_column index: add_index :users, :id — Fast lookups for id = value queries
    add_index :users, :id

Execution Plan
2 | 0 | 33 | SEARCH users USING INTEGER PRIMARY KEY (rowid=?)

Query Locations

Query Locations

Shows where in your codebase this query originates, based on the last 30 days of executions. P95 duration and row count highlight the worst-case performance at each call site.

Location P95 Duration (ms) P95 Row Count Count
app/models/user.rb:15 32.0 131
app/jobs/cache_warming_job.rb:90 38.0 1
app/jobs/webhook_delivery_job.rb:59 35.0 1
app/jobs/import_job.rb:17 14.0 1
app/jobs/data_export_job.rb:95 38.0 1
app/jobs/cache_warming_job.rb:76 17.0 1
app/jobs/cache_warming_job.rb:62 24.0 1
app/jobs/webhook_delivery_job.rb:109 28.0 1
app/jobs/image_processing_job.rb:111 36.0 1
app/jobs/webhook_delivery_job.rb:103 43.0 1
app/jobs/image_processing_job.rb:15 27.0 1
app/jobs/cache_warming_job.rb:52 26.0 1
app/jobs/cache_warming_job.rb:18 50.0 1
app/jobs/notification_job.rb:110 28.0 1
app/jobs/report_generator_job.rb:82 46.0 1
app/jobs/notification_job.rb:35 18.0 1
app/jobs/cache_warming_job.rb:105 45.0 1
app/jobs/cache_warming_job.rb:25 33.0 1
app/jobs/cache_warming_job.rb:85 42.0 2
app/jobs/webhook_delivery_job.rb:16 20.0 1
app/jobs/webhook_delivery_job.rb:34 36.0 1
app/jobs/webhook_delivery_job.rb:18 38.0 1
app/jobs/analytics_job.rb:31 24.0 1

Raw Data

{
  "query": {
    "id": 70,
    "normalized_sql": "SELECT id, name, email FROM users WHERE id = ?",
    "analyzed_at": "2026-09-23 06:02:25 UTC"
  },
  "performance": {
    "total_executions": 154,
    "p95_duration_ms": "38.0",
    "avg_duration_ms": 20.4675,
    "p95_row_count": null,
    "avg_row_count": null
  },
  "characteristics": {
    "query_type": "SELECT",
    "table_count": 1,
    "join_count": 0,
    "where_clause_complexity": 1,
    "has_subqueries": false,
    "has_limit": false,
    "has_order_by": false,
    "has_group_by": false,
    "has_having": false,
    "has_distinct": false,
    "has_aggregations": false,
    "estimated_complexity": 3
  },
  "call_locations": [
    {
      "location": "app/models/user.rb:15",
      "count": 131,
      "p95_duration_ms": "32.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:85",
      "count": 2,
      "p95_duration_ms": "42.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/analytics_job.rb:31",
      "count": 1,
      "p95_duration_ms": "24.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/webhook_delivery_job.rb:18",
      "count": 1,
      "p95_duration_ms": "38.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/webhook_delivery_job.rb:34",
      "count": 1,
      "p95_duration_ms": "36.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/webhook_delivery_job.rb:16",
      "count": 1,
      "p95_duration_ms": "20.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:25",
      "count": 1,
      "p95_duration_ms": "33.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:105",
      "count": 1,
      "p95_duration_ms": "45.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/notification_job.rb:35",
      "count": 1,
      "p95_duration_ms": "18.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/report_generator_job.rb:82",
      "count": 1,
      "p95_duration_ms": "46.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/notification_job.rb:110",
      "count": 1,
      "p95_duration_ms": "28.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:18",
      "count": 1,
      "p95_duration_ms": "50.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:52",
      "count": 1,
      "p95_duration_ms": "26.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/image_processing_job.rb:15",
      "count": 1,
      "p95_duration_ms": "27.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/webhook_delivery_job.rb:103",
      "count": 1,
      "p95_duration_ms": "43.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/image_processing_job.rb:111",
      "count": 1,
      "p95_duration_ms": "36.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/webhook_delivery_job.rb:109",
      "count": 1,
      "p95_duration_ms": "28.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:62",
      "count": 1,
      "p95_duration_ms": "24.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:76",
      "count": 1,
      "p95_duration_ms": "17.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/data_export_job.rb:95",
      "count": 1,
      "p95_duration_ms": "38.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/import_job.rb:17",
      "count": 1,
      "p95_duration_ms": "14.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/webhook_delivery_job.rb:59",
      "count": 1,
      "p95_duration_ms": "35.0",
      "p95_row_count": null
    },
    {
      "location": "app/jobs/cache_warming_job.rb:90",
      "count": 1,
      "p95_duration_ms": "38.0",
      "p95_row_count": null
    }
  ],
  "n_plus_one": {
    "detected": false
  },
  "index_recommendations": [
    "add_index :users, :id",
    "add_index :users, [\"id\", \"name\", \"email\"], name: 'covering_idx_users_id'"
  ],
  "issues": [],
  "explain_plan": "2 | 0 | 33 | SEARCH users USING INTEGER PRIMARY KEY (rowid=?)"
}