乐趣区

MySQL存储引擎

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 实用于与事务,高并发。

附上一个比拟:

MYSQL 连贯

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

缓冲

innodb 基于磁盘存储,升高 io 与 cpu 的差距,引入了缓冲池(一块内存区域)。
缓冲池次要蕴含:数据页,索引页,undo 页,插入缓冲,锁信息,自适应哈希索引等。结构图如下:

当初的 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

退出移动版