docs/plans/benchmark-improvements/004-review-interpreter-benchmarks.md
Review the interpreter benchmarks in packages/client-engine-runtime/bench/interpreter.bench.ts to ensure they accurately measure the performance overhead of the query interpreter and data mapper components in isolation from database I/O.
The interpreter benchmark suite includes:
MockDriverAdapter) that returns pre-defined resultsReview MockDriverAdapter implementation:
| Aspect | Current State | Review Items |
|---|---|---|
| Provider | sqlite | Consider testing other providers |
| Result format | Basic column/row structure | Verify matches real adapter output |
| Transaction mock | Minimal implementation | Ensure representative overhead |
| Error handling | Not tested | Add error path benchmarks? |
Questions to address:
Review query plan definitions:
| Plan | Description | Review Items |
|---|---|---|
SIMPLE_SELECT_PLAN | Basic SELECT query | ✅ Good baseline |
FIND_UNIQUE_PLAN | Single record lookup | Check arg types match runtime |
JOIN_PLAN | 1:N relationship join | Verify join structure |
SEQUENCE_PLAN | Multi-step query | Add more sequence variations |
DEEP_JOIN_PLAN | Nested joins (3 levels) | Good for complex queries |
Missing query plans to consider:
Current data mapper coverage:
| Benchmark | Rows | Nesting | Review |
|---|---|---|---|
dataMapper: 10 rows | 10 | Flat | Baseline |
dataMapper: 50 rows | 50 | Flat | Medium |
dataMapper: 100 rows | 100 | Flat | Large |
dataMapper: nested 5x3 | 5 users × 3 posts | 2 levels | Small nested |
dataMapper: nested 10x5 | 10 users × 5 posts | 2 levels | Medium nested |
dataMapper: nested 20x10 | 20 users × 10 posts | 2 levels | Large nested |
Missing scenarios:
Current serializer coverage:
| Benchmark | Rows | Columns | Review |
|---|---|---|---|
serializer: 10 rows x 3 cols | 10 | 3 | Minimal |
serializer: 50 rows x 8 cols | 50 | 8 | Medium |
serializer: 100 rows x 8 cols | 100 | 8 | Large |
Consider adding:
Verify measurements are isolated:
Verify query plan accuracy:
args, argTypes, and structure fields are accurateAdd write operation benchmarks:
Add aggregate benchmarks:
Expand data type coverage:
Add edge case benchmarks:
Provider-specific benchmarks:
Memory benchmarks:
After refinements:
# Run interpreter benchmarks
pnpm bench interpreter
# Verify no regressions
pnpm bench
# Profile for accuracy
node --cpu-prof -r esbuild-register packages/client-engine-runtime/bench/interpreter.bench.ts
After review and refinements:
Consider refactoring the benchmark file: