已开启
Percona Server 5.7.44-53 进行 CFGO 优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住 #92
liangwenjiao创建于 8月12日
8月12日 添加了label:sig/Compiler
openeuler-ci-bot
8月12日 评论:
8月12日 评论:
Welcome To openEuler Community
Hey @always_flipped_1 , thanks for your contribution to the community.
Bot Usage Manual
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands.
Contact Guide
If you have any questions, please contact the SIG: Compiler ,
and any of the maintainers: @SegFault, @alexanderbill, @cf-zhao, @chenzheng1030, @eastb233, @kuenking111_admin, @li-yancheng, @wangqiang95, @wd-gitcode ,
and any of the committers: @huang-xiaoquan, @huzife, @lin-4682, @xiongzhou4 .


8月12日 修改标题为 “Percona Server 5.7.44-53进行CFGO优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住”,原标题为“Percona Server 5.7.44-53进行CFGO优化时,PGO 插桩二进制执行 `SELECT 1` 时通过 TCP 卡住”
8月12日 修改标题为 “Percona Server 5.7.44-53进行CFGO优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住”,原标题为“Percona Server 5.7.44-53进行CFGO优化时,PGO 插桩二进制执行 `SELECT 1` 时通过 TCP 卡住”
8月12日 修改标题为 “Percona Server 5.7.44-53 进行 CFGO 优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住”,原标题为“Percona Server 5.7.44-53进行CFGO优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住”
8月12日 修改标题为 “Percona Server 5.7.44-53 进行 CFGO 优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住”,原标题为“Percona Server 5.7.44-53进行CFGO优化时,PGO 插桩二进制执行 SELECT 1 时通过 TCP 卡住”
rfwang07
8月19日 评论:
8月19日 评论:
- 已从CFGO中移除-fselective-scheduling https://gitcode.com/openeuler/gcc/pull/386
- 问题根因为send_eof() 这个虚调用的"投机去虚化守卫"被编译器改成了恒真(-fselective-scheduling错误优化),最终导致服务端执行的是一个空实现,结果集的终结 EOF 包永远没发出去,客户端一直等在读行的循环里。该问题是上游版本缺陷,待提交上游修复


问题概述
使用 openEuler GCC 12.3.1 2025.06 的 CFGO PGO 流程构建 Percona Server 5.7.44-53后,
03-build-cfgo-pgo阶段生成的 PGO 插桩(profile-generate)二进制在执行最小 SQL 请求时会卡住:mysql --protocol=TCP -e 'SELECT 1'客户端无法收到结果并一直等待,服务端进程仍然存在。该现象出现在用于采集 profile 的
mysqld.cfgo-pgo,不是后续05-build-cfgo-cspgo生成的 profile-use 二进制,也不是最终 BOLT 优化二进制。现象:
使用
mysqld.cfgo-pgo启动服务后,sysbench工作负载可以运行;但单独执行SELECT 1会卡住。问题不表现为服务启动失败,而是特定 SQL 请求的执行/响应路径异常。环境
操作系统和架构
编译器
CFGO 相关源码提交:
数据库版本
涉及的二进制和阶段
01/02SELECT 1正常03-build-cfgo-pgomysqld.cfgo-pgo-fcfgo-profile-generate=<profile-dir>SELECT 1卡住复现条件
在正常 MySQL 构建参数基础上,对 PGO generate 阶段注入:
启动
03-build-cfgo-pgo生成的mysqld.cfgo-pgo,然后通过 TCP 执行:mysql --protocol=TCP -e 'SELECT 1'实际结果是命令不返回、持续等待。建议使用超时包装以便自动化复现:
timeout 30s mysql --protocol=TCP -e 'SELECT 1'预期应在超时前输出:
结果对比
sysbenchmysql --protocol=TCP -e 'SELECT 1'mysqld.cfgo-pgo该问题可以被最小化到单条非 prepared statement 查询,不需要先执行复杂业务 workload。当前记录中尚未观察到对应的 SQL 错误码或崩溃信号,主要表现为服务端没有完成该请求的协议响应,客户端一直等待。