美文网首页
MySQL存储引擎 - mage

MySQL存储引擎 - mage

作者: 麟之趾a | 来源:发表于2021-10-10 21:44 被阅读0次

    MySQL结构

    MySQL.png

    MySQL是进程/线程模型

    • 进程/线程: 主要是控制客户端连接,做权限校验,最大连接数,查询缓存,插入缓冲等
    • 缓存:MySQL自带缓存功能,当两条SQL语句执行相同,第二语句就会走缓存。如果缓存不匹配,就走分析器
    • 分析器: 进来的SQL语句,进行分析。找到一条最优路径来执行SQL
      +优化器: 当分析器找到执行SQL的最优路径,优化器就会对其优化。达到最高效率
    • 存储引擎: 负责将SQL语句要找的数据,从数据文件提取出来。或者将SQL语句要存入的数据,存入数据文件
    • 数据文件: 存储数据的

    MySQL存储引擎

    MySQL存储引擎是以插件方式进行提供show engines;可以查看MySQL支持的存储引擎
    主流的存储引擎 MyISAM,InnoDB

    InnoDB引擎

    • 支持表空间
      表空间中含有表的数据和索引,一个表有表空间和表的格式两个文件
    1. 是多个表共用一个表空间
      ibdata1,ibdata2
    2. 可以为每一个表设置单独的表空间
       innodb_file_per_table=1 例 user表有 user.ibd,user.frm两个文件构成。ibd文件有表数据和表索引。frm(format),为表的格式

    表空间不是固定大小,随着表数据的增加而加大。表空间有点类似于LVS中的 vg,表为lv,底下的存储相当于pv

    • 支持事务
    • 支持隔离机制MVCC(Multi Version Concurrency Control )多版本并发控制,有四种隔离级别。读为提交,读以提交,可重复读,串行读。四种隔离机制。默认为可重复读即rr
      隔离级别越小,并发性能越高,越容易出粗。
      可重复读,一般会出现幻读。
      幻读:即一个人读取了2和3两行,但另外一个人,在2和3之间插入了一行。此时读的那个人就会出现3行。此为幻读
      为了解决幻读,MySQL加入了间隙锁。即一个人在操作2和3行,这之间的间隙也被锁住。不会被操作
      串行读: 当一个人操作2和3行时,另外做相同操作的人,必须等到第一个人操作完毕。才能接着操作,此为串行读
    • 支持行级锁,间隙锁
      1. 如果锁的粒度很小,则可能会出现死锁。
        死锁: 用户A需要 B 和 C,已经操作B了需要C 。用户D 需要C 和 B,已经操作C了需要 B。此时A和D操作的线程就是死锁。需要解开,否则无法操作
    • 支持热备

    MyISAM

    • 表级锁
    • 支持全文索引,搭配特定的函数使用如空间函数
    • 读多写少的场景适合用

    相关文章

      网友评论

          本文标题:MySQL存储引擎 - mage

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