这是一个面向 Percona Server 的 PGO 构建、压测、打包与发布仓库。
这个项目的核心目的,是用一种足够通用、且明确保持为非 I/O bound 的 OLTP 读负载来训练 GCC Profile-Guided Optimization,然后编译出在这类负载上明显更快的 Percona Server 二进制。默认训练路径使用 sysbench 的 point_select 与 read_only 读路径,并尽量保证压测是 CPU-bound,而不是被磁盘吞吐主导。
目标不是为了某一个过窄的 synthetic case 做过拟合,而是希望得到一个对通用 OLTP 读负载有显著提升、并且在不少混合 read_write 场景里也依然受益的版本。
这个仓库由社区维护,不是 Percona 官方发布渠道。
GCC PGO 的基本流程就是三步:
- 先做 instrumented build
- 用有代表性的 OLTP 负载跑训练,生成 profile
- 再做
profile-use重编译
对于 MySQL / Percona 这样的 OLTP 引擎,这份运行时 profile 能帮助编译器更好地优化热点路径上的 inline、代码布局和分支行为。本仓库通过 run.sh 把整条链路串起来:准备环境、下载源码、normal build、profile-generate build、sysbench 训练、profile-use rebuild、结果验证,以及 mini tarball 打包。
当前默认策略:
PGO_TRAIN_MODE=joint_readPGO_BENCHMARK_MODE=readonly
目前公开 release 的证据表明,在读密集 OLTP 负载上,这套方法已经多次得到大约 +28% 到 +62% 的提升,具体取决于版本和引擎。
| 版本 | 环境 | 公开结果 | 链接 |
|---|---|---|---|
8.4.8-8 |
AlmaLinux 9 |
read_only +49.61%,point_select +58.53% |
release,result |
8.0.45-36 |
AlmaLinux 8,WITH_ROCKSDB=ON |
InnoDB read_only +42.72%,RocksDB read_only +62.19% |
release,result |
5.7.44-54 |
CentOS 7 |
read_only +28.29%,point_select +28.34% |
release,result |
5.6.51-93.0 |
CentOS 7 |
read_only +32.90%,point_select +45.34% |
release,result |
混合读写负载也并不是完全没有收益:
- 项目历史里的
8.0 read_write结果曾经达到约+22.97% - 当前 Docker 对比官方镜像的 head-to-head 测试里,
read_write也出现了+6.56% ~ +18.58%的提升
如果只是想快速验证,Docker 往往比下载 tarball 再手动安装更直接。
Docker Hub 地址:
当前已发布镜像 tag:
bash99/percona-server-8.4-pgoed:8.4.8-8bash99/percona-server-8.4-pgoed:8.4
对应 GitHub Release:
基本 smoke test:
docker pull bash99/percona-server-8.4-pgoed:8.4.8-8
docker run --name ps8488 --rm \
-e MYSQL_ROOT_PASSWORD=root \
-p 13306:3306 -p 13360:33060 \
-d bash99/percona-server-8.4-pgoed:8.4.8-8
docker exec -it ps8488 mysql -uroot -proot -e "SELECT VERSION();"预期版本:
8.4.8-8
如果你还想顺手验证 MyRocks:
docker exec -it ps8488 mysql -uroot -proot \
-e "INSTALL PLUGIN ROCKSDB SONAME 'ha_rocksdb.so'; SHOW PLUGINS LIKE 'ROCKSDB';"镜像功能验证记录:
如果你想快速验证“和官方镜像相比到底快多少”,可以直接运行仓库里的 head-to-head sysbench 脚本:
git clone https://github.com/bash99/pgobuild_percona_server.git
cd pgobuild_percona_server
PGOED_IMAGE=bash99/percona-server-8.4-pgoed:8.4.8-8 \
OFFICIAL_IMAGE=percona/percona-server:8.4.8-8.1 \
bash docker/percona-server-8.4-pgoed/bench/run_head2head_sysbench.sh下面这些数字来自 2026-04-02 这一轮同版本本机对比:
point_select:约+34.56% ~ +43.98%read_only:约+31.08% ~ +37.50%read_write:约+6.56% ~ +18.58%
当前公开的 PGO 二进制,都是先在支持 NUMA 的 8 核虚拟机上生成 profile,再做 profile-use 重编译得到的。因此,如果你在本地 4 核、非 NUMA 的开发机上做 Docker 对比,结果可能会略低于验证文档中的专门结果。
相关文档:
GitHub Releases 是当前公开二进制的主下载入口:
- releases 页面:https://github.com/bash99/pgobuild_percona_server/releases
- latest shortcut:https://github.com/bash99/pgobuild_percona_server/releases/latest
当前 release 资产命名规则:
Percona-Server-<version>[-pgo]-PGOed.Linux.x86_64.<distro>.mini.tar.zstSHA256SUMS.txt- 对应的 benchmark 摘要,例如
pgo-readonly-<version>-<date>.md
当前已发布版本:
| 版本 | 平台 | Tarball | Benchmark 摘要 |
|---|---|---|---|
8.4.8-8 |
AlmaLinux 9 |
download | summary |
8.0.45-36 |
AlmaLinux 8 |
download | summary |
5.7.44-54 |
CentOS 7 |
download | summary |
5.6.51-93.0 |
CentOS 7 |
download | summary |
当前可以公开给出的稳定性说明是:
- 历史信号:项目早期一版基于
5.7.19的 PGO 二进制,曾在大约100+台生产机器上运行约1.5 年,没有 crash report - 当前发布标准:只有在 smoke test、运行时身份检查、profile generation 检查、profile-use 检查、benchmark 一致性检查都通过之后,构建结果才会被视为可发布
- 实际使用建议:这仍然是社区构建版,在进入生产前,建议按你自己的系统版本、配置和 workload 做基准与灰度验证
可参考:
克隆仓库:
git clone https://github.com/bash99/pgobuild_percona_server.git
cd pgobuild_percona_server设置目标版本:
export MYSQL_VER=8.4
export MYSQL_MINI_VER=8-8
export WORK_ROOT="$PWD/work"执行完整流程:
bash run.sh -i -d -n -p说明:
- 参数要分开传
-i安装依赖,通常需要sudo-d下载源码-n执行 normal build / smoke / benchmark / package-p执行 PGO build / benchmark / package
| 变量 | 含义 |
|---|---|
MYSQL_VER |
主版本,例如 5.7、8.0、8.4 |
MYSQL_MINI_VER |
上游 Percona 小版本号,例如 45-36、8-8 |
WORK_ROOT |
build / runtime / benchmark 工作目录 |
CPU_OPT_FLAGS |
额外 CPU 优化参数 |
WITH_ROCKSDB |
设为 ON 时启用 RocksDB 构建 |
ENABLE_LTO |
设为 ON 时启用 LTO |
SKIP_FULLTEXT_MECAB |
设为 ON 时跳过 MeCab 相关 fulltext 构建路径 |
PGO_TRAIN_MODE |
覆盖 PGO 训练 workload |
PGO_BENCHMARK_MODE |
覆盖 PGO 验证 workload |
| Percona Server | 状态 | 说明 |
|---|---|---|
8.4 |
主线支持 | 当前 release 与 Docker 的主目标 |
8.0 |
主线支持 | 当前 release 的主目标 |
5.7 |
维护中的历史目标 | 仍保留 CentOS 7 风格环境验证 |
5.6 |
历史 / 已收尾 | 最后一个 CentOS 7 兼容公开 build 已发布为 5.6.51-93.0 |
本次仓库重构是通过 Codex 直接在仓库工作区执行完成的。
后续如果继续做修改、验证和部署,建议先阅读 AGENTS.md,再配合合适的 AI Agent tools 直接对仓库执行操作。AGENTS.md 已经约定了项目目标、执行链路,以及哪些内容应该保留在公开仓库之外。
Codex 相关使用感谢 linux.do社区 的介绍及相关信息
- AGENTS.md
- ROADMAP.md
- docs/pgo_validation_checklist.md
- docs/pgo_train_modes.md
- docs/pgo_crossdb_non_io_bound_oltp_design.md
- docker/percona-server-8.4-pgoed/README.md
- docs/release_upload_workflow.md
仓库中的脚本与文档采用 MIT。
Percona Server、MySQL 本体及其 bundled 第三方组件仍遵循各自上游许可证与版权声明。
MySQL 的版权归属为 Oracle and/or its affiliates;Percona Server 则保留其上游项目自身的版权与许可证声明。
旧版 README 保存在 README_old.md。