mysql 学习

mysql 学习

Posted by Deetch on December 14, 2017

“Let’s go”

MySQL体系结构

连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲(Cache)组件
插件式存储引擎
物理文件

InnoDB体系结构


后台线程
InnoDB存储和引擎内存池

文件


后台线程

Master Thread

  • 主循环(loop)
  • 后台循环(backgroud loop)
  • 刷新循环(flush loop)
  • 暂停循环(suspend loop)

IO Thread

Purge Thread

Page Cleaner Thread

内存

缓冲池

缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应hash索引、InnoDB存储的锁信息、数据字典信息等

LRU List、Free List和Flush List

插入缓冲(Insert Buffer)

  • Insert Buffer
  • Change Buffer 对DML操作————INSERT、DELETE、UPDATE都进行缓冲

两次写(Double Write)

自适应hash索引(Adaptive Hash Index)

异步IO(Async IO)

刷新邻接页(Flush Neighbor Page)

Checkpoint机制

1.Sharp Checkpoint 数据库关闭时刷回所有脏页

2.Fuzzy Checkpoint

  • Master Thread Checkpoint
  • FLUSH_LRU_LIST Checkpoint
  • Async/Sync Flush Checkpoint
  • Dirty Page too much Checkpoint

表空间

启用innodb_file_per_table,每张表的表空间内存放的只是数据、索引和插入缓冲Bitmap页,
其他类的数据,如回滚(undo)信息,插入缓冲索引页、系统事务信息,二次写缓冲等还是存放在原来的共享表空间内。

表空间由各个段组成,常见的段有数据段、索引段、回滚段等。

区是连续页组成的空间,在任何情况下每个区的打小都为1MB。为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4-5个区。 默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中有64个连续的页。

用户开启innodb_file_per_table后,创建的表默认大小是96KB。每个段开始,先用32个页大小的碎片页来存放数据,使用完
这些页之后才是64个连续页的申请。

InnoDB存储引擎页的大小为16KB

  1. 数据页(B-tree Node)
  2. undo页(undo Log Page)
  3. 系统页(System Page)
  4. 事务数据页(Transaction system Page)
  5. 插入缓冲位图页(Insert Buffer Bitmap)
  6. 插入缓冲空闲列表页(Insert Buffer Free List)
  7. 未压缩的二进制大对象页(Uncompressed BLOB Page)
  8. 压缩的二进制大对象页(compressed BLOB Page)

InnoDB存储引擎是面向列的,也就是说数据是按行进行存放的。每个页a存放嗯的行记录是有硬性定义的,最多允许存放
16KB / 2 -200 行的记录,即7992行记录。

行记录格式:

  1. Compact
  2. Redundant

知识盲点

1.内存缓冲池,checkpoint机制

2.根据每个数据库系统实现的不同,日志可分为以下几种类型:
physical logging
logical logging
physiological logging