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