美文网首页
2021-08-09 MySQL性能优化总结

2021-08-09 MySQL性能优化总结

作者: 竹blue | 来源:发表于2021-08-10 12:55 被阅读0次

MySQL性能优化层面

MySQL性能优化.png

SQL和索引层面优化

Explain

Explain结构.png
Explain-Type-Case.png
Explain-Type-Case.png
Explain-Extra.png
小结
  • 嵌套查询一般是从外到内进行;小表驱动大表 -- 从temp大小考虑。

  • eq_ref : 关联查询

  • 索引条件下推、覆盖索引 -- 可能会出现possible_keys = null, 但是key != null 的情况。

  • 注意:如果业务不允许存在空值,库表设计应该也不能为空值,因为数据库会专门为空值增加一个存储空间,造成资源的浪费。

  • row -- 预估的行数,可以查看是否使用到了索引。

表结构和存储引擎的优化

表结构
  • 表拆分:表数据(按照月份拆分),表结构(按照属性拆分)


    表拆分.png
  • 表设计--字段设计,提供能够为一个列存储全部数据的最小的存储空间即可。

  • 表设计--字符类型,变长情况使用varchar,固定长度使用--char

  • 表设计--非空,非空字段尽量定义成NOT NULL提供默认值(索引设置层面考虑)。

存储引擎的选择
  • 查询插入操作多的业务表——MyISAM

  • 临时数据——Memeroy

  • 大并发更新多的表——InnoDB

架构优化

缓存
集群、主从复制
主从复制原理.png
读写分离.png
分库分表

基于业务的垂直分库,基于业务、时间的水平分库


垂直分库.png
水平分库分表.png

操作系统、MySQL配置参数

服务端:增加连接或者回收空闲链接。

MySQL参数-连接.png

硬件

如:提升内存

其他层面:

  • 服务器降级

    服务降级.png
  • 分流——双11从原来的11.11 延伸到11.01~11.11

  • 引入MQ 削峰

案例:MySQL性能下降,如何解决?

  1. 服务器重启,

  2. 然后通过命令观察一下服务状态,比如锁、连接、事务是否正常


    Mysql状态查看命令.png
show full prosslist -- 查看线程链接情况

show status -- 查看服务端的状态值

show engine innodb status -- 查看InnoDB存储引擎的状态值
  1. 查看是否存在慢查询语句,

  2. 如果存在,通过Explain 分析执行计划,查看如何优化。

  3. 如果还是效果不好,看看字段设计或者库表设计是否合理,是否可以通过读写分类分库分表来优化。

  4. 如果还是不好,看看是否可以通过业务层来综合优化。

案例:慢SQL问题?

  1. 开启慢SQL查询日志——系统默认执行时间 > 10s的SQL为慢SQL
慢日志配置查看命令.png
慢SQL配置参数展示.png

MySQL慢查询日志过滤筛选命令:

MySQL慢查询日志过滤筛选命令.png
  1. 分析查询基本情况

  2. 找到慢的原因

    1. 查看执行计划——Explain
  3. 对症下药

    1. 创建索引或者联合索引

    2. SQL语句优化

      SQL语句优化.png
  1. 表结构优化(冗余、拆分、Not Null)、架构优化(缓存、读写分离、分库分表)

  2. 业务层面优化,如检查必要条件十分必要。

相关文章

网友评论

      本文标题:2021-08-09 MySQL性能优化总结

      本文链接:https://www.haomeiwen.com/subject/quvtbltx.html