高性能MySQL实战学习笔记~1

一 MySQL体系结构

1. Client Connectors

  • 处理客户端的连接请求, MySQL支持所有的连接类型

2. MySQL Server

  • 连接处理: 响应客户端连接请求, 线程池资源管理
  • 用户鉴权: 用户登录身份鉴权
  • 安全管理: 用户执行操作权限校验

3.Service & utilities

  • 管理服务&工具集: 备份恢复, 安全管理, 集群管理服务&工具

4.SQL Interface

  • SQL接口: 接收用户的SQL命令并处理

5.Parser

  • SQL解析器: 解析查询语句, 生成语法树, 解析器会查询缓存

6.Optimizer

  • 查询优化器: 对查询语句进行优化, 选择合适索引

7.Caches

  • 缓存: 全局缓存和session缓存

8.Pluggable Storage Engines

  • 存储引擎层: 一种文件访问机制, 与文件交互, 插件式存储引擎

9.File System

  • 物理文件存储层: 物理文件的存储, 含redolog, undolog, binlog, error_log, query_log, slow_log, ibd, frm等

二 SQL的执行流程

1. select

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQsLGPbp-1593277067200)(E:\blogs\拉勾\高性能MySQL实战\images\MySQL查询语句执行流程.jpg)]

2. insert

待完善...

三 存储引擎及其分类

1. 存储引擎

  • MySQL中具体与文件打交道的子系统, 根据MySQL公司提供的文件访问层抽象接口定制的一种文件访问机制

2. 分类

  • MyISAM
  • InnoDB
  • Memory
  • NDB
  • Archive
  • Blackhole
  • Merge
  • CSV
  • TokuDB
  • RocksDB
  • MyRocks
  • ArkDB
  • Federated
  • Example
  • PERFORMANCE_SCHEMA
  • MRG_MYISAM

四 InnoDB存储引擎体系结构

1. 实例层

1-1 master thread(优先级最高)

  • 负责调度其他各线程, 内部包含主循环(1s和10s), 后台循环, 刷新循环
  • 主循环的两种操作
    • 1s
      • 第一步: 日志缓冲刷新到磁盘(会总是操作, 即使事务还没有提交)
      • 第二步: 最多可能刷100个新脏页到磁盘
      • 第三步: 执行和并改变缓冲的操作
      • 第四步: 若当前没有用户活动可能切换到后台循环等
    • 10s
      • 第一步: 刷新可能最多100个脏页到磁盘
      • 第二步: 合并至多5个改变缓冲(总是)
      • 第三步: 日志缓冲刷新到磁盘(总是)
      • 第四步: 删除无用的undo页(总是)
      • 第五步: 刷新100个或者10个脏页到磁盘(总是)产生一个检查点(总是)等

1-2 buf dump thread

  • 负责把 buffer pool 中的内容 dump 到物理文件中, 以便快速加热数据

1-3 page cleaner thread

  • 负责把buffer pool中的脏页刷新到磁盘, 5.7版本之后才出现

1-4 purge thread

  • 负责将不再使用的undo日志进行回收

1-5 read thread

  • 处理用户的读请求, 并负责将数据页从磁盘上读出来

1-6 write thread

  • 负责将数据页从缓冲区写出到磁盘

1-7 redo log thread

  • 负责把日志缓冲中的内容刷新到 redo log 文件中

1-8 insert buffer thread

  • 负责把nsert buffer中的内容刷新到磁盘

1-9 Buffer Pool

buffer pool文件决定了一个SQL执行的快慢

单机单实例参考配置: 物理内存的 60% - 80%

多机多实例: 不用超过物理内存的 80%

看 show global status like '%buffer_pool_wait%'的值

(5.7以后版本buffer pool大小可以动态修改, 无需重启数据库实例)

  • undo page(undo页)
  • insert buffer page(insert buffer页)
  • adaptive hash index(自适应hash索引页)
  • index page(索引页)
  • lock info(锁信息)
  • data dictionary(数据字典页)

1-10 redo log buffer

  • 是一个循环复用的文件集件
  • 负责记录InnoDB中所有对Buffer Pool的物理修改日志
  • redo log大小直接影响了我们的数据库的处理能力

1-11 double write buffer

  • 主要解决由于宕机引起物理写入操作中断, 数据页不完整的情况

2. 物理层

2-1 系统表空间

  • 5.6
    • ibdata文件
      • insert buffer
      • double write
      • 回滚
      • 索引
      • 数据字典
      • undo信息
    • undo文件
  • 5.7
    • undo信息(5.7之后从ibdata分离出来)
    • 新增temporary(临时表空间)
  • 8.0
    • 数据字典(8.0之后从ibdata分离出来)
    • temporary可以配置多个物理文件

2-2 用户表空间

  • .ibd后缀的文件
    • insert buffer的bitma页
    • 叶子页
    • 非叶子页

2-3 redo日志

  • 多个redo文件

五 几个主流存储引擎特性

Feature MyISAM Memory InnoDB Archive NDB
B-tree indexes Yes Yes Yes No No
Backup/point-in-time recovery (note 1) Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Clustered indexes No No Yes No No
Compressed data N No Yes Yes No
Data caches No N/A Yes No Yes
Encrypted data Yes(note 3) Yes(note 3) Yes(note 4) Yes(note 3) Yes(note 3)
Foreign key support No No Yes No Yes(note 5)
Full-text search indexes Yes No Yes(note 6) No No
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No Yes(note 7) No No
Hash indexes No Yes No(note 8) No Yes
Index caches Yes N/A Yes No Yes
Locking granularity Table Table Row Row Row
MVCC No No Yes No No
Replication support(note 1) Yes Limited(note 9) Yes Yes Yes
Storage limits 256TB RAM 64TB None 384EB
T-tree indexes No No No No Yes
Transactions No No Yes No Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes

六 InnoDB和MyISAM比较

功能 InnoDB MyISAM
ACID事务
配置ACID属性
崩溃恢复
外键支持
行级锁力度
MVCC

七 InnoDB部分特性

功能 支持 功能 支持
存储限制 64TB 索引高速缓存
MVCC 数据高速缓存
B树索引 自适应散列索引
集群索引 复制
压缩数据 更改数据字典
加密数据 地理空间数据类型
查询高速缓存 地理空间索引
事务 全文搜索索引
锁定粒度 集群数据库
外键 备份和恢复
文件格式管理 快速索引创建
多个缓冲区池 PERFORMANCE_SCHEMA
更改缓冲 自动故障恢复

八 InnoDB核心要点

  • 表空间
  • ARIES
  • 数据页
  • 内存
  • 线程
  • 状态查询
    • MVCC
    • 锁分类
    • 锁算法
  • 事务
    • 事务
    • 事务特性ACID
    • 事务隔离级别

猜你喜欢

转载自www.cnblogs.com/unrecognized/p/13200839.html