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
。