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