数据库··By/蜜汁炒酸奶

网易MySQL微专业学习笔记(十)-MySQL存储引擎

前言

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。 所有笔记可能不定期更新,发布时不一定为最终版。

netease_mysql_feng.png

正文

Mysql存储引擎

有多种可选方案,可插拔,可修改存储引擎

基于表选择使用何种存储引擎

create table test(a int) engine = innodb;

show engines;

InnoDB存储引擎

索引组织表

支持事务

支持行级锁

数据块缓存

日志持久化

稳定可靠,性能好,线上尽量使用InnoDB

MyISAM存储引擎

堆表

不支持事务

只维护索引缓存池,表数据缓存交给操作系统

锁力度较大–导致并发性能非常差

数据文件可以直接拷贝,偶尔可能会用上

不建议线上业务数据使用

MEMORY存储引擎

数据全内存存放,无法持久化

性能较高

不支持事务

适合偶尔作为临时表使用

临时表仅在当前链接中有效,其他链接无法访问。

create temporary table tmp(id int) engine = memory;

BLACKHOL存储引擎

数据不作任何存储,如果直接保存在里面,会被直接丢掉。

利用Mysql Replicate,充当日志服务器

在Mysql Replicate环境中充当代理主

TokuDB

分形树存储结构

支持事务

行锁

压缩效率较高

适合大批量insert的场景

http://www.tokutek.com/tokudb-for-mysql/download-community/

Mysql Cluster

多主分布式集群

数据节点间冗余,高可用

支持事务

设计上易于扩展

面向未来,线上慎用

改变表的存储引擎

alert table m ENGINE = innodb;

InnoDB存储引擎

架构

内存空间

后台各种线程()

磁盘上的文件

物理文件

数据文件、日志文件

InnoDB系统表空间

ibdata1存放什么:

回滚段

所有InnoDB表元数据信息

Double Write,Insert buffer dump等

自动扩展机制

日志文件

表定义文件

表名.

表数据文件

InnoDB数据文件存储结构

索引组织表(聚簇表)

根据表逻辑主键排序

数据节点每页16k–二分查找

根据主键寻址速度很快

主键值递增的insert插入效率较好

主键随机insert插入操作效率较差

因此,InnoDB表必须指定主键,建议使用自增数字

InnoDB数据块缓存池

数据的读写需要经过缓存

数据以整页(16k)为单位读取到缓存中

缓存中的数据以LRU策略换出

IO效率高,性能好

InnoDB数据持久化与事务

事务日志实时持久化

内存变化数据(脏数据)增量异步刷出到磁盘

实例故障考重放日志恢复

性能好,可靠,恢复快

InnoDB行级锁

写不阻塞读

不同行间的写相互不阻塞

并发性能好

InnoDB与事务ACID

事务ACID特效完整支持

回滚段失败回滚(A)

支持主外键约束(C)

事务版本+回滚段=MVCC(I)

事务日志持久化(D)

默认可重复读隔离级别,可以调整

事务锁粒度

行锁

InnoDB,Oracle

页锁

SQL Server

表锁

MyISAM,Memory

锁升级

InnoDB的gap lock

什么是幻读

A连接开启一个事务,并查处一个值,幻读情况下,在B连接中插入一个值,A连接再次查询时读取到的情况。

gap locak 消灭幻读

InnoDB消灭幻读仅仅为了确保statement模式replicate的主从一致性

自增主键做条件更新,性能最好

预览
Loading comments...
0 条评论

暂无数据

example
预览