DB tuning问题
传统方法:DBA把生产库copy到另外一个机器,回放sql,根据metrics尝试调节某一个参数看效果,再尝试多个
- 数据库的调优参数过多,通常都是数百个,而且新的版本会增加更多参数
- 同一个db的参数之间是互相依赖的
- 依赖于运行环境
例如,增加innobuffer,在某些条件下是正回馈,但如果物理机内存开始swap,增加它会起副作用 - 跟业务数据有关
OtterTune解决办法
通过controller收集数据库的参数和负载metrics以及hardware profile,定期向中央报告。
分析系统从中央取得原始数据,进行分析,提供参数配置建议,生效后,持续分析比较,找出合适的参数配置
target workload
- latency
- throughput
Controller
就是agent,定期把通过配置文件配置的数据库实例的paramters & metrics通过HTTP POST以JSON格式上传
同时,它是trial and error的执行者,对参数不断的尝试取得样本数据,它必须有修改数据库参数权限,甚至restart db
PostgreSQL
- SELECT version()
- parameters
SHOW ALL - metrics
- select * from pg_stat_archiver/pg_stat_bgwriter/pg_stat_database/pg_statio_user_indexes/…
分析
- 通过factor analysis(FA)对收集来的metrics进行降维
例如,read_in_bytes/read_in_kbytes - 通过k-means对metrics进行聚类
- 通过Lasso线性回归,来发现哪些参数对target workload有重大影响
- workload mapping
通过Euclidean计算目标workload与历史采样数据的相似度,找出最相似的 - 推荐配置
通过GaussianProcess(GP)回归进行训练 - controller接受推荐的配置apply on DB,并收集新的数据
References
http://db.cs.cmu.edu/papers/2017/p1009-van-aken.pdf
https://github.com/cmu-db/ottertune