Mysql体系结构

bVbJpIU - MySQL存储引擎
连接池、服务与工具管理、SQL接口、查询分析组件,优化器,缓存/缓冲、插入式引擎、物理文件。

Mysql 引擎

仅比较主流的MyISAM和InnoDB
InnoDB:

  • 支持事务,外键,行级锁,支持裸设备(row disk)建立表空间,事务默认隔离级别为REAPTABLE,使用next-key lock算法来避免幻读(Phantom),提供插入缓冲(insert buffer),二次写(double write),自适应哈希索引(adaptive hash index),预读(read head)等。
  • 不支持FullText索引,不保存具体行数。
  • 表中的数据采用聚集(clustered)方式存储,即按主键顺序存放,若没有显示声明主键,则自动生成6字节的ROWID作为主键。

注:一张表只能有一个聚集索引,可以有多个非聚集索引。

MyISAM:

  • 支持FullText索引;只缓存索引,不缓存数据
  • 不支持事务,表锁

MyISAM适用于多读少写;Innodb适用于与事务,高并发。

附上一个比较:
bVbJpOB - MySQL存储引擎

MYSQL连接

使用TCP/IP套接字连接:mysql -h 192.168.0.1 -u rookie -p
则会连接ip为192.168.0.1下的mysql实例。rookie为用户名。

缓冲

innodb基于磁盘存储,降低io与cpu的差距,引入了缓冲池(一块内存区域)。
缓冲池主要包含:数据页,索引页,undo页,插入缓冲,锁信息,自适应哈希索引等。结构图如下:
bVbJpSk - MySQL存储引擎
现在的innodb引擎支持设置多个缓冲池,该字段为innodb_buffer_pool_instance默认为1。

CheckPoint技术

主要是用户在宕机时,快速恢复,不用重做所有的日志,只需恢复checkpoint后的日志进行恢复。
checkpoint的作用就是把脏页刷回磁盘。(脏页:即缓冲池中修改过的数据页)

  • 两种刷回策略
    • Sharp CheckPoint:数据库关闭时全部刷回,默认开启。
    • Fuzzy CheckPoint:部分刷回。 fuzzy:毛茸茸的,模糊的。

innoDB关键特性

插入缓冲,两次写,自适应哈希索引,异步IO,刷新临界脏页。
这里只是简单介绍,如果有需要,可以去查看《MYSQL技术内幕 第2版》原书第2章第6小节。

  • 插入缓存 使用条件:
  • 索引是非聚集索引
  • 索引不唯一
  • 两次写 通过保存一个页的副本,在写入失效(如宕机)时,先重页的副本来恢复,再进行重做日志。提高数据页的可靠性。
  • 自适应哈希索引(AHI:Adaptive Hash Index) 定义:自动观察,若建立哈希能提供性能,则建立哈希索引。
    InnoDB会自动根据访问频率和模式为访问热点建立哈希索引。
  • 异步IO AIO作用可以进行IO Merge(IO合并),如访问页(end,start)为:(8,6),(8,7),(8,8)。这3次IO会合并为(8,6)一次IO。
  • 刷新临近页 当刷新一个脏页时,会检测该页所在区(extent)的其他页。如果是脏页,也一起一并刷回。该字段为innodb_flush_neighbors

MySQL存储引擎