mysql 技术内幕
2022-02-28 17:00:26 19 举报
AI智能生成
登录查看完整内容
mysql技术内幕存储引擎书本思维导图
作者其他创作
大纲/内容
InnoDB存储引擎中的锁
一致性非锁定读(MVCC)
一致性锁定读
自增长与锁
外键和锁
锁
概述
分类
认识事物
redo
基本概念
undo存储管理
insert into log
update undo log
undo log格式
查看undo格式
undo
purge
group commit
事务的实现
事务
按类型
按备份后的文件内容
按备份数据库内容
冷备
mysqldump
select ... into outfile
逻辑备份的恢复
load data infile
mysqlimport
逻辑备份
二进制日志备份与恢复
ibbackup
XtrBackup
热备
快照备份
优化sql和索引
redis缓存热点数据
mysql读写分离
如何提升数据库并发能力
读写分离
数据备份
高可用性
主从复制的作用
主从复制概述
二进制日志转储线程
从库 I/O 线程
从库 SQL 线程
三个线程
原理图
主从复制原理
监控
docker容器搭建
尚硅谷视频地址
非docker容器搭建
一主一从架构搭建
读库和写库的数据一致(最终一致)
写数据必须写到写库
读数据必须到读库(不一定)
主从同步的要求
理解主从延迟问题
从库的机器性能比主库要差
从库的压力大
大事务的执行
主从延迟问题原因
降低多线程大事务并发的概率,优化业务逻辑
优化SQL,避免慢SQL, 减少批量操作 ,建议写脚本以update-sleep这样的形式完成
提高从库机器配置,减少主库写binlog和从库读binlog的效率差
尽量采用短的链路,也就是主库和从库服务器的距离尽量要短,提升端口带宽,减少binlog传输的网络延迟
实时性要求的业务读强制走主库,从库只做灾备,备份。
如何减少主从延迟
子主题
异步复制
半同步复制
组复制
如何解决一致性问题
同步数据一致性问题
主从复制
备份与恢复
mysql配置文件详解
查看数据库所在路径
数据库
查看mysql数据库实例
查看实例启动时,加载的配置文件位置
实例
定义数据库和实例
mysql体系结构
5.5.8版本为默认存储引擎
4.1版本开始具有ibd文件
next-key locking 临键锁
采用聚集的方式,每张表的顺序按照主键存放
InnoDB
不支持事务、表锁设计、支持全文索引
数据缓冲池只缓存索引文件
由MYD和MYI组成
默认支持4GB大小的表
MyISAM
集群存储引擎
NDB
数据存放在内存中
使用hash索引
只支持表锁
适用于存放临时数据的临时表
Memory
只支持INSERT和SECLECT
使用zlib算法压缩行存储
适用于存储归档数据,如日志信息
Archive
Federated
Maria
Mysql存储引擎
mysql体系结构和存储引擎
架构图
脏页的刷新
数据异步刷新到磁盘
合并插入缓冲池
undo页的回收
作用
工作方式
Master Thread
insert buffer thread
log thread
innodb_read_thread 4线程
innodb_write_thread 4线程
IO Thread
Purge Thread
Page Cleaner Thread
后台线程
内存数据对象
索引页
数据页
undo页
插入缓冲(insert buffer)
自适应哈希字典(adaptive hash index)
innodb存储的锁信息(lock info)
数据字典信息(data dictionary)
页
缓冲池
LRU List
Free List
Flush List
LRU List、Free List、Flush List
重做日志缓冲 redo log buffer
额外的内存池
内存
体系架构
write ahead log策略
阶段1
重做日志(rodo log)的设计
阶段2
怎么达到高效性和持久性?
LSN(Log Sequence Number)
每次刷新多少页
每次从哪里取脏页
什么时间触发Checkpoint
Sharp Checkpoint
Master Thread Checkpoint
Flush_LRU_LIST Checkpoint
Async/Sync Flush Checkpoint
Dirty Page too much Checkpoint
Fuzzy Checkpoint
工作原理
Check point技术
日志缓冲刷新到磁盘,即使这个事务还没有提交(总是)
合并插入缓冲(可能)
至多刷新100个InnoDb缓冲池中的脏页到磁盘(可能)
如果当前没有用户活动,则切换到background loop(可能)
每秒的操作
刷新100个脏页到磁盘(可能的情况下)
合并至多5个插入缓冲(总是)
将日志缓冲刷新到磁盘(总是)
删除无用的Undo页(总是)
刷新100个或者10个脏页到磁盘(总是)
每十秒的操作
主循环(loop)
合并20个插入缓冲(总是)
跳回到主循环(总是)
不断刷新100个页直到符合条件(可能,跳转到flush loop)
后台循环(background loop)
刷新循环(flush loop)
暂停循环(suspend loop)
1.0.X版本之前
通过参数配置磁盘IO的次数
调整脏页所占缓冲池的比例
新增自适应刷新
调整full purge
1.2.X版本之前
新增Page Cleaner Thread线程
1.2.X版本
Master Thraed工作方式
前提条件
缺点
Insert Buffer
Insert Buffer
Delete Buffer
Purge Buffer
三种buffer
查看
Change Buffer
非叶子结点
叶子结点
结构
Insert Buffer的内部实现
有什么用
辅助索引页被读取到缓冲池时
Insert Buffer Bitmap页追踪到该辅助索引页已无可用空间时
什么时候发生
Merge Insert Buffer
插入缓冲(Insert Buffer)
实现过程
观察double write运行情况
禁用
两次写(Double Write)
提高索引效率
要求
参数配置
自适应哈希索引(Adaptive Hash Index)
异步IO(Async IO)
刷新领接页(Flush Neighbor Page)
InnoDB关键特性
参数值为 0
参数值为 1
参数值为 2
影响关闭行为
参数值 0
参数值 1
参数值 2
参数值 3
参数值 4
参数值 5
参数值 6
影响恢复
启动、关闭和恢复
InnoDB存储引擎
什么是参数
session
global
动态参数
静态参数
参数类型
参数文件
启动日志
查看日志
错误日志文件(error log)
恢复
复制
审计
永久性方式
临时性方式
启用
文件
max_binlog_size
binlog_cache_size
sync_binlog
binlog-do-db
binlog-ignore-db
log-slave-update
binlog-format
相关参数
二进制日志(bin log)
查看慢查询日志
日志数据格式
逻辑读取
物理读取
捕获sql语句的方式
启用慢查询日志的方式
慢查询日志(slow query log)
查询日志(log)
概念
回滚数据
MVCC
Undo日志的作用
undo log的生命周期
针对于insert undo log
针对于update undo log
undo log的删除
Undo日志
日志文件
套字节文件
pid文件
表结构定义文件
表空间文件
与二进制文日志的区别
日志结构
写入方式
设置为0
设置为1
设置为2
刷盘策略参数:innodb_flush_log_at_trx_commit
重做日志(rodo log)文件
InnoDB引擎文件
选择和创建主键
索引组织表
共享表空间
独立表空间
表空间
数据段
索引段
回滚段
段
区
数据页(B-tree Node)
undo 页(undo Log Page)
系统页(Systm Page)
事务数据页(Transaction system Page )
插入缓冲位图页(Insert Buffer Bitmap)
插入缓冲空闲列表页(Insert Buffer Free List)
未压缩的二进制大对象页(Uncompressed BLOB Page)
压缩的二进制大对象页(compressed BLOB Page)
行
InnoDB逻辑存储结构
变长字段长度列表
NULL值列表
delete_mask
min_rec_mask
record_type
heap_no
n_owned
演示:删除操作
演示:添加操作
next_record
记录头信息(5字节)
记录的真实数据列
事务ID列
回滚指针列
隐藏列
COMPACT行格式
Redundant行格式
行溢出与Char的行结构存储
Dynamic和Compressed行格式
InnoDB行记录格式
File Header(文件头部,描述页的信息)
File trailer(文件尾部)
第1部分
Free Space(空闲空间)
User Records(用户记录)
infimum + Supremum(最小最大记录)
第2部分
Page Directory(页目录)
Page Header(页面头部,页头和页的状态)
第3部分
InnoDB数据页格式
Name File Formats 机制
约束
视图
分区概述
RANGE分区
LIST分区
HASH分区
KEY分区
COLEMNS分区
分区类型
分区和性能
分区表
表
二分查找法
二叉查找树和平衡二叉树
数据结构与算法
插入操作
删除操作
B+树
聚集索引
辅助索引
B+树索引分裂
索引管理
Fast Index Creation
Online Schema Change
Online DDL
B+树索引管理
B+树索引
什么是Cardinality
InnoDB存储引擎的Cardinality统计
Cardinality
联合索引
指定使用某个索引
Multi_Range Read优化
index condition pushdown(索引下推)
覆盖索引
B+树索引使用
哈希表
InnoDB存储引擎的哈希算法
自适应哈希索引
哈希算法
全文索引
索引和算法
mysql 技术内幕
收藏
收藏
0 条评论
回复 删除
下一页