| 优化法则 | 性能提升效果 | 优化成本 |
| 减少数访问(减少磁盘访问) | 1~1000倍 | 低 |
| 返回更少数据(减少网络传输或磁盘访问) | 1~100倍 | 低 |
| 减少交互次数(减少网络传输) | 1~20倍 | 低 |
| 减少服务器CPU开销(减少CPU及内存开销) | 1~5倍 | 低 |
| 利用更多资源(增加CPU、内存等) | 1~10倍 | 高 |
1、优化MySQL的主要两个方向:硬件级别(Hardware Level)、数据库级别(Database Level)
2、硬件级别瓶颈包含几个方面
磁盘寻找:磁盘需要一段时间才能找到一段数据。对于现代磁盘来说,这种平均时间通常低于10ms,因此理论每秒100 次寻找。这一次用新的磁盘缓慢地改进,并且对于单个表是很难优化的。优化查找时间的方法是将数据分发到一个以上的磁盘上
磁盘读写:当磁盘处于正确位置时,需要读取或者写入数据使用现代磁盘,一个磁盘可以提供至少10到20Mb/s的吞吐量。这比磁盘寻找更容易优化,可以从多个磁盘并行读取。
CPU:当数据在主存储器中时,我们必须处理它以得到结果。与内存量相比,具有大数据库量的表时最常见的限制因素。但是对于小表来说,速度通常不是问题。
存储带宽:当CPU需要比CPU缓存中更多的数据时,主存储器带宽成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但也是一个需要注意的点
3、数据库级别:导致数据库应用最高效的因素是它的基本设计
结构是否正确:特别的是列是否具有正确的类型,和表中列的个数是否正确。例如:对于执行频繁更新的应用通常设计更多表,每个表的列并不多。而对于需要进行大量分析的应用通常设计更少的表,而每个表的列更多一些。
正确的设置索引达到查询高效:需要考虑的是什么SQL会导致索引无效,什么情况会让查询效率更高
对于不同情况选择不同的存储引擎:选择不同的存储引擎对性能和可伸缩性具有较大的影响
每张表是否具有适当的行格式:主要取决于适当的存储引擎。压缩表可以占用耕地的磁盘空间和更少的I/O操作。压缩表适用于innodb和myisam存储引擎。
应用程序是否使用适当的锁策略:在具有高并发、分布式应用程序中,选择适当的锁策略以保证数据的共享性和特定的情况下独占数据。innoDB存储引擎在不需要参与下能处理大部分锁问题,允许数据库实现更好的并发性,减少代码调优量。
所有缓存区域使用的大小是否都正确:配置的原则是缓存区域大到足以容纳所有频繁访问的数据,但又不能太大,否则导致过量占用物理内存而导致分页。一半情况下需要配置innoDB的缓冲池、myisam密钥缓存和MySQL的查询缓存。
4、优化可能带来的问题
优化不总是对于一个单纯的环境进行,还可能是一个复杂的已投产的系统。
优化手段本来就有很大的风险,只不过没能力意识到和预见到。
任何的技术可以解决一个问题,但必然存在带来一个问题的风险
对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果。
结论:保持现状或出现更差的情况都是失败
5、优化的需求
稳定性和业务可持续性,通常比性能更重要
优化不可避免涉及到变更,变更就有风险
优化使性能变好,维持和变差是等概率事件
切记优化,应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化
6、优化由谁参与
进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与
7、优化的顺序
优化选择:
优化成本:硬件>系统配置>数据库表结构>SQL及索引
优化效果:硬件<系统配置<数据库表结构<SQL及索引
8、常见优化工具
检查问题常用工具:
mysqladmin #mysql客户端,可进行管理操作
mysqlshow #功能强大的查看shell命令
show [session | global] variables #查看数据库的参数信息
show [session | global] status #查看数据库的状态信息
information_schema #获取元数据的方法¥
show engine innodb status innodb #引擎的所有状态
show processlist #查看当前所有连接session状态
explain #获取查询语句的执行计划
show index #查看表的索引信息
slow-log #记录慢查询语句
mysqldumpslow #分析slowlog 文件
不常用但好用的工具:
zabbix #监控主机、系统、数据库(部署zabbix监控平台)
pt-query-digest #分析慢日志
mysqlslap #分析慢日志
sysbench #压力测试工具
mysql profiling #统计数据库整体状态工具
performance schema mysql #性能状态统计的数据
workbench #管理、备份、监控、分析、优化工具(比较废资源)




