官方文档的第八章蛀牙讲述的mysql的性能优化。优化涉及到os或者server自身的参数配置,调优以及性能压测;维度可能是个别sql的优化,整个应用,单实例,多实例集群,可能是事先的优化,也有可能是问题发生后的对配置或者代码问题的troubleshoot。也能通过优化cpu和内存的用法来提升性能。
数据库性能影响的决定因素:比如表、查询、配置
软件引起的硬件层面cpu和io操作尽量最小化
源码调优,开发存储引擎插件
1.数据库层面的优化
- 要让数据库更快的,最重要的基本的数据库设计?
表结构是否恰当,尤其是字段的数据类型是否正确(最优),每个表是否设计合适的列,比如:更新频繁的表一般是拆分成多个表更新,有大数据量分析的表一般是要进行反范式设计的单表查询
- 有使查询有效的正确创建的索引吗?
- 表的存储引擎选择是否正确?
- 表使用的行格式合适吗?特别地,compressed格式能够节省磁盘空间减少读写带来的磁盘io
- 应用使用的锁策略合适吗?
- 缓存的设置大小合适吗?
2.硬件层面的优化
不管是什么数据库,当数据库越来越忙的时候,最终都难免会达到硬件的瓶颈,我们必须评估当前系统的容量瓶颈,是否能够通过系统调优或者配置调整来避免系统的瓶颈,或者说是需要扩充硬件资源来达到目的
- 磁盘扫描,机械硬盘低于10ms,优化手段,分布式分散磁盘io
- 磁盘读写,带宽大于10–20MB/s,多块磁盘并行读写
- cpu时钟周期
- 内存带宽
Balancing Portability and Performance 略
8.1 Optimization Overview