网易MySQL微专业学习笔记(十)-MySQL存储引擎
前言
这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。 所有笔记可能不定期更新,发布时不一定为最终版。
正文
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的主从一致性
自增主键做条件更新,性能最好
除特别注明外,本站所有文章均为 Windcoder网 原创,转载请注明出处来自: wangyimysqlweizhuanyexuexibijishi-mysqlcunchuyinqing

No Data