美文网首页
MySql 各个存储引擎介绍

MySql 各个存储引擎介绍

作者: 3fc28cd0576c | 来源:发表于2020-10-27 10:53 被阅读0次

    InnoDB

    1.支持行锁

    2.支持外键

    3.支持非锁定读

    4.支持事物

    5.MVCC支持高并发

    聚族,所有数据都是按id顺序存放,因此按主键获取数据特别快,索引只存放id

    缓冲池:可以设置多个缓冲池,每个页根据不同的哈希值分配到不同的缓冲池中,从而减少资源竞争,根据innodb_buffer_pool_instances参数设置,缓冲池是为了协调CPU与磁盘速度的鸿沟,页的操作首先都是在缓冲池中完成的。

    1)LRU List,Free List,Flush List

    缓冲池中的页默认大小为16KB,采用LRU算法来管理,最新访问的页,并不是插入到列表首部,而是根据配置值midpoint的位置来插入,默认是5/8位置,如果不采用这种方式,常见的索引扫描和数据扫描,将这些数据全部插入头部,会将热点数据移除缓冲池。

    2)压缩页,原本16KB大小的页可以被分为8KB,4KB,2KB,1KB的页,通过unzip_LRU列表进行管理。通过伙伴算法管理。

    3)脏页,在LRU列表中的数据被更改后,称为脏页,脏页既存在于LRU列表中,也存在于Flush列表中,两个互不影响

    4)重做(redo)日志缓冲,默认8MB

    5)额外内存

    6.CheckPoint

    事物采用Write Ahead log策略,既当事物提交时,先写重做日志(redo),再写数据页,发生宕机时通过重做日志来恢复数据。

    CheckPoint技术是为了解决:1)缩短数据库恢复时间,直接从checkPoint点之后的重做日志恢复数据,2)将脏页刷回磁盘。3)重做日志不可用时,刷新脏页。

    关键特性

    1.插入缓冲(Insert Buffer),2.两次写,3.自适应哈希索引,4.异步IO,5.刷新邻近页

    1.Insert Buffer(针对辅助非唯一索引)

    聚集索引,直接插入数据页,一般主键都是递增,是顺序插入,速度很快,但是辅助索引就可能是随机插入,因此先判断索引页是否在缓冲池中,若在,则直接插入索引页,若不在,写入插入缓冲。再按照一定的频率和时机对插入缓冲和索引页进行合并,这时很可能将多个插入操作合并到一个操作中(因为在同一个索引页中),大大提升了效率。

    需要满足两个条件:1)索引是辅助索引,2)索引不是唯一的

    写密集情况下,Insert Buffer占用内存过大,默认最大可占缓冲区的1/2,可以配置

    2)1.1.x版本带来了change buffer(针对辅助非唯一索引),可以对insert,delete,update操作都进行缓冲,它们分别是:Insert Buffer,Delete Buffer,Purge Buffer

    通过 innodb_change_buffer_max_size 来控制大小,最大为50,默认25,既占用缓冲池的1/4

    采用B+树实现

    三种合并情况:该Insert 所对应的索引页被读入到缓冲池中,2)Insert Buffer BitMap 追踪到该辅助索引已无可用空间,3)Master Thread

    2.两次写(数据库的可靠性)

    对缓冲池中的脏页进行刷新时,并不先写磁盘,而是先将脏页复制到doublewrite buffer中,然后再分两次,每次1MB将doublewrite buffer写入到共享表空间的磁盘上,顺序写入,开销不是很大,最后再写数据文件(此时是离散写入)。

    3.自适应哈希索引(Adaptive Hash Index,AHI)

    4.异步IO

    5.刷新邻近页

    MyISAM

    1.不支持事物

    2.表锁

    3.缓存只缓存索引,不缓存数据文件

    NDB

    1.集群

    MEMORY

    1.数据都储存在内存中,崩溃不可恢复,速度快

    2.默认使用Hash索引

    3.大小受内存限制,只支持表锁,并发性能差

    4.不支持TEXT和BLOB字段,变长(varchar)都会按照定长(char)来储存,浪费内存

    5.查询时中间表会使用MEMORY来储存,如果不满足4中的条件,则会使用MyISAM来储存

    Archive

    只支持INSERT和SELECT操作,5.1开始支持索引,会使用zlib算法对数据进行压缩,占用空间小

    相关文章

      网友评论

          本文标题:MySql 各个存储引擎介绍

          本文链接:https://www.haomeiwen.com/subject/mywtvktx.html