PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 版本历史 全部 5.x 稳定版本
    • 插件市场 社区插件
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 34 篇文章
    • MySQL 14 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 4 篇文章
    • ProxySQL 3 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • MySQL 优化中心 Markdown 索引、指标、参数、故障
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文 🇸🇦 AR العربية
← 返回博客

ProxySQL 2.7 → 3.0:PmaControl 缓存审计速度提升约 4 倍

发布于 2026年9月27日 作者 Aurélien LEQUOY
pmacontrol proxysql benchmark mariadb mysql observability
分享 X LinkedIn Facebook Email PDF
ProxySQL 2.7 → 3.0:PmaControl 缓存审计速度提升约 4 倍

在 PmaControl 基准测试中,我们观察到了一项明显改进:同一项完整缓存检查,在受测 ProxySQL 2.7.3 和 3.0.5 构建版本上的平均耗时分别为 8.112 毫秒和 2.015 毫秒。这意味着耗时减少 75.16%,平均时间缩短至原来的约 1/4.03。

本文公开测量数据、指标定义、查询语句和测试方法,帮助读者准确理解结果。受测任务是 PmaControl 通过 ProxySQL Admin 接口执行的缓存有效性检查。

相同工作量下的结果

指标 ProxySQL 2.7.3 ProxySQL 3.0.5 耗时降幅
平均值, ms/audit 8.112204 2.014760 75.16 %
批次平均值的中位数, ms/audit 7.895812 2.053810 73.99 %
批次平均值的最大值, ms/audit 11.914402 2.919234 75.50 %
PHP 已分配内存峰值,MiB 4 4 不变

除内存指标外,表中的时间单位均为 ms/audit,即每次审计的毫秒数。中位数和最大值取自 15 个批次的平均值,每批包含 10 次审计。因此,最大值既不是单次调用的最坏延迟,也不是延迟百分位数。数据文件保留原始精度,信息图中的时间四舍五入至小数点后三位。

4 MiB 的 PHP 峰值表示分配给 PHP 进程的内存,不是 ProxySQL 服务端的内存使用量。

PmaControl 基准测试:ProxySQL 2.7.3 为 8.112 ms/audit,3.0.5 为 2.015 ms/audit,附测试方法和范围

“ms/audit”的含义

这里的一次审计是指完整调用一次 QueryCacheEffectiveness::run(),并不代表对服务器的所有检查。它执行两条只读 SELECT:第一条读取已启用的缓存规则及其匹配计数,第二条读取缓存计数器和配置大小。测试数据分别返回一行和七行。

计时器覆盖整个 PHP 检查,包括原生 SQL 执行、loopback 通信、结果获取以及 PmaControl 的处理逻辑。建立初始连接、启动 PHP 进程、HTTP 和界面渲染均在计时范围之外。这些数据是客户端观察到的耗时,没有单独分离 ProxySQL 内部执行时间。

下面给出两条查询,为便于阅读调整了排版。它们在两个版本上的逻辑完全相同。

SELECT r.rule_id, r.cache_ttl, r.digest,
       r.match_digest, r.match_pattern,
       COALESCE(h.hits, 0) AS hits
FROM runtime_mysql_query_rules r
LEFT JOIN stats_mysql_query_rules h
       ON h.rule_id = r.rule_id
WHERE r.active = 1 AND r.cache_ttl > 0
ORDER BY r.rule_id;
SELECT Variable_Name AS name, Variable_Value AS value
FROM stats_mysql_global
WHERE Variable_Name IN (
    'Query_Cache_count_GET', 'Query_Cache_count_GET_OK',
    'Query_Cache_count_SET', 'Query_Cache_Memory_bytes',
    'Query_Cache_Entries', 'Query_Cache_Purged'
)
UNION ALL
SELECT variable_name, variable_value
FROM global_variables
WHERE variable_name = 'mysql-query_cache_size_MB';

stats_mysql_query_rules.hits 统计规则匹配次数,而不是归属于该规则的缓存命中次数。缓存计数器是累计值,不能单独用于推断近期命中率。从 MAIN 读取的 mysql-query_cache_size_MB 是配置的清理目标,并非硬性上限;本检查不验证其 runtime 值。

基准测试方法

原始基准测试使用运行 Ubuntu 24.04.4 LTS 的共享测试虚拟机,配置为 2 vCPU、4 GiB RAM 和 PHP 8.4.26。通过 loopback 连接以下原生 ProxySQL 构建版本:

  • 2.7 系列:2.7.3-12-g50b7f85;
  • 3.0 系列:3.0.5-60-g7e9e009。

每个版本公布的数据包含 15 个批次,每批 10 次计时审计,每批之前执行 3 次预热调用:即每个版本 150 次完整审计,共 300 次审计和 600 条 SELECT。PHP 检查代码与 SQL 字符串相同;每批及每次调用均检查代码哈希和返回行数。

原始实验采用 15 对 AB/BA,交替运行旧版与修正后的 PmaControl 实现,每个实现使用独立 PHP 进程。本文仅选取修正后的实现。在每个进程内,先测试 ProxySQL 2.7.3,再测试 3.0.5:ProxySQL 版本顺序没有交替。包含旧实现的完整实验共有 600 次调用和 900 条 SELECT,这些数字不是本文版本对比的样本量。

为什么只比较完整检查

该基准测试原本用于验证一个功能修复:一条合法规则的带符号标识符为 rule_id=-1,TTL 为 5,000 毫秒,之前会导致检查在第一次读取后提前结束。检查错误地报告统计信息不可用,第二条查询从未执行。

将这种不完整结果与修正后的检查比较,会造成工作量不一致。因此我们在两个 ProxySQL 版本上使用完全相同的修正后检查代码,执行两次读取并获得完整观测。本文描述的是该场景下 ProxySQL 构建版本之间的差异,不把性能提升归因于 PmaControl 的校验修复。我们复核了已有测量数据,没有为本文重新运行基准测试。

这些改进能够说明什么

在这个环境中,受测 3.0 构建的平均值、批次平均值的中位数及最大值均更低,PHP 已分配内存峰值保持不变。这是监控任务中可以测量到的改进。

结果只针对共享虚拟机、小规模结果集和这一具体检查,不能证明应用查询吞吐量、前端路由延迟或高并发场景下也有相同提升。测试没有分离服务端 prepare/step/copy/finalize 各阶段,不证明 SQL 耗时低于 1 毫秒,也不评估生产容量或数据持久性。这里没有建立置信区间,版本测试顺序也是固定的。

在上述范围内,完整缓存检查的平均耗时约为原来的四分之一。ProxySQL 的这项改进值得肯定!

重新计算结果

公开数据包含选取的 30 个批次、300 次单独调用的耗时、结果行数和测试方法元数据。内部路径和诊断消息已删除,测量值保持不变。Python 脚本仅使用标准库,可重新计算表格,但不会重新运行基准测试。

耗时降幅计算公式为 100 × (1 − time_3.0 / time_2.7),比值为 time_2.7 / time_3.0。所有批次大小相同。下面的哈希标识实际加载的检查代码,commit 对应包含该实现的 PR 修订版本。

curl -fsSLO https://pmacontrol.com/downloads/proxysql-2.7-vs-3.0/benchmark-data.json
curl -fsSLO https://pmacontrol.com/downloads/proxysql-2.7-vs-3.0/analyze.py
python3 analyze.py benchmark-data.json
PmaControl revision:
b4e7b4c6ca72cf27077ddbdb1f2c89af05800b5a
QueryCacheEffectiveness helper SHA-256:
c47a169935f665259554bd0fbaa85e90af9cbcd3983bf7ad3548e2caaf63d4dc

图表、分享和来源

  • 完整 PNG 信息图,1600 × 2000
  • 包含所有元素的可编辑 SVG 源文件
  • JSON 基准测试数据
  • Python 结果重算脚本
  • 英文 LinkedIn 帖子
  • 图表及生成脚本压缩包

为方便分享,图表使用英文;本文完整说明了图中的数据和解释。页面上的 PDF 按钮也可导出包含图片的文章。

原始工作记录:PmaControl PR #6389 和传播内容 issue #6390。这些 Forgejo 链接需要仓库访问权限,上述下载文件则公开可用。

分享 X LinkedIn Facebook Email PDF
← 返回博客

评论 (0)

暂无评论。

发表评论

使用 Ctrl+V(Mac 上为 Cmd+V)粘贴截图或选择图片。

最多 3 张图片,每张不超过 2 MiB。

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept