美文网首页
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