查看: 107|回复: 1

大厂程序员必备技能:Mysql 性能优化

[复制链接]

4

主题

10

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2022-11-30 15:41:14 | 显示全部楼层 |阅读模式
前言

在日常的项目开发过程中,大部分的业务都会涉及到数据的存储和读取,而 mysql 作为开发过程中常用的存储设备,了解清楚才能进行更好的开展业务。今天就从 mysql 性能优化作为切入点,了解一下 mysql 新能优化的主要关注点,在日常的工作以及面试过程中都可以展示自己扎实的基础知识。  mysql 性能优化的关注点  其实,mysql 性能优化不是简单的知道和使用 explain 和 show profile 就天下无敌了,这两个只是重要的方面,何况作为资深的 CRUD 工程师还未必经常使用,任何的知识都是 了解->熟悉->精通,当真正的了解原理或者系统的掌握才是真正的悟道。接下来开始进入正题,mysql 又能优化主要为 4 个方面:

  • 1 硬件资源和操作系统方面的优化
  • 2 架构设计方面的优化
  • 3 mysql 服务配置项的优化
  • 4 sql 执行层面的优化
硬件和操作系统方面的优化  硬件和操作系统就是指 mysql 服务所运行的服务器硬件资源情况,影响 mysql 性能的主要因素分为 cpu 、内存大小、磁盘读写速度、网络带宽,硬件是指操作系统的网络配置和系统文件句柄数设置(linux 系统中,一切皆文件,了解过 ES 搭建的同学都知道,ES 的搭建就需要修改系统最大打开的文件数) ,这部分的优化一般由运维工程师和 DBA 联合完成,在项目开发伊始,可以根据业务需要承载的数据量和 TPS 要求根据经验,考虑后续的业务扩展性,选择与业务相适配的 mysql 服务。  架构设计方面的优化  mysql 是一个磁盘 io 访问频繁的关系型数据库,在高并发和高性能的应用场景中会承受巨大的压力,可以采取以下措施来应对:

  • 1 搭建 mysql 主从集群,单个 mysql 服务一旦宕机,将会导致依赖 mysql 服务的应用无法响应导致服务不可用,可以采用采用主从集群或者主主集群避免单点故障,保障 mysql 服务的高可用性。
  • 2 读写分离设计,在读多写少的场景中,可以采用读写分离的方案避免读写冲突导致的性能问题。
  • 3 采用分库分表的设计。通过分库可以降低单个 mysql 服务器的 io 压力,通过分表的机制可以降低单表数据量,提高 sql 的查询效率。
  • 4 热点数据引入 Nosql。引入 Redis 或者 MongoDB 等非关系型数据库,可以缓解 mysql 的访问压力,提升数据的检索性能。
mysql 程序配置优化。  mysql 配置文件的优化,一般通过 mysql 配置文件 my.cnf 来设置。配置项一般包括:  

  • mysql 的最大连接数 max_connections (注意这里说的不是项目中设置的数据库连接池的连接数)
  • 最大的传输包(max_allowed_packet = 16M)
  • 开启 bin log(默认不开启,主要用在 mysql 同步的场景中)
  • general log(通用日志记录 sql 的执行记录)来记录日志
  • 还有就是缓冲区(buffer pool), 包括: 关联查询缓冲区 join_buffer_size=128M, 读数据缓冲区 read_buffer_size=16M,随机读缓冲区 read_rnd_buffer_size=32M ,排序数据缓冲区 sort_buffer_size=32M, innodb 数据缓冲区 innodb_buffer_pool_size=4G。
这些参数的配置一般和服务器的资源和使用场景有关,需要根据实际情况来设置。配置项的修改需要关注两个点,一是配置的作用范围,分为会话级别和全局范围,全局参数对已经存在的会话不会生效,会话参数设置只在当前会话生效,会话结束则配置失效,全局类的配置放在默认的配置文件中,否则服务重启将会失效。第二是否支持热加载  sql 执行层面优化  sql 执行层面优化的要点如下:

  • 1 慢 sql 查询分析,通过慢 sql 查询日志和慢 sql 查询分析工具来定位有问题的 sql 列表
  • 2 执行计划。通过 explain 关键字 + 慢 sql 查看当前 sql 的执行计划,需要重点关注 select_type、type、 key、 rows、 filterd、 possible_keys 来分析 sql 慢的原因.
  • 3 使用 show profile 工具来分析,该工具是 mysql 提供的分析当前会话中 sql 语句资源消耗情况的工具,可以用于 sql 调优的测量,当前会话中默认是关闭的状态,需要根据情况打开,默认保存最近 15 次的分析结果,针对慢 sql 可以通过 show profile 工具来进行详细分析,得到整个过程中所以资源的开销情况,比如 io 开销 cpu 开销和内存开销等情况
最终总结

  • 1 sql 的查询一定要根据索引来进行数据扫描
  • 2 避免查询列上使用函数运算或者运算符,避免索引失效
  • 3 where 条件语句中 like % 好尽量放置在右边
  • 4 使用索引扫描,联合索引的列从左往右,命中的越多越好
  • 5 sql 语句的排序字段尽量是索引字段,否则会开辟空间进行结果排序
  • 6 查询语句避免使用 *号,使用需要查询的列信息即可。
  • 7 关联查询或者子查询使用小结果集驱动大结果集。
看完这篇文章大家对MySQL性能优化是不是有了一个大概的了解,为了让大家更好的学习MySQL我为大家准备了一份新年大礼“百万级华为大佬珍藏的MySQL笔记”,这份笔记是我从华为的好哥们那里获取,从Mysql基础到优化再到架构这笔记统统都有,下面我会截图展示给大家这份资料,觉得这份资料不错需要的朋友点击“传送门”即可免费获取
  Part1:MySQL的学习思维脑图(手绘版)  


Part2:MySQL基础部分(核心篇) ①认识MySQL和SQL入门(MySQL的用途+示例数据库+数据库基本术语+MySQL+与客户程序MySQL交互的技巧)  


②使用SQL管理数据(MySQL服务器的SQL模式+MySQL标识符语法和命名规则+SQL语句中的字母大小写问题+字符集支持等)  


③数据类型(数据值的类别+MySQL的数据类型+MySQL如何处理非法数据值+序列+表达式求值和类型转换+数据类型的选用)  


④存储程序(复合语句和语句分隔符+存储函数和存储过程+触发器+事件+存储程序和视图的安全性)  


⑤查询优化(使用索引+MySQL的查询优化程序+为提高查询效率而挑选数据类型+有效加载数据+调度和锁定问题+系统管理员所完成的优化)  


Part3:MySQL提升技术(快速进阶) ①MySQL的编程接口(MySQL程序设计)  


②MySQL的系统管理(MySQL系统管理简介+MySQL的数据目录+MySQL数据库系统的日常管理+访问控件和安全+MySQL数据库的维护、备份和复制)  


免费下载“百万级”「MySQL笔记」很简单,点击”传送门“即可
Part4:MySQL性能优化(优化猛料) ①SQL优化(优化简介+SQL语句优化的基本思路)  


②SQL优化技能(利用Explain分析查询语句+利用Profiling分析查询语句+合理地使用索引+不同类型SQL语句优化方法+优化数据库结构+分析表、检查表和优化表)  


③查询性能优化(为什么查询速度会慢?+慢查询基础:优化数据访问+重构查询的方式+查询执行的基础+MySQL查询优化器的局限性+查询优化器的提示+优化特定类型的查询)  


④MySQL性能优化的21个最佳实践




Part4:MySQL架构技术(企业中MySQL的高可用架构) ①什么是MySQL高可用?


②MySQL主从复制(MySQL主从架构设计+配置环境+服务器的安装配置+LVS的安装配置)  


③MySQL+DRBD+HA(什么是DRBD?+MySQL+DRBD+HA架构设计+配置环境+安装配置Heartbeat+安装配置DRBD)  


④Lvs+Keepalived+MySQL单点写入主主同步方案(配置环境+Lvs+Keepalived的安装,配置+Master和Backup的启动)  


⑤MMM高可用MySQL方案(MMM的架构+配置环境+MMM的安装+Monitor服务器的配置+各个数据库服务器的配置+MMM的管理)  


总结
未来究竟会是什么样?我没是没有办法预言的,可能你说大数据是潮流,人工智能是趋势,但十年后究竟是什么样,我们谁也不知道。都说30岁后的程序员就要陷入焦虑,但无论你处于什么行业,年轻的几年里不抓住,过了30岁也一样的会焦虑。 所以,如果你不做探索未来的人,那么就要做好站稳在金字塔尖的人,这本百万级的MySQL笔记或许可以帮助你离梦想更近一步。免费下载“百万级”「MySQL笔记」很简单,点击”传送门“即可
回复

使用道具 举报

2

主题

12

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2025-3-23 09:40:43 | 显示全部楼层
专业抢沙发的!哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表