独一无二的「MySQL调优金字塔」相信也许你拥有了它,你就很可能拥有了全世界。

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 独一无二的「MySQL调优金字塔」相信也许你拥有了它,你就很可能拥有了全世界。

开发俏皮话


让我996不算啥,我只怕测试也996给我提bug!




笔者瞩望


你好,无论我们在现实生活中是否相识,在InfoQ的世界里终会快乐相遇,在此提前预祝国庆节快乐,并且在属于我们的“1024”那天不在加班,早点回家陪陪老婆和孩子啊。




技术金字塔


本篇文章会按照自上而下以及自下而上的两种方向去“游览”【MySQL技术金字塔】,两个方向分别是从成本出发的(潜台词就是便宜越好,照顾公司成本哦!),本章内容,可能有点多,希望大家慢慢消化,实在不行来片“吗丁啉”,哈哈,开玩笑了!




技术梗概


主要技术分布为6大部分,如下图金子图所示:

image.png



研发成本角度


从软件的【研发成本】的角度而言:伴随着优化的方向,从金字塔顶部像金字塔底部的方向进行过度,伴随着高度越来越低,成本会越来越低,这个方向其实是非常考验技术人员与项目管理者的能力的,但是它确实,老板对象看到的,哈哈。


image.png


技术可行性和效果角度


从软件的【技术可行性和效果】的角度而言:伴随着优化的方向,从金字塔低部像金字塔顶部的方向进行过度,伴随着高度越来越高,成本会越来越高,耗费的财力和人力也会相对的有所降低,但是如果多花钱,老板肯定不愿意,比如,请一些行业大牛或者一些牛掰的服务器等,可以看出来正好与上面的方向相反。

image.png



总结一下,以上这两点的方针,遵循着研发成本的越来越低+效果方案越来越高,那么我们就划分出一个公式,作为系统服务调优方法论,我们就按照金字塔层面,进行自下而上进行调优!我们接下来就来按照这个方向进行分析。




调优白皮书


业务需求和业务架构


产品中单要支援,需求出装要全面。——王者荣耀之产品篇


调整一下合适的需求,其实是一个很不错的方案,所以如果可以从根本上去出发,进行调整需求是一个很有效果的方案哦!并且对一些不合理的需求说不!在做架构设计的时候,应该充分考虑业务实际场景,考虑好数据库的选项和引入一些其他的方案是非常重要的,例如NoSQL或者NewSQL等。所以,调整好一个一个系统架构是一个非常不错的方案。


  • 尽量将请求拦截在系统上游传统业务系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。
  • 读多写少的常用多使用缓存这是一个典型的读多写少的应用场景,非常适合使用缓存。




SQL技术调优


根据业务需求,不单纯的写好SQL语句,还要对SQL语句进行调优,使得其性能变得最佳化。



调优的思路


调优主要有三个部分组成:发现问题、分析问题和解决问题。


发现问题(慢SQL的优化和分析)


发现慢SQL以及查询日志


查询慢SQL的日志是MySQL内置的一个功能,可以记录执行时间超过我们配置阈值的SQL语句。


参数与默认值:

image.png



使用方式-修改MySQL服务配置


一般我们就设置“老三样”即可!


  1. 修改我们安装后的配置文件my.cnf,在[mysqld]段落中加入以上参数配置:
[mysqld]
log_output='FILE,TABLE';
slow_query_log=ON // 代表开启慢sql参数进行开启
long_query_time=0.001 //查询时间(秒)
复制代码


  1. 之后进行重启服务
service mysqld restart
复制代码




使用方式-修改全局服务配置


set global log_output='TABLE,FILE';
set global slow_query_log = 'NO';
set long_query_time = 0.001;
复制代码


这种方式,不需要重启就可以生效,但是当服务器重启的时候,又会重新丢失配置。


以上的配置可以将慢查询SQL记录到mysql数据库中的slow_log表中以及对应的slow_sql的文件中去。




分析慢SQ的查询日志


查询slow_log表,当根据上面的设置,当log_output设置为TABLE的时候,就会将mysql的慢查询日志记录到mysql.slow_log表中去,我们可以采用select * from mysql.slow_log去进行查询,可以根据此方面进行分析和统计sql的执行性能。




分析慢SQL日志文件


当log_output设置为FILE的时候,因为文件过大,不方便查看,所以可以采用专门的工具进行分析,这里主要介绍原生的mysqldumpslow工具进行分析,如下图所示:


mysqldumpslow --help:

image.png

使用案例:


  1. 如果要查询出返回结果行数最多的20条SQL:
mysqldumpslow -s  r -t 20 /path/show.log
复制代码


  1. 根据查询时间进行排序,并且带有left join的20条SQL:
mysqldumpslow -s  t  -t  -g "left join"  /path/show.log
复制代码


当然还有其他相关的MySQL慢查询分析日志工具,例如mysql profiles或者pt-query-digest也可以专门进行分析。有兴趣的小伙伴可以搜搜看。



执行计划分析慢SQL


explain关键字进行执行慢SQL语句,进行指标分析:image.png



案例分析


最简单的案例就是:


explain  sql语句


image.png



id字段


它表示代表着语句SQL中每一个部分原子查询(维护)操作的标识单位,如果explain中的有多个id对应的数据项,那么切记一定要按照:倒叙进行执行,也就是说:


  • 数字越大的,越先执行分析
  • 数字编号相同,从上到下进行分析



select_type字段


查询类型,如下几组值:

image.png










相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
69 1
|
2月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
531 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
14天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
45 0
|
2月前
|
存储 缓存 关系型数据库
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
|
3月前
|
关系型数据库 MySQL Java
面试官:说说MySQL调优?
面试官:说说MySQL调优?
85 5
面试官:说说MySQL调优?
|
3月前
|
SQL 关系型数据库 MySQL
Mysql原理与调优-事务与MVCC
【8月更文挑战第19天】
|
3月前
|
存储 SQL 关系型数据库
你真的会MySQL调优吗?
你真的会MySQL调优吗?
34 0
|
4月前
|
SQL 关系型数据库 MySQL
mysql性能调优:EXPLAIN命令21
【7月更文挑战第21天】掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
58 1
|
3月前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
79 0
|
3月前
|
SQL 关系型数据库 MySQL
(十六)MySQL调优篇:单机数据库如何在高并发场景下健步如飞?
在当前的IT开发行业中,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代中一个炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题。而MySQL作为整个系统的后方大本营,由于是基于磁盘的原因,性能瓶颈往往也会随着流量增大而凸显出来。
418 0