SQL Benchmarks Lab

io.github.rctruta由 GitHub 账号 rctruta 发布v0.1.2更新于 Oct 24, 2026

Query pre-computed SQL engine benchmarks. Runs standalone, no server setup required.

概览

AI 生成的概览

让助手查询预先计算好的 SQL 引擎基准测试结果,并通过打包的 CLI 工具在本地运行基准实验。

可以做什么
提供对 SQL 基准实验胶囊目录的读取工具,包括列出结果的工具,以及用于启动新运行的 submit_experiment 工具。它可以在进程内挂载基准 REST API,无需单独服务器,也可以指向在别处运行的 API。底层工具链在 DuckDB、Postgres 等引擎上运行确定性的、以哈希寻址的实验。
适用场景
适合比较 SQL 引擎或查询性能、复现已发布的基准胶囊,或让助手查询已有基准数据而不是凭空猜测。最适合已经使用该基准实验室或其已发布结果的用户。
运行要求
作为 Python 包(sqlbenchdag)通过 uvx 在本地运行,需要 Python 3.11+ 和 uv。容器化引擎(如 Postgres 和 TypeDB)需要 Docker,但仅用 DuckDB 的快速入门不需要。可选环境变量:SB_API_BASE 用于远程 API 基础地址,SB_RESULTS_DIR 用于实验结果胶囊目录。未声明身份验证。
安装前请注意
该包附带 SQL 套件、分类法和模板,但不包含结果胶囊,因此全新安装时目录工具可用,而结果列表工具在存在运行结果前可能返回空。submit_experiment 会启动基准运行,可能重启 Docker 容器并刷新操作系统页面缓存,资源消耗较大。设置 SB_API_BASE 会将工具指向外部 API 端点。

安装

在 SourceWeft 中

  1. 打开 控制台中的 SQL Benchmarks Lab,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

SQL Benchmarking Laboratory

A deterministic, orchestrated harness for verifying database performance at scale. Developed by Ramona C. Truta

[SQL Benchmarks Lab MCP server]


The Mission: "Ground Truth" as Code

This platform is a specialized laboratory for testing SQL performance hypotheses. It transforms query tuning from intuition into a reproducible science.

The core of the system is a Deterministic Orchestration Harness that guarantees that if the logic or the environment changes, the benchmark result changes. If they do not, the result is addressable and cached.

Scope: the focus to date is synthetic and canonical (TPC-H) data, which is the right instrument for mechanism experiments — where controlled, reproducible data isolates the variable under test. Real-data support exists but is experimental; see the FAQ for the synthetic-vs-real rationale, the container model, and the roadmap (AI-security testbed, real-data trust chain).


Key Features & Innovations

1. Context-Aware Semantic Hashing (The Experiment ID)

The Heart of the system is the Experiment ID, an 8-character hash that governs the entire lifecycle. This hash is a SHA-256 fingerprint generated from:

  • The Config: Every dimension in your YAML (rows, skew, parameters).
  • The SQL Logic: The actual content of the benchmarked scripts.
  • The Code: All measurement-relevant Python — orchestration (assets/), engine clients (resources/), and data generators (plugins/).

Semantic Normalization: The hashing engine distinguishes between a logic change and a formatting change.

  • SQL: Comments, whitespace, and case are normalized before hashing.
  • Python: Orchestration scripts are parsed into an Abstract Syntax Tree (AST) to strip docstrings and formatting variations, ensuring the Experiment ID only changes when execution logic changes.

2. Multi-Layer Cold-Cache Isolation

To ensure IO-bound performance is not masked by memory buffers, engine-level buffers are cleared before every query:

  • Postgres: Mandatory Docker Container Restarts clear shared buffers.
  • Versioned DuckDB (duckdb_1_5, duckdb_2_0): every query runs in a fresh worker process, so DuckDB's buffer pool starts empty.

OS page cache: not evicted. Engines call thrash_os_cache, which dirties an anonymous memory region (half of available RAM, capped at 4 GB). On macOS this was measured to leave a cached 1 GB file fully resident, so measurements should be read as warm at the OS level. DuckDB clients take a required cold argument, and cold=True raises until a verified eviction step exists.

3. Agentic AI Integration

The platform is built for the future of Autonomous Engineering. The Experiment ID allows AI agents to treat the laboratory as a Deterministic Performance API.

  • See AGENTS.md for the full Agentic Benchmarking Protocol.

4. Declarative Matrix Orchestration

Benchmarks are defined as N-dimensional matrices in YAML. The platform expands these into a Cartesian product of Independent Dagster Partitions. This allows for parallel dispatch and granular retries.


Usage & Technical Setup

Prerequisites

  • uv: the project's Python environment & dependency manager (fast, modern). setup.sh uses it, and it can install Python 3.11 for you.
  • Python 3.11+: core runtime (uv provisions it if missing).
  • Docker: for the containerized engines (Postgres, TypeDB), which the harness manages itself — not required for the DuckDB-only quickstart.

Installation & Setup

From PyPI — the lab is installable, which gives you the tooling and the sqlbench CLI:

bash
pip install sqlbenchdag

From source — clone the repo to also get the published capsules (sql_benchmarks/experiments/results/) and the full harness. The laboratory includes a comprehensive setup script that manages virtual environments, dependencies, and directory initialization.

bash
# 1. Automate Setupchmod +x setup.sh && ./setup.sh
# 2. Activate Laboratorysource venv/bin/activate

The Execution Workflow (CLI)

While the system is powered by Dagster, the primary interface is the CLI for automated workflows.

bash
# QUICKSTART: DuckDB only, no Docker required — runs in seconds./run.sh sql_benchmarks/experiments/queue/quickstart.yaml --auto
# FULL BENCHMARK: Run all queued experiments (requires Docker for Postgres)./run.sh queue --auto
# SINGLE EXPERIMENT: Pass a specific config path./run.sh sql_benchmarks/experiments/queue/quack_execution_modes.yaml --auto

To write your own experiment, start from the annotated template and see the catalog of published runs in docs/experiments.md.


Project Structure

Managed with a strict separation between Harness and Scenario:

text
/sql_benchmarks├── /assets                 # THE HARNESS: Dagster factories & pipeline logic├── /resources              # THE INFRASTRUCTURE: DB drivers & Docker management├── /scripts/sql            # THE SCENARIOS: Raw SQL partitioned by scenario├── /plugins                # THE DATA: Declarative generators & scenario providers├── /utils                  # THE BRAIN: AST-hashing, common logic, & system primitives└── /experiments            # THE LABORATORY    ├── active.yaml         # LOCAL runtime staging — the coordinator overwrites    │                       #   this on every run (gitignored; not shared state)    ├── /queue              # Staging area for new experiment configs    ├── /archive            # Library of previously defined experiment templates    ├── /configs            # Registry of immutable, hash-addressed experiment capsules    └── /results            # Data capsules: fragments, CSVs, and Dashboards

Published Experiments — the Quack investigation

The first published study with this lab: an independent measurement of DuckDB's Quack client-server protocol (beta, v1.5.3). Each row links the runnable config to its committed, verifiable capsule. Full numbers, scaling exponents, and verification steps in docs/published_capsules.md.

ActQuestionConfigCapsuleFinding
IWhat does the protocol cost?quack_execution_modes.yamlb8e2bfafAttach-mode overhead grows with scan size (2.6× → 9.5× at 10M rows); pushdown stays flat at ~2×.
IIWhy is pushdown ~2× and not 1×?quack_residual_threads.yaml25b0e134The residual tracks reduced server-side parallelism (~2–4 of 8 threads), not transport.
IIIDoes it generalize to joins?tpch_quack_validation.yamlb198363eOn canonical TPC-H Q3, pushdown holds (~1.9×); attach mode cannot run the join at all (DNF).
IVDoes it beat the incumbent?quack_vs_postgres.yaml902d1277DuckDB-over-Quack (pushdown) beats PostgreSQL by up to 13.2×, and the gap widens with scale.

Act 0 (b82b4eae) is the exploratory scout that started it — see docs/published_capsules.md.

The lab also ships scenario suites for other studies — selectivity/, null_logic/, null_sentinel/, recursion/, sort_spill/, tpch/, and more under sql_benchmarks/scripts/sql/ — each runnable across the engine matrix.


Naming & Provenance

The lab works at two layers, named two different ways. Keeping them distinct is the difference between a number you can trace and a number you have to trust.

LayerWhat it isNamed byExample
Capsuleone experiment's complete resultsits Experiment ID — an 8-char SHA-256 of the question (config + SQL + measurement code), assigned by the machine48c92f31
Releasea signed set of capsules backing a publicationa human name: sqlbenchdag-<topic>-v<N>-<YYYYMMDD>sqlbenchdag-quack-v1-20260614

A release contains capsules; a capsule is one experiment. The machine names capsules (hashes you can't forge); the author names releases (words that mean something). sqlbenchdag is the lab's maker's mark — sql + bench + dag (Dagster, the orchestration that distinguishes this lab from a bare query timer). It is carried on every release this lab produces.

Two hashes, two jobs (a capsule contains both — they are not the same thing):

  • the Experiment ID (8 chars) is an address — it names the capsule, and the same question always produces the same address;
  • the integrity seal (64 chars, in integrity.seal) is a checksum — it verifies the capsule's contents are untouched. You file by the address; the seal is the tamper-evident lid.

Reproducibility is pinned to the release. Because the Experiment ID hashes the measurement code, it is stable only at a fixed code revision — which is exactly what the signed release tag freezes. To reproduce a published capsule, check out its release tag and re-run its config; the same question yields the same ID, or the comparison is refused by construction.

Provenance roadmap: a per-capsule generator stamp (sqlbenchdag@<commit>) will record the exact build that produced each capsule. It writes through the finalization code, which lives inside the Experiment-ID hash, so it ships with a future release rather than re-numbering capsules already published.

See docs/published_capsules.md for the full trust chain (reproducibility, integrity, timestamp, authorship) and how to verify each. Reproducibility and integrity are automatic on every run; timestamp and signature are optional steps you add only when publishing — the producer workflow is docs/PUBLISHING.md.


License

Copyright 2025-2026 Ramona C. Truta. Licensed under the Apache License 2.0.

Built with Dagster, Polars, Docker, DuckDB, and Postgres.

来源:README.md,提交 fb2ac80

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.2最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分