Skip to content

Latest commit

 

History

History
232 lines (152 loc) · 10.8 KB

File metadata and controls

232 lines (152 loc) · 10.8 KB

English README

pgobuild_percona_server

这是一个面向 Percona Server 的 PGO 构建、压测、打包与发布仓库。

这个项目的核心目的,是用一种足够通用、且明确保持为非 I/O bound 的 OLTP 读负载来训练 GCC Profile-Guided Optimization,然后编译出在这类负载上明显更快的 Percona Server 二进制。默认训练路径使用 sysbench 的 point_selectread_only 读路径,并尽量保证压测是 CPU-bound,而不是被磁盘吞吐主导。

目标不是为了某一个过窄的 synthetic case 做过拟合,而是希望得到一个对通用 OLTP 读负载有显著提升、并且在不少混合 read_write 场景里也依然受益的版本。

这个仓库由社区维护,不是 Percona 官方发布渠道。

为什么这里的 PGO 有意义

GCC PGO 的基本流程就是三步:

  1. 先做 instrumented build
  2. 用有代表性的 OLTP 负载跑训练,生成 profile
  3. 再做 profile-use 重编译

对于 MySQL / Percona 这样的 OLTP 引擎,这份运行时 profile 能帮助编译器更好地优化热点路径上的 inline、代码布局和分支行为。本仓库通过 run.sh 把整条链路串起来:准备环境、下载源码、normal build、profile-generate build、sysbench 训练、profile-use rebuild、结果验证,以及 mini tarball 打包。

当前默认策略:

  • PGO_TRAIN_MODE=joint_read
  • PGO_BENCHMARK_MODE=readonly

性能结果概览

目前公开 release 的证据表明,在读密集 OLTP 负载上,这套方法已经多次得到大约 +28%+62% 的提升,具体取决于版本和引擎。

版本 环境 公开结果 链接
8.4.8-8 AlmaLinux 9 read_only +49.61%point_select +58.53% releaseresult
8.0.45-36 AlmaLinux 8WITH_ROCKSDB=ON InnoDB read_only +42.72%RocksDB read_only +62.19% releaseresult
5.7.44-54 CentOS 7 read_only +28.29%point_select +28.34% releaseresult
5.6.51-93.0 CentOS 7 read_only +32.90%point_select +45.34% releaseresult

混合读写负载也并不是完全没有收益:

  • 项目历史里的 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-8
  • bash99/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';"

镜像功能验证记录:

Docker 性能快速对比

如果你想快速验证“和官方镜像相比到底快多少”,可以直接运行仓库里的 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 对比,结果可能会略低于验证文档中的专门结果。

相关文档:

Release 下载

GitHub Releases 是当前公开二进制的主下载入口:

当前 release 资产命名规则:

  • Percona-Server-<version>[-pgo]-PGOed.Linux.x86_64.<distro>.mini.tar.zst
  • SHA256SUMS.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

Stability

当前可以公开给出的稳定性说明是:

  • 历史信号:项目早期一版基于 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.78.08.4
MYSQL_MINI_VER 上游 Percona 小版本号,例如 45-368-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

AI 协助维护

本次仓库重构是通过 Codex 直接在仓库工作区执行完成的。

后续如果继续做修改、验证和部署,建议先阅读 AGENTS.md,再配合合适的 AI Agent tools 直接对仓库执行操作。AGENTS.md 已经约定了项目目标、执行链路,以及哪些内容应该保留在公开仓库之外。

Codex 相关使用感谢 linux.do社区 的介绍及相关信息

文档索引

License

仓库中的脚本与文档采用 MIT

Percona ServerMySQL 本体及其 bundled 第三方组件仍遵循各自上游许可证与版权声明。

MySQL 的版权归属为 Oracle and/or its affiliatesPercona Server 则保留其上游项目自身的版权与许可证声明。

历史 README

旧版 README 保存在 README_old.md