前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql性能优化全揭秘-庖丁解牛

Mysql性能优化全揭秘-庖丁解牛

作者头像
周辰晨
发布2020-01-19 19:13:00
4630
发布2020-01-19 19:13:00
举报

「为什么写」

一直想写数据库相关的文章,最直接的原因是数据库这块我们工作中每天都会用到,也是面试求职绕不开的话题,无论你是何种测试,优秀的数据库能力都会非常加分,最近我在总结数据库性能优化这块内容,性能这块就如庖丁解牛,首先你需要知道牛的全貌,筋脉布局,才能解之,今天这篇文章,也先从全局的角度来看数据库性能优化这件事。

「管中窥豹」

我们常常听到一句话,性能优化皆io,可以认为性能优化的核心思想就是减少io操作,之前和一同学聊天,发现不少人认为减少io就是减少磁盘操作,这其实很不全面,Cpu->Cache->Net->Mem->Disk, 每一步都是io,片面的认为磁盘,那你只是看到了牛腿,解不了全牛,下面我罗列的每一块硬件资源,在数据库层面都具备着相应的职能,成本以及开销,如下图a

图a

硬件资源的速度排序大体可以这么认为:CPU>Cache>内存>网络>硬盘,一直说的减少io操作本质是减少性能相对较差的io开销,在性能较好的资源上进行操作,通过图a知道,每一种优化法则都是解决其对应硬件的性能问题,当我们遇到性能问题时,不应该简单说通过加硬件资源去解决,这种解法一般叫做扬汤止沸,解决不了本质问题,而是应当通过我们的图谱或者叫知识体系提出性价比最高的解决方案


「常用的优化手段」

1.表设计(符合3NF)

NF的意思是范式,粗略而言数据库分为三个范式。即:第一范式 第二范式 第三范式。

第一范式的意思是:数据表中的字段都是不可分割的,原子的。第一范式是最简单的,也是必需的。

第二范式:在第一范式的基础上,数据表中各字段和主键之间完全依赖,不存在部分依赖。例如:数据表中存在字段<学号,姓名,分数>组成,其中<学号,姓名>组合在一起构成主键。如果学生的姓名不重复的情况下,那么就存在部分依赖。

第三范式:第二范式的基础上,不存在传递依赖。

所谓传递依赖是指:例如:数据表中存在字段<学号,姓名,分数>组成,其中<学号>是主键。如果学生的姓名不重复的情况下,那么就存在传递依赖。即:学号可以唯一确定姓名,而姓名是不重复的,所以,姓名也可以唯一确定分数。那么,学号决定分数就不唯一了,中间还有姓名可以确定。这就是所谓的传递依赖。

2.优化SQL语句

a.获取到慢sql,processlist,或者慢查询

b.explain 分析

c.索引分析,sql规范分析

d.业务层面逻辑分析

3.分表

a.垂直切分:将同一个表的内容,按照数据热度不同切分字段,按照3nf原则,划分为多个表。

分表理由:根据数据的活跃度进行分离,随着目前nosql的流行,竖直切分用的不多

b.水平切分:把大的表结构,横向切割为同样结构的不同表,表结构是完全一样, 按照数量级切割。

分表理由:根据数据量的规模来划分,保证单表的容量不会太大,保证单表的查询等处理能力。

4. 读写分离

a. 主库update,insert,delete

b. 从库select

5. 存储过程

a.批量运算,执行速度相对较高

b.减少网络开销

6.对mysql配置优化

a.查询排序时所能使用的缓冲区大小 read_buffer_size

b.查询缓存 query_cache_size

c. 最大连接数 max_connections

调优套路之思维导图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档