MySQL优化

2022-06-08  本文已影响0人  极速魔法

MySQL架构

-- 错误日志
show variables like ‘%log_error%’;

-- 通用查询日志 
show variables like ‘%general%’;

-- 二进制日志是否开启
show variables like ‘%log_bin%’;

-- 慢查询是否开启
show variables like ‘%slow_query%’;

SQL运行机制

  1. 建立连接 。 MySQL客户端与服务端通信 半双工(某一时刻要么发送数据,要么接收数据,不能同时 )。有一个线程状态标识连接的信息
    show processlist
  2. 查询缓存,缓存查询的结果和sql语句(包括参数)
  3. 解析
  4. 优化,生成执行计划
  5. 查询执行引擎

存储引擎

InnoDB 和MyISAM对比

InnoDB内存结构

Buffer Pool、Change Buffer、Adaptive Hash Index和Log Buffer四大组件。

InnoDB数据文件

表空间—>对应多个ibd数据文件-->Segment(段)-->64个Extent(区)-->Page(页,大小16k)—>Row(行)

Redo Log

Redo Log:指事务中修改的任何数据,将最新的数据备份存储的位置(Redo Log),被称为重做 日志。
在事务提交时会将产生 Redo Log写入Log Buffer,并不是随着事务的提交就立刻写入磁盘文件。等事务操作的脏页写入 到磁盘之后,Redo Log 的使命也就完成了,Redo Log占用的空间就可以重用(被覆盖写入)

Redo Log和BinLog区别

逻辑日志物理日志

索引原理

存储引擎用于快速查找记录的一种数据结构

存储结构划分索引

B+ Tree结构

聚簇索引

一种数据存储方式,InnoDB的聚簇索引按照主键顺序构建 B+ Tree,叶子节点就是行记录,通常主键索引就是聚簇索引

辅助索引

根据索引列构建 B+ Tree,叶子节点只存放了索引列和主键信息

非聚簇索引

索引文件和数据分开, B+ Tree 叶子节点存放主键

Explain type分析

type:查询数据采用的方式

回表查询

通过索引查询主键值,再去聚簇索引查询记录信息

覆盖索引

一棵索引数上就能获取SQL查询所需的字段,无需回表

分页查询机制

每一次都从第一条记录开始扫描,越往后查询越慢,查询数据越多越慢

MySQL 事务

ACID

MVCC(Multi Version Concurrency Control)

Copy on Write 思想, 每次事务修改操作之前,都会在Undo日志中记录修改之前的数据状态和事务号, 该备份记录可以用于其他事务的读取,也可以进行必要时的数据回滚

锁的分类

锁的粒度

操作的类型

操作的性能

行锁的原理

InnoDB行锁是通过对索引数据页上的记录加锁实现的。SQL操作含有唯一索引是,会对Next-key Lock(记录锁+范围锁)进行优化,降级为RecordLock,仅锁住索引本身而非范围。

MySQL集群架构

集群架构设计

主从复制原理

  1. 主库将数据库的变更操作记录到 Binglog日志文件中
  2. 从库读取主库中的 Binglog日志文件,写入到从库的 Relay Log中继日志
  3. 从库读取中继日志在从库 进行 replay,更新从库数据信息

MMM架构

Master-Master Replication Manager for MySQL 管理和监控双主复制,支持双主故障自动切换的第三方软件,Perl语言开发。同一时间点只允许一个节点进行写入操作

MHA架构

Master High Availability, 故障切换和主从提升的高可用软件。支持一主多从的架构

分库分表

水平拆分:解决表中记录过多问题
垂直拆分:解决表过多或者是表字段过多问题

分片

表示分配过程,逻辑上的概念,表示如何实现
数据库扩展方案:

性能优化

mysql> show global status like '%innodb_buffer_pool_size%';

上一篇 下一篇

猜你喜欢

热点阅读