MATIH Platform is in active MVP development. Documentation reflects current implementation status.
9. Query Engine & SQL
Query Execution
Query Statistics

Query Statistics

The Query Engine provides aggregate statistics about query execution patterns, success rates, and performance characteristics. These statistics power dashboards, alerts, and capacity planning decisions.


Endpoint

GET /v1/queries/stats

Required Headers

HeaderTypeDescription
X-Tenant-IDUUIDThe tenant identifier
AuthorizationStringBearer JWT token

Query Parameters

ParameterTypeDefaultDescription
daysint7Number of days to include in statistics

Implementation

@GetMapping("/stats")
public ResponseEntity<Map<String, Object>> getStats(
        @RequestHeader("X-Tenant-ID") UUID tenantId,
        @RequestParam(defaultValue = "7") int days) {
 
    Map<String, Object> stats = historyService.getQueryStats(tenantId, days);
    return ResponseEntity.ok(stats);
}

curl Example

# Get query statistics for the last 30 days
curl -s "http://query-engine:8080/v1/queries/stats?days=30" \
  -H "X-Tenant-ID: 550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer $JWT_TOKEN"

Response

{
  "totalQueries": 12450,
  "completedQueries": 11980,
  "failedQueries": 320,
  "cancelledQueries": 150,
  "successRate": 0.962,
  "averageExecutionTimeMs": 2340,
  "medianExecutionTimeMs": 890,
  "p95ExecutionTimeMs": 8500,
  "p99ExecutionTimeMs": 24000,
  "totalBytesScanned": 1099511627776,
  "cacheHitRate": 0.34,
  "engineDistribution": {
    "TRINO": 8200,
    "CLICKHOUSE": 3800,
    "SPARK_ASYNC": 450
  },
  "statusDistribution": {
    "COMPLETED": 11980,
    "FAILED": 320,
    "CANCELLED": 150,
    "TIMEOUT": 0
  },
  "periodStart": "2026-01-13T00:00:00Z",
  "periodEnd": "2026-02-12T23:59:59Z"
}

Per-Query Execution Statistics

Each QueryResponse includes detailed execution statistics in the statistics field:

{
  "statistics": {
    "cpuTimeMs": 1800,
    "wallTimeMs": 2450,
    "queuedTimeMs": 50,
    "analysisTimeMs": 120,
    "planningTimeMs": 280,
    "peakMemoryBytes": 134217728,
    "inputRows": 5000000,
    "inputBytes": 2147483648,
    "outputRows": 42,
    "outputBytes": 3360,
    "completedSplits": 16
  }
}

Statistics Fields

FieldDescription
cpuTimeMsTotal CPU time consumed across all workers
wallTimeMsWall-clock time from start to completion
queuedTimeMsTime spent waiting in the execution queue
analysisTimeMsTime spent parsing and analyzing the SQL
planningTimeMsTime spent generating the execution plan
peakMemoryBytesPeak memory usage during execution
inputRowsTotal rows read from source tables
inputBytesTotal bytes read from source tables
outputRowsRows in the final result set
outputBytesSize of the final result set
completedSplitsNumber of Trino splits processed

Micrometer Metrics

The Query Engine emits detailed Micrometer metrics for monitoring:

Execution Metrics

MetricTypeTagsDescription
query.execution.timeTimerengine, statusQuery execution duration
query.trino.executionTimer--Trino-specific execution time
query.cache.hitCountertenantCache hit count
query.cancelledCountertenantCancelled query count

Workload Metrics

MetricTypeTagsDescription
query.workload.submittedCounter--Total queries submitted
query.workload.admittedCounterpathQueries admitted (immediate/queued)
query.workload.rejectedCounterreasonQueries rejected
query.workload.completedCounter--Successfully completed queries
query.workload.failedCounter--Failed queries
query.workload.queue.depthGauge--Current queue depth
query.workload.executingGauge--Currently executing queries
query.workload.memory.utilizationGauge--Memory pool utilization

Cache Metrics

MetricTypeTagsDescription
query.cache.l1.evictionCountercauseL1 cache evictions
query.cache.l1.putCounter--L1 cache insertions
query.cache.l2.putCounter--L2 cache insertions
query.cache.l2.errorCounteroperationL2 cache errors
query.cache.lookupCounterlevel, statusCache lookup results
query.cache.lookup.timeTimerlevel, statusCache lookup latency
query.cache.invalidateCounter--Cache invalidation events

Prometheus Integration

These metrics are exposed via the Spring Actuator Prometheus endpoint:

# Access Prometheus metrics
curl http://query-engine:8080/actuator/prometheus | grep query_execution

Example output:

query_execution_time_seconds_count{engine="TRINO",status="success"} 8420.0
query_execution_time_seconds_sum{engine="TRINO",status="success"} 19782.45
query_execution_time_seconds_max{engine="TRINO",status="success"} 34.2
query_cache_hit_total{tenant="550e8400-e29b-41d4-a716-446655440000"} 4280.0