Skip to content

docs: re-measure published benchmarks at v1.17.0 - #933

Merged
ajitpratap0 merged 2 commits into
mainfrom
docs/v1.17.0-benchmark-refresh
Nov 3, 2026
Merged

ajitpratap0 merged 2 commits into
mainfrom
docs/v1.17.0-benchmark-refresh

Conversation

@ajitpratap0

Copy link
Copy Markdown
Owner

Summary

Main's weekly Claims Drift and Signals check failed on 2026-11-02. The two published measurements were taken on 2026-10-22, before the v1.17.0 tag (2026-10-31):

  • scripts/gen-readme-metrics/metrics.json
  • benchmarks/compare/results/latest.json

Both are now re-measured at the v1.17.0 tag, so README, llms.txt and the website describe the released version, not unreleased work on main.

Parse stage. Apple M4, BenchmarkPerformanceBaseline, median of 20 runs. Each round ran the v1.16.0 binary and then the v1.17.0 binary, so ambient load affects both equally:

query v1.16.0 (published 10-22) v1.16.0 (this run) v1.17.0 Δ
SELECT 349 345 363 +5.2%
INSERT 406 400 433 +8.1%
CTE 644 634 683 +7.8%
window 631 631 648 +2.8%
complex 1234 1230 1296 +5.4%
  • v1.16.0 reproduces its published figures within 1–2%, which validates the method.
  • v1.17.0 parses 5.8% slower than v1.16.0 (geomean). The likely cause is the dialect-audit additions.
  • For context, current main is already 21% faster than v1.17.0 on the same benchmark, before perf(tokenizer): build tokens in place instead of copying them by value [W2-10] #926 merged. That gain reaches these numbers with the next release.
  • An earlier non-interleaved attempt under load 9–13 gave bimodal window and CTE results. It was discarded.

Competitor harness. Data from bench-compare run 41533021592, dispatched on the v1.17.0 tag (commit 3655a37, EPYC 7763, Go 1.26.9). The tag push never triggered this run. The file was copied to both benchmarks/compare/results/ and website/src/data/competitor-benchmarks.json. GoSQLX/peer e2e geomean:

peer GoSQLX/peer
Vitess 1.10
TiDB 0.60
xwb1989 0.26
pg_query_go 0.16

Test Plan

  • go run ./scripts/gen-readme-metrics --check: ok. README was regenerated with the generator.
  • go run ./scripts/gen-readme-metrics --claims --about "<repo About>": ok. This is the exact step that failed.
  • Website: npm run typecheck ok, npm test 45/45, eslint clean on src/data.

Breaking Changes

None (published data only).

🤖 Generated with Claude Code

https://claude.ai/code/session_01DnbRnTFErhoMJdAjVEeCg2

The weekly claims-drift check on main failed because metrics.json and
benchmarks/compare/results/latest.json were measured on 2026-10-22, before
the v1.17.0 tag. Both are re-measured at the tag so the published numbers
describe the released version.

- Parse stage (Apple M4, BenchmarkPerformanceBaseline, median of 20 runs,
  interleaved with v1.16.0 so ambient load hits both equally):
  SELECT 363 ns, INSERT 433, CTE 683, window 648, complex 1296. v1.16.0
  reproduces its published figures within 1-2% in the same run (345, 400,
  634, 631, 1230), so v1.17.0 is 2.8-8.1% slower (geomean +5.8%).
- Competitor harness: bench-compare run 41533021592 on the v1.17.0 tag
  (EPYC 7763, Go 1.26.9). GoSQLX/Vitess geomean 1.10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DnbRnTFErhoMJdAjVEeCg2
@vercel

vercel Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
gosqlx-website Ready Ready Preview Nov 3, 2026 5:29am UTC

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Claude finished @ajitpratap0's task in 28s —— View job


Review of PR #933: re-measure published benchmarks at v1.17.0

  • Read the diff
  • Cross-checked the numbers across files

Summary: This is a data-only change, and I found no blocking issues. I read the diff. I did not re-run the benchmarks or the generator, so the Test Plan results come from the PR description.

What I checked

  • Parse-stage figures match across files. The values 363 / 433 / 683 / 648 / 1296 ns agree in metrics.json, performance_baselines.json, website/src/data/metrics.ts, README.md and llms.txt.
  • Derived rates are right. 1e9 / 363 ≈ 2.755M, which gives "~2.8M" in the README and "~2.75M" in llms.txt.
  • Dates are consistent. Every measured_at, updated and "re-measured" string reads 2026-11-02.
  • The competitor data is one file in two places. benchmarks/compare/results/latest.json and website/src/data/competitor-benchmarks.json are byte-identical (cmp reports the same).
  • The CI ceilings are unaffected. The ns_per_op ceilings are unchanged. The largest new figure, 1296 ns, is well under its 2900 ns ceiling.
  • The method is sound. The interleaved v1.16.0 / v1.17.0 runs, with v1.16.0 reproducing its published figures within 1–2%, support the numbers. The PR also states the 5.8% regression openly.

Minor, non-blocking notes

  1. The note fields in performance_baselines.json say -count=10, but the published figures are medians of 20 runs. This text was already there, but you could fix it while you're in the file.
  2. The CI range text ("last 9 Tests runs on main, 0715bb9..61ca6c8") is left as it was. That is fine, since it describes CI and not the M4 run.
  3. The PR shows v1.17.0 is about 5.8% slower than v1.16.0 on the parse stage. Consider adding a CHANGELOG line, or an issue, so the regression is tracked. The speedup already on main (perf(tokenizer): build tokens in place instead of copying them by value [W2-10] #926 and the other perf PRs) would then be the stated follow-up.
  4. latest.txt has 532 changed lines (+532/−532, the same size as latest.json's churn). It is raw benchmark output, so I did not review it line by line.

Verdict: Looks good to merge once CI, in particular the Claims Drift check, passes.

@github-actions github-actions Bot added documentation Improvements or additions to documentation performance labels Nov 2, 2026
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Perf gate: PASS (shadow mode: report only, this check never fails)

Base 36482b496904, head 363908c05be6. 10 interleaved rounds, benchtime 200ms, -cpu 1, pinned to CPU 3 (SMT siblings 2-3) with taskset.

  • no gated metric moved past its threshold

Rules: time regresses at >= +3% with p < 0.01 (Mann-Whitney U), or a suite geomean >= +1.5% (per-round geomeans, same test); allocs/op must not increase; B/op must not rise more than 2%; instructions/op must not rise more than 1.5%. An A/A control with more than 10% of benchmarks moving over 3% is noisy: re-run once, then inconclusive (neutral).

Gated suite (GOGC=off, GOMAXPROCS=1)

benchmark time p A/A B/op allocs/op status
ParseE2E/simple_select -2.04% 0.001 -1.15% +0.00% 5 → 5 ok
ParseE2E/select_where -0.14% 0.684 +0.00% +0.00% 18 → 18 ok
ParseE2E/join -0.06% 0.705 +0.81% +0.00% 17 → 17 ok
ParseE2E/aggregate -0.31% 0.325 -1.24% +0.00% 18 → 18 ok
ParseE2E/subquery -0.68% 0.520 +0.80% +0.00% 14 → 14 ok
ParseE2E/cte +1.57% 0.481 +1.81% +0.00% 21 → 21 ok
ParseE2E/window +0.68% 0.970 +0.21% +0.00% 11 → 11 ok
ParseE2E/complex +2.53% 0.186 +1.04% +0.00% 49 → 49 ok
ParseE2E/insert +0.31% 0.940 +1.13% +0.00% 17 → 17 ok
ParseE2E/update +0.98% 0.579 +0.59% +0.00% 13 → 13 ok
ParseE2E/delete +0.72% 0.190 +0.19% +0.00% 5 → 5 ok
ParseRW/postgresql/medium +1.25% 0.089 +0.99% +0.00% 644 → 644 ok
ParseRW/mysql/medium +0.32% 0.650 -0.53% +0.00% 365 → 365 ok
ParseRW/mariadb/medium +0.88% 0.579 -0.56% +0.00% 521 → 521 ok
ParseRW/sqlserver/medium +0.05% 0.481 -1.11% +0.00% 926 → 926 ok
ParseRW/oracle/medium -0.24% 0.353 -0.48% -0.00% 1089 → 1089 ok
ParseRW/sqlite/medium -0.48% 0.353 -1.01% +0.00% 345 → 345 ok
ParseRW/snowflake/medium -1.11% 1.000 -0.54% +0.00% 774 → 774 ok
ParseRW/clickhouse/medium -0.27% 0.853 -0.61% +0.00% 383 → 383 ok
ParseFresh/simple_select -1.04% 0.820 -2.30% +0.00% 6 → 6 ok
ParseFresh/join +0.62% 0.384 -0.12% +0.00% 18 → 18 ok
ParseFresh/complex +0.76% 0.529 +0.75% +0.00% 50 → 50 ok
PoolGetPut/serial +0.83% 0.631 +1.65% +0.00% 0 → 0 ok
Tokenize/scratch/join +0.53% 0.545 +0.68% +0.00% 0 → 0 ok
Tokenize/scratch/complex -0.35% 0.910 -1.00% +0.00% 0 → 0 ok
Tokenize/scratch/insert +1.11% 0.218 +0.35% +0.00% 0 → 0 ok
Normalize/simple_select -1.71% 0.031 +1.60% +0.00% 7 → 7 ok
Normalize/join -1.37% 0.307 -0.52% +0.00% 23 → 23 ok
Normalize/complex +0.96% 0.684 +0.56% +0.00% 68 → 68 ok
TransformParse/simple_select +0.05% 1.000 -0.63% +0.00% 5 → 5 ok
TransformParse/join -0.08% 0.631 -0.59% +0.00% 17 → 17 ok
TransformParse/complex -0.02% 1.000 +1.02% +0.00% 49 → 49 ok
LintRW/postgresql +0.01% 0.853 +0.23% +0.00% 36478 → 36478 ok
LintRW/mysql -0.34% 0.579 -0.35% +0.00% 44188 → 44188 ok
LintRW/mariadb -0.45% 0.684 +0.23% -0.00% 40729 → 40729 ok
LintRW/sqlserver -1.12% 0.218 -1.84% -0.00% 36894 → 36894 ok
LintRW/oracle +0.77% 0.393 +1.22% -0.00% 45288 → 45288 ok
LintRW/sqlite -2.36% 0.015 -2.05% -0.00% 40580 → 40580 ok
LintRW/snowflake -1.00% 0.529 -0.19% +0.00% 39840 → 39840 ok
LintRW/clickhouse +2.08% 0.143 +0.54% +0.00% 44993 → 44993 ok
LintRule/L007 +0.51% 0.393 +0.58% +0.00% 72565 → 72565 ok
LintRule/L010 +3.70% 0.029 +1.27% +0.00% 20758 → 20758 ok
ParseError/syntax_mid/parse +0.68% 0.472 -0.12% +0.00% 21 → 21 ok
ParseError/syntax_mid/validate +0.45% 0.344 -0.75% +0.00% 21 → 21 ok
ParseError/syntax_end/parse +0.95% 0.427 -0.46% +0.00% 25 → 25 ok
ParseError/syntax_end/validate +0.34% 0.496 -0.48% +0.00% 25 → 25 ok
ParseError/tokenize/parse -0.07% 0.910 -0.04% +0.00% 19 → 19 ok
ParseError/tokenize/validate -2.69% 0.082 -1.57% +0.00% 30 → 30 ok
ParseError/long_prefix/parse +0.48% 0.853 -0.45% +0.00% 229 → 229 ok
ParseError/long_prefix/validate -0.60% 0.912 -0.35% +0.00% 229 → 229 ok
geomean +0.10% 0.971 -0.06%

A/A control: 0 of 50 benchmarks moved more than 3%.

Instructions per operation (cmd/perfdriver)

case instructions/op status
e2e/aggregate +0.08% ok
e2e/complex -0.02% ok
e2e/cte +0.05% ok
e2e/delete -0.15% ok
e2e/insert +0.03% ok
e2e/join -0.06% ok
e2e/select_where -0.03% ok
e2e/simple_select +0.02% ok
e2e/subquery -0.01% ok
e2e/update +0.02% ok
e2e/window +0.00% ok
rw/postgresql/medium +0.01% ok
Secondary metric: default GC, GOMAXPROCS=1 (informational)
benchmark time p
ParseE2E/simple_select -1.07% 0.393
ParseE2E/select_where -0.35% 0.762
ParseE2E/join -0.33% 0.739
ParseE2E/aggregate -1.86% 0.739
ParseE2E/subquery +0.38% 0.853
ParseE2E/cte +0.51% 0.326
ParseE2E/window +0.36% 0.520
ParseE2E/complex -1.22% 0.315
ParseE2E/insert +0.00% 0.971
ParseE2E/update -0.30% 1.000
ParseE2E/delete +0.90% 0.190
ParseRW/postgresql/medium +0.31% 0.739
ParseRW/mysql/medium -0.32% 0.496
ParseRW/mariadb/medium +0.11% 0.853
ParseRW/sqlserver/medium +0.80% 0.190
ParseRW/oracle/medium +1.43% 0.481
ParseRW/sqlite/medium -1.79% 0.190
ParseRW/snowflake/medium -0.38% 0.353
ParseRW/clickhouse/medium +1.51% 0.684
ParseFresh/simple_select +1.80% 0.739
ParseFresh/join -0.31% 0.650
ParseFresh/complex +1.44% 0.853
PoolGetPut/serial +2.04% 0.165
Tokenize/scratch/join +0.22% 0.734
Tokenize/scratch/complex +1.02% 0.384
Tokenize/scratch/insert +1.17% 0.853
Normalize/simple_select -3.66% 0.015
Normalize/join -0.12% 0.705
Normalize/complex -1.20% 0.218
TransformParse/simple_select +0.31% 0.853
TransformParse/join -1.09% 0.257
TransformParse/complex -1.33% 0.247
LintRW/postgresql +0.47% 0.853
LintRW/mysql -0.17% 0.481
LintRW/mariadb -0.07% 1.000
LintRW/sqlserver +1.43% 0.393
LintRW/oracle +0.33% 0.481
LintRW/sqlite +0.59% 0.165
LintRW/snowflake -0.44% 0.853
LintRW/clickhouse -0.70% 0.529
LintRule/L007 -0.81% 0.529
LintRule/L010 +0.52% 1.000
ParseError/syntax_mid/parse +0.97% 0.571
ParseError/syntax_mid/validate +0.14% 0.529
ParseError/syntax_end/parse -0.40% 0.739
ParseError/syntax_end/validate +1.78% 0.796
ParseError/tokenize/parse -0.70% 0.186
ParseError/tokenize/validate -0.69% 0.247
ParseError/long_prefix/parse -0.69% 0.165
ParseError/long_prefix/validate -1.60% 0.029
geomean -0.03%
Environment
date:        2026-11-03T05:29:10Z
base:        36482b496904c586da3bf7b96757067088fefcc1
head:        working tree of 363908c05be6dd48a98503f850bf0fde3f3dfa1d
go:          go version go1.26.1 linux/amd64
kernel:      Linux 7.0.0-1017-azure x86_64
pinning:     pinned to CPU 3 (SMT siblings 2-3) with taskset
clocksource: tsc
load:        0.66, 0.21, 0.07
instr count: cachegrind
perf probe:  Error: No supported events found. The instructions:u event is not supported. 

Architecture:                            x86_64
CPU(s):                                  4
Model name:                              AMD EPYC 9V45 96-Core Processor
Thread(s) per core:                      2
Core(s) per socket:                      2
Socket(s):                               1
Hypervisor vendor:                       Microsoft
L1d cache:                               96 KiB (2 instances)
L1i cache:                               64 KiB (2 instances)
L2 cache:                                2 MiB (2 instances)
L3 cache:                                32 MiB (1 instance)
benchstat (primary metric)
goos: linux
goarch: amd64
pkg: github.com/ajitpratap0/GoSQLX/pkg/fingerprint
cpu: AMD EPYC 9V45 96-Core Processor                
                        │    base     │                head                │
                        │   sec/op    │   sec/op     vs base               │
Normalize/simple_select   1.403µ ± 3%   1.379µ ± 2%       ~ (p=0.027 n=10)
Normalize/join            3.835µ ± 2%   3.783µ ± 1%       ~ (p=0.305 n=10)
Normalize/complex         9.886µ ± 5%   9.981µ ± 3%       ~ (p=0.684 n=10)
geomean                   3.760µ        3.733µ       -0.72%

                        │     base     │                 head                  │
                        │     B/op     │     B/op      vs base                 │
Normalize/simple_select     896.0 ± 0%     896.0 ± 0%       ~ (p=1.000 n=10) ¹
Normalize/join            2.211Ki ± 0%   2.211Ki ± 0%       ~ (p=1.000 n=10) ¹
Normalize/complex         6.117Ki ± 0%   6.117Ki ± 0%       ~ (p=1.000 n=10) ¹
geomean                   2.279Ki        2.279Ki       +0.00%
¹ all samples are equal

                        │    base    │                head                 │
                        │ allocs/op  │ allocs/op   vs base                 │
Normalize/simple_select   7.000 ± 0%   7.000 ± 0%       ~ (p=1.000 n=10) ¹
Normalize/join            23.00 ± 0%   23.00 ± 0%       ~ (p=1.000 n=10) ¹
Normalize/complex         68.00 ± 0%   68.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                   22.20        22.20       +0.00%
¹ all samples are equal

pkg: github.com/ajitpratap0/GoSQLX/pkg/gosqlx
                                │     base     │                head                 │
                                │    sec/op    │    sec/op     vs base               │
ParseE2E/simple_select            936.5n ± 16%   917.3n ±  4%  -2.04% (p=0.000 n=10)
ParseE2E/select_where             1.759µ ±  4%   1.757µ ±  3%       ~ (p=0.684 n=10)
ParseE2E/join                     2.465µ ±  2%   2.464µ ±  2%       ~ (p=0.698 n=10)
ParseE2E/aggregate                1.942µ ±  3%   1.936µ ±  3%       ~ (p=0.323 n=10)
ParseE2E/subquery                 1.690µ ±  4%   1.678µ ±  4%       ~ (p=0.516 n=10)
ParseE2E/cte                      2.261µ ±  2%   2.296µ ±  4%       ~ (p=0.481 n=10)
ParseE2E/window                   1.407µ ±  3%   1.416µ ±  2%       ~ (p=0.957 n=10)
ParseE2E/complex                  6.297µ ±  4%   6.456µ ±  3%       ~ (p=0.184 n=10)
ParseE2E/insert                   1.147µ ±  2%   1.150µ ±  3%       ~ (p=0.927 n=10)
ParseE2E/update                   1.020µ ±  3%   1.030µ ± 19%       ~ (p=0.579 n=10)
ParseE2E/delete                   634.6n ±  3%   639.1n ±  2%       ~ (p=0.190 n=10)
ParseRW/postgresql/medium         85.70µ ±  3%   86.77µ ±  2%       ~ (p=0.089 n=10)
ParseRW/mysql/medium              45.38µ ±  3%   45.53µ ±  5%       ~ (p=0.644 n=10)
ParseRW/mariadb/medium            63.22µ ±  5%   63.78µ ±  4%       ~ (p=0.579 n=10)
ParseRW/sqlserver/medium          119.7µ ±  4%   119.8µ ±  4%       ~ (p=0.481 n=10)
ParseRW/oracle/medium             149.3µ ±  2%   148.9µ ±  3%       ~ (p=0.353 n=10)
ParseRW/sqlite/medium             39.58µ ±  3%   39.39µ ±  4%       ~ (p=0.353 n=10)
ParseRW/snowflake/medium          88.69µ ±  5%   87.70µ ±  4%       ~ (p=1.000 n=10)
ParseRW/clickhouse/medium         43.17µ ±  4%   43.05µ ± 16%       ~ (p=0.853 n=10)
ParseFresh/simple_select          4.266µ ±  6%   4.221µ ±  1%       ~ (p=0.810 n=10)
ParseFresh/join                   6.255µ ±  3%   6.293µ ±  4%       ~ (p=0.383 n=10)
ParseFresh/complex                10.60µ ±  3%   10.68µ ±  3%       ~ (p=0.529 n=10)
PoolGetPut/serial                 59.97n ±  3%   60.47n ±  3%       ~ (p=0.631 n=10)
ParseError/syntax_mid/parse       2.120µ ±  3%   2.134µ ±  4%       ~ (p=0.470 n=10)
ParseError/syntax_mid/validate    1.789µ ±  1%   1.797µ ±  2%       ~ (p=0.352 n=10)
ParseError/syntax_end/parse       2.062µ ±  3%   2.082µ ±  4%       ~ (p=0.424 n=10)
ParseError/syntax_end/validate    1.895µ ±  3%   1.901µ ±  3%       ~ (p=0.492 n=10)
ParseError/tokenize/parse         1.357µ ±  2%   1.356µ ±  3%       ~ (p=0.896 n=10)
ParseError/tokenize/validate      2.581µ ±  4%   2.511µ ±  5%       ~ (p=0.079 n=10)
ParseError/long_prefix/parse      32.59µ ±  2%   32.74µ ±  2%       ~ (p=0.853 n=10)
ParseError/long_prefix/validate   31.67µ ±  4%   31.49µ ±  4%       ~ (p=0.912 n=10)
geomean                           5.552µ         5.560µ        +0.14%

                                │     base      │                 head                 │
                                │      B/s      │      B/s       vs base               │
ParseE2E/simple_select            26.48Mi ± 13%   27.03Mi ±  4%  +2.09% (p=0.000 n=10)
ParseE2E/select_where             55.83Mi ±  4%   55.92Mi ±  3%       ~ (p=0.644 n=10)
ParseE2E/join                     48.75Mi ±  2%   48.78Mi ±  2%       ~ (p=0.668 n=10)
ParseE2E/aggregate                41.27Mi ±  3%   41.38Mi ±  3%       ~ (p=0.362 n=10)
ParseE2E/subquery                 46.29Mi ±  4%   46.61Mi ±  4%       ~ (p=0.529 n=10)
ParseE2E/cte                      52.30Mi ±  2%   51.50Mi ±  4%       ~ (p=0.481 n=10)
ParseE2E/window                   63.73Mi ±  3%   63.31Mi ±  2%       ~ (p=1.000 n=10)
ParseE2E/complex                  57.24Mi ±  4%   55.85Mi ±  3%       ~ (p=0.184 n=10)
ParseE2E/insert                   63.22Mi ±  3%   63.01Mi ±  3%       ~ (p=0.971 n=10)
ParseE2E/update                   51.44Mi ±  3%   50.93Mi ± 16%       ~ (p=0.579 n=10)
ParseE2E/delete                   78.15Mi ±  3%   77.59Mi ±  2%       ~ (p=0.190 n=10)
ParseRW/postgresql/medium         41.87Mi ±  3%   41.35Mi ±  2%       ~ (p=0.089 n=10)
ParseRW/mysql/medium              59.64Mi ±  3%   59.45Mi ±  5%       ~ (p=0.644 n=10)
ParseRW/mariadb/medium            56.09Mi ±  5%   55.60Mi ±  4%       ~ (p=0.565 n=10)
ParseRW/sqlserver/medium          55.59Mi ±  4%   55.56Mi ±  4%       ~ (p=0.481 n=10)
ParseRW/oracle/medium             56.15Mi ±  2%   56.29Mi ±  3%       ~ (p=0.353 n=10)
ParseRW/sqlite/medium             52.19Mi ±  3%   52.44Mi ±  4%       ~ (p=0.353 n=10)
ParseRW/snowflake/medium          57.33Mi ±  5%   57.97Mi ±  4%       ~ (p=1.000 n=10)
ParseRW/clickhouse/medium         52.20Mi ±  5%   52.35Mi ± 14%       ~ (p=0.853 n=10)
ParseError/syntax_mid/parse       21.60Mi ±  3%   21.45Mi ±  4%       ~ (p=0.469 n=10)
ParseError/syntax_mid/validate    25.59Mi ±  1%   25.48Mi ±  2%       ~ (p=0.325 n=10)
ParseError/syntax_end/parse       18.03Mi ±  3%   17.87Mi ±  4%       ~ (p=0.424 n=10)
ParseError/syntax_end/validate    19.64Mi ±  3%   19.57Mi ±  3%       ~ (p=0.448 n=10)
ParseError/tokenize/parse         32.33Mi ±  2%   32.35Mi ±  3%       ~ (p=0.912 n=10)
ParseError/tokenize/validate      17.00Mi ±  4%   17.47Mi ±  5%       ~ (p=0.079 n=10)
ParseError/long_prefix/parse      70.88Mi ±  2%   70.55Mi ±  2%       ~ (p=0.853 n=10)
ParseError/long_prefix/validate   72.92Mi ±  4%   73.37Mi ±  3%       ~ (p=0.912 n=10)
geomean                           44.11Mi         44.06Mi        -0.12%

                                │      base      │                 head                  │
                                │      B/op      │     B/op      vs base                 │
ParseE2E/simple_select              816.0 ± 0%       816.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/select_where             1.523Ki ± 0%     1.523Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/join                     1.836Ki ± 0%     1.836Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/aggregate                1.812Ki ± 0%     1.812Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/subquery                 1.828Ki ± 0%     1.828Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/cte                      2.336Ki ± 0%     2.336Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/window                   1.281Ki ± 0%     1.281Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/complex                  5.023Ki ± 0%     5.023Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/insert                     824.0 ± 0%       824.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/update                     736.0 ± 0%       736.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/delete                     400.0 ± 0%       400.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/postgresql/medium         65.81Ki ± 0%     65.81Ki ± 0%       ~ (p=0.195 n=10)
ParseRW/mysql/medium              42.32Ki ± 0%     42.32Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/mariadb/medium            60.42Ki ± 0%     60.42Ki ± 0%       ~ (p=0.873 n=10)
ParseRW/sqlserver/medium          83.63Ki ± 0%     83.63Ki ± 0%       ~ (p=1.000 n=10)
ParseRW/oracle/medium             104.8Ki ± 0%     104.8Ki ± 0%       ~ (p=0.350 n=10)
ParseRW/sqlite/medium             38.08Ki ± 0%     38.08Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/snowflake/medium          77.60Ki ± 0%     77.60Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/clickhouse/medium         34.82Ki ± 0%     34.82Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseFresh/simple_select            896.0 ± 0%       896.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseFresh/join                   1.914Ki ± 0%     1.914Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseFresh/complex                5.102Ki ± 0%     5.102Ki ± 0%       ~ (p=1.000 n=10) ¹
PoolGetPut/serial                   0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_mid/parse       1.477Ki ± 0%     1.477Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_mid/validate    1.477Ki ± 0%     1.477Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_end/parse       2.227Ki ± 0%     2.227Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_end/validate    2.227Ki ± 0%     2.227Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseError/tokenize/parse         1.570Ki ± 0%     1.570Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseError/tokenize/validate      3.789Ki ± 0%     3.789Ki ± 0%       ~ (p=1.000 n=10) ¹
ParseError/long_prefix/parse      23.50Ki ± 0%     23.50Ki ± 0%       ~ (p=0.800 n=10)
ParseError/long_prefix/validate   23.48Ki ± 0%     23.48Ki ± 0%       ~ (p=1.000 n=10) ¹
geomean                                        ²                 +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                │     base      │                 head                 │
                                │   allocs/op   │  allocs/op   vs base                 │
ParseE2E/simple_select             5.000 ± 0%      5.000 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/select_where              18.00 ± 0%      18.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/join                      17.00 ± 0%      17.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/aggregate                 18.00 ± 0%      18.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/subquery                  14.00 ± 0%      14.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/cte                       21.00 ± 0%      21.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/window                    11.00 ± 0%      11.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/complex                   49.00 ± 0%      49.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/insert                    17.00 ± 0%      17.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/update                    13.00 ± 0%      13.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseE2E/delete                    5.000 ± 0%      5.000 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/postgresql/medium          644.0 ± 0%      644.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/mysql/medium               365.0 ± 0%      365.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/mariadb/medium             521.0 ± 0%      521.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/sqlserver/medium           926.0 ± 0%      926.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/oracle/medium             1.089k ± 0%     1.089k ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/sqlite/medium              345.0 ± 0%      345.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/snowflake/medium           774.0 ± 0%      774.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseRW/clickhouse/medium          383.0 ± 0%      383.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseFresh/simple_select           6.000 ± 0%      6.000 ± 0%       ~ (p=1.000 n=10) ¹
ParseFresh/join                    18.00 ± 0%      18.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseFresh/complex                 50.00 ± 0%      50.00 ± 0%       ~ (p=1.000 n=10) ¹
PoolGetPut/serial                  0.000 ± 0%      0.000 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_mid/parse        21.00 ± 0%      21.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_mid/validate     21.00 ± 0%      21.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_end/parse        25.00 ± 0%      25.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/syntax_end/validate     25.00 ± 0%      25.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/tokenize/parse          19.00 ± 0%      19.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/tokenize/validate       30.00 ± 0%      30.00 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/long_prefix/parse       229.0 ± 0%      229.0 ± 0%       ~ (p=1.000 n=10) ¹
ParseError/long_prefix/validate    229.0 ± 0%      229.0 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                       ²                +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                          │    base     │                head                 │
                          │  sec/stmt   │   sec/stmt    vs base               │
ParseRW/postgresql/medium   7.142µ ± 3%   7.231µ ±  2%       ~ (p=0.089 n=10)
ParseRW/mysql/medium        5.673µ ± 3%   5.691µ ±  5%       ~ (p=0.644 n=10)
ParseRW/mariadb/medium      7.025µ ± 5%   7.086µ ±  4%       ~ (p=0.565 n=10)
ParseRW/sqlserver/medium    5.700µ ± 4%   5.703µ ±  4%       ~ (p=0.481 n=10)
ParseRW/oracle/medium       6.220µ ± 2%   6.205µ ±  3%       ~ (p=0.353 n=10)
ParseRW/sqlite/medium       6.598µ ± 3%   6.565µ ±  4%       ~ (p=0.353 n=10)
ParseRW/snowflake/medium    6.822µ ± 5%   6.746µ ±  4%       ~ (p=1.000 n=10)
ParseRW/clickhouse/medium   6.167µ ± 4%   6.150µ ± 16%       ~ (p=0.853 n=10)
geomean                     6.396µ        6.399µ        +0.04%

pkg: github.com/ajitpratap0/GoSQLX/pkg/linter
                  │     base     │                head                │
                  │    sec/op    │   sec/op     vs base               │
LintRW/postgresql   4.594m ±  2%   4.594m ± 4%       ~ (p=0.853 n=10)
LintRW/mysql        4.635m ±  2%   4.619m ± 3%       ~ (p=0.579 n=10)
LintRW/mariadb      3.940m ±  2%   3.923m ± 4%       ~ (p=0.684 n=10)
LintRW/sqlserver    3.952m ±  4%   3.908m ± 4%       ~ (p=0.218 n=10)
LintRW/oracle       4.448m ±  4%   4.482m ± 4%       ~ (p=0.393 n=10)
LintRW/sqlite       3.830m ± 17%   3.739m ± 2%       ~ (p=0.015 n=10)
LintRW/snowflake    4.035m ±  4%   3.995m ± 7%       ~ (p=0.529 n=10)
LintRW/clickhouse   4.202m ±  2%   4.289m ± 3%       ~ (p=0.143 n=10)
LintRule/L007       4.991m ±  3%   5.017m ± 1%       ~ (p=0.393 n=10)
LintRule/L010       1.631m ±  4%   1.691m ± 3%       ~ (p=0.029 n=10)
geomean             3.883m         3.890m       +0.17%

                  │     base      │                head                 │
                  │      B/s      │     B/s       vs base               │
LintRW/postgresql   6.166Mi ±  2%   6.166Mi ± 4%       ~ (p=0.753 n=10)
LintRW/mysql        7.057Mi ±  2%   7.081Mi ± 4%       ~ (p=0.591 n=10)
LintRW/mariadb      7.744Mi ±  2%   7.777Mi ± 4%       ~ (p=0.670 n=10)
LintRW/sqlserver    7.839Mi ±  4%   7.930Mi ± 4%       ~ (p=0.210 n=10)
LintRW/oracle       8.926Mi ±  3%   8.860Mi ± 4%       ~ (p=0.425 n=10)
LintRW/sqlite       7.496Mi ± 14%   7.677Mi ± 1%       ~ (p=0.011 n=10)
LintRW/snowflake    7.725Mi ±  5%   7.806Mi ± 8%       ~ (p=0.542 n=10)
LintRW/clickhouse   7.725Mi ±  2%   7.572Mi ± 3%       ~ (p=0.128 n=10)
geomean             7.549Mi         7.574Mi       +0.33%

                  │     base     │                 head                  │
                  │     B/op     │     B/op      vs base                 │
LintRW/postgresql   3.497Mi ± 0%   3.497Mi ± 0%       ~ (p=0.382 n=10)
LintRW/mysql        4.352Mi ± 0%   4.352Mi ± 0%       ~ (p=0.037 n=10)
LintRW/mariadb      4.026Mi ± 0%   4.026Mi ± 0%       ~ (p=0.239 n=10)
LintRW/sqlserver    3.594Mi ± 0%   3.594Mi ± 0%       ~ (p=0.810 n=10)
LintRW/oracle       4.386Mi ± 0%   4.386Mi ± 0%       ~ (p=0.838 n=10)
LintRW/sqlite       3.816Mi ± 0%   3.816Mi ± 0%       ~ (p=0.985 n=10)
LintRW/snowflake    3.847Mi ± 0%   3.847Mi ± 0%       ~ (p=0.361 n=10)
LintRW/clickhouse   4.295Mi ± 0%   4.295Mi ± 0%       ~ (p=0.725 n=10)
LintRule/L007       2.942Mi ± 0%   2.942Mi ± 0%       ~ (p=1.000 n=10) ¹
LintRule/L010       859.6Ki ± 0%   859.6Ki ± 0%       ~ (p=1.000 n=10) ¹
geomean             3.294Mi        3.294Mi       +0.00%
¹ all samples are equal

                  │    base     │                 head                 │
                  │  allocs/op  │  allocs/op   vs base                 │
LintRW/postgresql   36.48k ± 0%   36.48k ± 0%       ~ (p=1.000 n=10) ¹
LintRW/mysql        44.19k ± 0%   44.19k ± 0%       ~ (p=0.628 n=10)
LintRW/mariadb      40.73k ± 0%   40.73k ± 0%       ~ (p=1.000 n=10) ¹
LintRW/sqlserver    36.89k ± 0%   36.89k ± 0%       ~ (p=1.000 n=10) ¹
LintRW/oracle       45.29k ± 0%   45.29k ± 0%       ~ (p=1.000 n=10) ¹
LintRW/sqlite       40.58k ± 0%   40.58k ± 0%       ~ (p=1.000 n=10) ¹
LintRW/snowflake    39.84k ± 0%   39.84k ± 0%       ~ (p=1.000 n=10) ¹
LintRW/clickhouse   44.99k ± 0%   44.99k ± 0%       ~ (p=0.474 n=10)
LintRule/L007       72.56k ± 0%   72.56k ± 0%       ~ (p=1.000 n=10) ¹
LintRule/L010       20.76k ± 0%   20.76k ± 0%       ~ (p=1.000 n=10) ¹
geomean             40.55k        40.55k       +0.00%
¹ all samples are equal

                  │     base     │                head                │
                  │   sec/stmt   │  sec/stmt    vs base               │
LintRW/postgresql   15.06µ ±  2%   15.06µ ± 4%       ~ (p=0.853 n=10)
LintRW/mysql        11.20µ ±  2%   11.16µ ± 3%       ~ (p=0.579 n=10)
LintRW/mariadb      10.37µ ±  2%   10.32µ ± 4%       ~ (p=0.684 n=10)
LintRW/sqlserver    14.27µ ±  4%   14.11µ ± 4%       ~ (p=0.225 n=10)
LintRW/oracle       12.09µ ±  4%   12.18µ ± 4%       ~ (p=0.393 n=10)
LintRW/sqlite       11.00µ ± 17%   10.75µ ± 2%       ~ (p=0.014 n=10)
LintRW/snowflake    12.34µ ±  4%   12.22µ ± 7%       ~ (p=0.529 n=10)
LintRW/clickhouse   10.66µ ±  2%   10.89µ ± 3%       ~ (p=0.143 n=10)
LintRule/L007       1.775µ ±  3%   1.784µ ± 1%       ~ (p=0.393 n=10)
LintRule/L010       579.7n ±  4%   601.1n ± 3%       ~ (p=0.029 n=10)
geomean             7.332µ         7.345µ       +0.17%

pkg: github.com/ajitpratap0/GoSQLX/pkg/sql/tokenizer
                         │    base     │                head                │
                         │   sec/op    │   sec/op     vs base               │
Tokenize/scratch/join      795.0n ± 2%   799.2n ± 4%       ~ (p=0.542 n=10)
Tokenize/scratch/complex   2.142µ ± 2%   2.135µ ± 5%       ~ (p=0.897 n=10)
Tokenize/scratch/insert    382.7n ± 4%   386.9n ± 4%       ~ (p=0.218 n=10)
geomean                    867.0n        870.7n       +0.43%

                         │     base     │                head                 │
                         │     B/s      │     B/s       vs base               │
Tokenize/scratch/join      151.2Mi ± 2%   150.3Mi ± 4%       ~ (p=0.542 n=10)
Tokenize/scratch/complex   168.3Mi ± 2%   168.9Mi ± 5%       ~ (p=0.896 n=10)
Tokenize/scratch/insert    189.4Mi ± 4%   187.3Mi ± 4%       ~ (p=0.218 n=10)
geomean                    168.9Mi        168.2Mi       -0.43%

                         │     base     │                head                 │
                         │     B/op     │    B/op     vs base                 │
Tokenize/scratch/join      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
Tokenize/scratch/complex   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
Tokenize/scratch/insert    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean                               ²               +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                         │     base     │                head                 │
                         │  allocs/op   │ allocs/op   vs base                 │
Tokenize/scratch/join      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
Tokenize/scratch/complex   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
Tokenize/scratch/insert    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean                               ²               +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/ajitpratap0/GoSQLX/pkg/transform
                             │    base     │                head                │
                             │   sec/op    │   sec/op     vs base               │
TransformParse/simple_select   925.0n ± 5%   925.6n ± 4%       ~ (p=1.000 n=10)
TransformParse/join            2.550µ ± 1%   2.549µ ± 5%       ~ (p=0.631 n=10)
TransformParse/complex         7.088µ ± 2%   7.086µ ± 1%       ~ (p=1.000 n=10)
geomean                        2.557µ        2.557µ       -0.02%

                             │     base     │                 head                  │
                             │     B/op     │     B/op      vs base                 │
TransformParse/simple_select     816.0 ± 0%     816.0 ± 0%       ~ (p=1.000 n=10) ¹
TransformParse/join            1.836Ki ± 0%   1.836Ki ± 0%       ~ (p=1.000 n=10) ¹
TransformParse/complex         5.023Ki ± 0%   5.023Ki ± 0%       ~ (p=1.000 n=10) ¹
geomean                        1.944Ki        1.944Ki       +0.00%
¹ all samples are equal

                             │    base    │                head                 │
                             │ allocs/op  │ allocs/op   vs base                 │
TransformParse/simple_select   5.000 ± 0%   5.000 ± 0%       ~ (p=1.000 n=10) ¹
TransformParse/join            17.00 ± 0%   17.00 ± 0%       ~ (p=1.000 n=10) ¹
TransformParse/complex         49.00 ± 0%   49.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                        16.09        16.09       +0.00%
¹ all samples are equal

Run, raw data and benchstat

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Claude finished @ajitpratap0's task in 13s —— View job


Review of PR #933: re-measure published benchmarks at v1.17.0

I read the diff against origin/main. I did not re-run the benchmarks or the generator, so the Test Plan results come from the PR description.

Findings: none blocking. This is a data-only change.

What I checked

  • Parse-stage figures are consistent. 363 / 433 / 683 / 648 / 1296 ns agree across metrics.json, performance_baselines.json, website/src/data/metrics.ts, README.md and llms.txt.
  • Derived rates are right. 1e9 / 363 ≈ 2.75M, shown as "~2.8M" in the README and "~2.75M" in llms.txt.
  • Dates are consistent. Every measured_at, updated and "re-measured" string reads 2026-11-02.
  • The competitor data is one file in two places. cmp shows benchmarks/compare/results/latest.json and website/src/data/competitor-benchmarks.json are byte-identical.
  • The CI ceilings are unaffected. The ns_per_op ceilings are unchanged. The largest new figure, 1296 ns, is well under its 2900 ns ceiling.
  • The perf gate passed in shadow mode. The geomean moved -0.32%, which is expected for a data-only PR.

Minor, non-blocking notes

  1. The note fields in performance_baselines.json say -count=10, but the published figures are medians of 20 runs. This text was already there, but you could fix it while you're in the file.
  2. The CI range text ("last 9 Tests runs on main, 0715bb9..61ca6c8") is unchanged. That is fine, since it describes CI and not the M4 run.
  3. The PR shows v1.17.0 is about 5.8% slower than v1.16.0 on the parse stage. Consider a CHANGELOG line or an issue so the regression is tracked, with the speedup already on main as the stated follow-up.
  4. latest.txt has 532 changed lines. It is raw benchmark output, so I did not review it line by line.

Verdict: Looks good to merge once the Claims Drift check passes.

@ajitpratap0
ajitpratap0 merged commit 5b0818f into main Nov 3, 2026
37 checks passed

This branch was successfully deployed

1 active deployment
Preview — d9be0331 Deployed Nov 3, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant