# autotune_mysql **Repository Path**: shilei-wang/autotune_mysql ## Basic Information - **Project Name**: autotune_mysql - **Description**: No description available - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-23 - **Last Updated**: 2025-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **MySQL 自动化性能调优框架 (AutoTune-MySQL v3.0)** 这是一个基于 Python 的高级自动化框架,旨在通过**控制变量法 (One-Variable-at-A-Time)** 对 MySQL、Sysbench 和操作系统层面的参数进行系统性、高效的寻优,来找到在特定硬件和工作负载下的高性能配置。 ## **✨ 功能特性 (v3.0)** * **高效的优化算法**: 放弃了耗时巨大的全量网格搜索,采用**控制变量法**,极大地减少了测试组合数量,使调优在可接受的时间内完成。 * **Epoch-based 迭代寻优**: 支持多轮(Epoch)优化。每一轮都会在前一轮找到的最佳配置基础上,重新进行一次完整的控制变量寻优,有助于跳出局部最优解。 * **JSON 驱动配置**: 整个测试流程由一个清晰的 JSON 文件定义,包括负载类型、优化轮次、实例布局和待优化的参数空间。 * **多维度优化**: 同时对 MySQL、Sysbench 和 **操作系统** (内核参数、I/O 调度器等) 进行调优。 * **全自动化流程**: 从磁盘格式化、MySQL 部署到基准测试和结果分析,全程无需人工干预。 * **透明的优化过程**: 日志会清晰地展示基线性能、每个参数的测试过程以及何时找到了更优的配置。 * **智能报告与归档**: 自动生成最终报告,展示每个工作负载下的最佳 TPS 及其对应的完整参数集,并归档所有运行数据。 ## **⚙️ 新的优化策略: 控制变量法** 与之前遍历所有组合不同,v3.0 的工作方式如下: 1. **建立基线**: 使用每个参数的第一个值组合成一套“基线配置”,运行测试得到基线性能。 2. **逐个优化**: 保持其他参数不变,依次测试单个参数的所有候选值。 3. **贪心选择**: 如果某个值带来了性能提升,就立刻采纳它作为新的基线配置。 4. **迭代前进**: 在新的基线配置上,继续优化下一个参数。 5. **重复循环**: 完成所有参数的一轮优化后,可以开始新的 Epoch,在上一轮的基础上继续寻找更优解。 **优势**: * **速度快**: 测试次数从 A\*B\*C 减少到 1+(A-1)+(B-1)+(C-1),呈线性增长而非指数爆炸。 **潜在缺点**: * **局部最优**: 此方法可能会陷入“局部最优解”。例如,可能需要同时增大 A 和 B 才能获得性能提升,但单独增大 A 或 B 都会导致性能下降,这种组合该方法就无法发现。多轮(Epoch)寻优可以在一定程度上缓解此问题。 ## **🚀 如何运行** ### **1\. 创建你的测试计划 (.json 文件)** 这是唯一需要你手动编辑的文件。该文件的结构与之前版本兼容。 { "workloads": \["read\_write", "point\_select"\], "optimization\_epochs": 2, "mysql\_instances": { "count": 4, "numa\_nodes": "0,1,2,3", "devices": "/dev/nvme0n1,/dev/nvme1n1,/dev/nvme2n1,/dev/nvme3n1" }, "mysql\_base\_configs": \["mysql\_configs/base.cnf"\], "sysbench\_base\_args": "--table-size=10000000 \--tables=32 \--time=120", "optimization\_parameters": { "mysql": \[ {"name": "innodb\_buffer\_pool\_size", "values": \["48G", "50G", "52G"\]}, {"name": "innodb\_log\_file\_size", "values": \["2G", "4G"\]} \], "sysbench": \[ {"name": "threads", "values": \[128, 256, 512\]} \] } } ### **2\. 执行测试** **警告:此操作是毁灭性的!会格式化指定的磁盘。请务必在专用的测试服务器上运行!** \# 运行完整的优化流程 sudo python3 autotune.py my\_test\_plan.json \# 在实际运行前,使用 \--dry-run 查看测试计划 \# 它会告诉你总共需要进行多少次测试 sudo python3 autotune.py my\_test\_plan.json \--dry-run ### **3\. 查看结果** 测试完成后,在 optimization\_run\_YYYYMMDD\_HHMMSS 目录中查看: * final\_analysis\_report.txt: 最终分析报告,包含每个负载的最佳参数组合和 TPS。 * full\_run.log: 详细的运行日志,记录了每一步的优化决策过程。 **展望:更高级的优化** 对于需要突破“局部最优”的场景,未来的版本可以考虑集成贝叶斯优化 (Bayesian Optimization) 等更高级的算法。但对于大多数场景,控制变量法提供了一个在效率和效果之间取得极佳平衡的解决方案。