一. 优化介绍
在进行优化讲解之前,健哥郑重的和各位小伙伴说。本课程只是给大家提供一些优化方面的方向和思路,而具体业务场景的不同,使用的MySQL服务版本不同,都会使得优化方案的制定也不同。优化不存在按照某种方式去做就一定好用的绝对真理。
MySQL介绍
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。可以看到Google,Facebook,Twitter,百度,新浪,腾讯,淘宝,网易,久游等绝大多数互联网公司数据库都是用的MySQL数据库,甚至将其作为核心应用的数据库系统。
我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。
我们将这里进行一个较为全面的分析,让大家了解到MySQL的性能到底与哪些地方有关,以便于让大家寻找出其性能问题的根本原因,而尽可能清楚的知道该如何去优化自己的数据库。
优化可能带来的问题
● 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统!
● 优化手段有很大的风险,一定要意识到和预见到!
● 任何的技术可以解决一个问题,但必然存在带来一个问题的风险!
● 对于优化来说调优而带来的问题,控制在可接受的范围内才是有成果。
● 保持现状或出现更差的情况都是失败!
优化的需求
● 稳定性和业务可持续性,通常比性能更重要!
● 优化不可避免涉及到变更,变更就有风险!
● 优化使性能变好,维持和变差是等概率事件!
● 优化应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化!
优化由谁参与
在进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与。
优化的方向
在数据库优化上有两个主要方向:即安全与性能。
安全:数据安全性。
性能:数据的高性能访问。
本课程主要是在性能优化方向进行介绍。
优化的维度
从上图中可以看出,我们把数据库优化分为四个纬度:硬件,系统配置,数据库表结构,SQL及索引。
硬件: CPU、内存、存储、网络设备等。
系统配置: 服务器系统、数据库服务参数等。
数据库表结构: 高可用、分库分表、读写分离、存储引擎、表设计等。
SQL及索引: sql语句、索引使用等。
从优化成本进行考虑:硬件>系统配置>数据库表结构>SQL及索引。
从优化效果进行考虑:硬件<系统配置<数据库表结构<sql及索引。< p="">
数据库使用优化思路
健哥在这里尽可能的全面介绍数据库的调优思路,但是在多数时候,我们进行调优不需要进行这么全面、大范围的调优,一般情况下,我们进行数据库层面的优化就可以了,那我们该如何调优的呢?
应急调优的思路:
针对突然的业务办理卡顿,无法进行正常的业务处理!需要立马解决的场景!
show processlist(查看链接session状态)。
explain(分析查询计划),show index from table(分析索引)。
通过执行计划判断,索引问题(有没有、合不合理)或者语句本身问题。
show status like '%lock%'; # 查询锁状态。
SESSION_ID; # 杀掉有问题的session。
常规调优的思路:
针对业务周期性的卡顿,例如在每天10-11点业务特别慢,但是还能够使用,过了这段时间就好了。
查看slowlog,分析slowlog,分析出查询慢的语句。
按照一定优先级,进行一个一个的排查所有慢语句。
分析top sql,进行explain调试,查看语句执行时间。
调整索引或语句本身。