2026/10/12 1:38:27

pgdog Resharding 基准测试指南:copy_data / replication / schema_sync 三套件与 toxiproxy 网络仿真

pgdog Resharding 基准测试指南:copy_data / replication / schema_sync 三套件与 toxiproxy 网络仿真 数据库后端【免费下载链接】pgdogPostgreSQL connection pooler, load balancer and database sharder.项目地址https://gitcode.com/gh_mirrors/pg/pgdog点击查看免费下载导读本文是 pgdog 仓库内置的重新分片resharding基准测试手册覆盖数据复制COPY、WAL 逻辑复制与 schema 同步三条核心链路的测量方法。读完你将掌握如何用bench.sh hyperfine 复现 3 源分片 → 4 目标分片的复制吞吐、如何测量排空预置 WAL 积压的流式复制耗时、如何分阶段 dry-run 测 pgdog 自身的 schema 改写成本以及如何用 toxiproxy 模拟跨区域网络条件延迟 带宽限制并做基线对比。benches/resharding/目录围绕 pgdog 的data-sync/schema-sync两条命令设计了三个互相独立的测量套件所有脚本都以 benches/bench.shhyperfine 封装为统一运行入口。整套测试针对 pgdog 重新分片管线的不同阶段分别计时其对应的底层实现位于 pgdog/src/cli.rsDataSync/SchemaSync子命令定义与 pgdog/src/api/schema_sync.rs阶段状态机。三个套件总览套件脚本计时对象copy_datacopy_data/run.sh批量 COPY 吞吐3 个源分片 → 4 个目标分片replicationreplication/run.shWAL 流式复制吞吐排空预置的积压数据schema_syncschema_sync/run.sh按阶段 dump、解析并改写源 schema 的耗时三者共享同一套数据库拓扑源端为pgdog1、pgdog2、pgdog3shard 02目标端为shard_0shard_34 个分片拓扑定义见 pgdog.toml。配置中两个关键参数直接决定复制行为resharding_copy_format binaryCOPY 数据格式。源码 pgdog-config/src/general.rs 明确指出 binary 格式更快但做INTEGER→BIGINT主键迁移时必须改用 text 格式见 pgdog-config/src/sharding.rs 的CopyFormat枚举。resharding_parallel_copies 5并行启动的复制任务数与可用副本数无关pgdog-config/src/general.rs。toxiproxy 模式下降为 2并额外启用带role replica、resharding_only true的独立连接见 pgdog.toxi.toml。前置条件一台运行中的 Postgres包含pgdog.toml中定义的所有数据库pgdog1/pgdog2/pgdog3shard_0shard_3且可用pgdog/pgdog账号以127.0.0.1:5432免密访问环境变量PGDOG_BIN指向 pgdog 可执行文件——若未设置bench.sh 会自动cargo build --release并复用target/release/pgdog父目录的 bench.sh所有 run.sh 均通过source引入其中的bench_run函数hyperfine与python3可用前者做计时后者跑 compare.py 输出对比。注意三个 run.sh 都硬编码了PGHOST127.0.0.1、PGPORT5432、PGUSERpgdog、PGPASSWORDpgdog与PGOPTIONS-c client_min_messageswarning直接复现时需与你的环境一致。运行方式# 复制吞吐 bash benches/resharding/copy_data/run.sh # WAL 复制吞吐 bash benches/resharding/replication/run.sh # 放大数据集scale 到 1000 万行sessions 表行数 BENCH_SCALE10000000 bash benches/resharding/copy_data/run.sh # 保存基线后再对比 bash benches/resharding/copy_data/run.sh --save-baseline main bash benches/resharding/copy_data/run.sh --baseline mainrun.sh 接受 bench.sh 定义的三个转发参数参数作用--prepare CMDhyperfine 在每次计时前运行的复位命令--save-baseline NAME将结果保存为具名基线 JSON--baseline NAME与具名基线对比默认与上一次临时结果对比基线文件统一落在target/pgdog_benches/name.json见 bench.sh。bench_run还会导出RUST_LOGerror屏蔽日志对计时的干扰并在运行后调用 compare.py 打印与上一次运行的差异。可通过环境变量RUNS默认 3与WARMUP默认 1控制 hyperfine 的重复与预热次数。copy_data批量 COPY 吞吐copy_data/run.sh 的流程是先用 setup.sql 在每个源分片重建bench_copyschema再用 fill.sql 以generate_series(:shard_index1, :scale, :num_shards)的分片切片方式灌入数据——每个分片只生成属于自己的tenant_id切片避免跨分片干扰。计时命令为${PGDOG_BIN} --config pgdog.toml --users users.toml>${PGDOG_BIN} --config pgdog.toml --users users.toml># 依次跑全部三个阶段 bash benches/resharding/schema_sync/run.sh # 只跑 post_data 阶段且放大到 1000 张表 BENCH_TABLES1000 BENCH_STAGESpost_data bash benches/resharding/schema_sync/run.sh每个阶段独立计时结果名为resharding.schema_sync.stage。阶段前置状态由 schema_sync/prepare.sh 保证pre_data前目标为空post_data前已应用 pre-data schemacutover前 pre-data 与 post-data 均已应用。toxiproxy 网络仿真任一套件传入USE_TOXI1都会把 pgdog 连接改道 toxiproxy退出时通过 trap 清理toxi/teardown.sh并将配置切换为 pgdog.toxi.toml。该配置为每个源分片额外注册了 3 条resharding_only副本连接15400/15410/15411其中15411是默认带 500 ms 高延迟的慢副本。两个核心代理代理端口覆盖分片方向resharding_source15400pgdog1, pgdog2, pgdog3下行PG → pgdogresharding_destination15401shard_0–shard_3上行pgdog → PG默认 toxics 模拟跨区域部署pgdog 紧邻源端目标端在另一区域例如 us-east-1 → us-east-2。延迟是单向的因此每个请求/响应往返各加同样的量。可调环境变量变量默认值效果SOURCE_LATENCY_MS1源端读的附加延迟DEST_LATENCY_MS15目标端写的附加延迟SOURCE_BW_KBPS125000源端读带宽上限KB/s/连接0 不限DEST_BW_KBPS125000目标端写带宽上限KB/s/连接0 不限# 默认 toxic 设置运行 USE_TOXI1 bash benches/resharding/copy_data/run.sh # 模拟目标端慢写带宽砍到 5 MB/s、延迟加到 20 ms DEST_BW_KBPS5000 DEST_LATENCY_MS20 USE_TOXI1 bash benches/resharding/copy_data/run.sh # 对比走代理与直连先存基线再带网络条件重跑 bash benches/resharding/copy_data/run.sh --save-baseline direct USE_TOXI1 bash benches/resharding/copy_data/run.sh --baseline direct注意 toxiproxy 模式下BENCH_SCALE默认降为 50 万copy_data/run.sh避免过大的数据集在受限带宽下拖长测试时间。结果解读与复现建议基线对比--save-baseline与--baseline是衡量优化效果的推荐方式compare.py 会输出两次运行的比例与差异适合在代码改动前后各存一条具名基线。区分 pgdog 成本与 Postgres 成本schema_sync套件的 dry-run 设计、replication套件把 checkpoint 移出计时区间的设计都是为了让测量聚焦 pgdog 自身解读数据时请保持同样的口径。从源码确认行为data-sync与schema-sync的参数语义以 pgdog/src/cli.rs 为准resharding_copy_format的 binary/text 选择与INTEGER → BIGINT迁移约束见 pgdog-config/src/sharding.rs完整的分片拓扑、用户与 publication 定义可对照 pgdog.toml、users.toml 与各套件的 SQL 文件。复现前提所有脚本假定本机127.0.0.1:5432的 Postgres 已就绪且运行前需构建好 pgdog未设置PGDOG_BIN时脚本会自动 release 构建。复现时按需调整BENCH_SCALE/BENCH_TABLES/BENCH_STAGES/RUNS/WARMUP避免一次把数据集拉得过大。赞分享数据库后端【免费下载链接】pgdogPostgreSQL connection pooler, load balancer and database sharder.项目地址https://gitcode.com/gh_mirrors/pg/pgdog点击查看免费下载相关推荐PgDog 性能优化实践从 Profiling 原则到三套标准基准测试PgDog 性能优化实践从 Profiling 原则到三套标准基准测试 本文以 PgDog 仓库中的性能优化指南 benches/perf/README.m数据库后端GraalVM GraalWasm 测试与基准测试完全指南从基础测试套件到 JMH 基准测试GraalVM GraalWasm 测试与基准测试完全指南从基础测试套件到 JMH 基准测试 本文基于 GraalVM 仓库中 wasm/docs/contr编译器JIT编译语言运行时高性能计算内存管理PyTorch torch.compile() 基准测试指南TorchBench / HuggingFace / TIMM 三套件与 TorchInductor 加速评测实战PyTorch torch.compile 基准测试指南TorchBench / HuggingFace / TIMM 三套件与 TorchInductor人工智能机器学习深度学习分布式训练模型编译上一篇3步实现电脑控制手机scrcpy免费投屏工具完全指南下一篇Real-ESRGAN-512x512-tiles-amdnpu vs 其他超分模型AMD NPU平台上的FPS性能大比拼 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考