Mysql体系结构

作者: 青衣敖王侯 | 来源:发表于2019-07-17 21:28 被阅读72次

    1.Mysql体系结构分为三层,如下图所示:

    Mysql体系结构

      其中客户端就是我们常见的Java应用ODBC,JDBC等等。
      服务层是关键所在,这里面包含了连接管理器、查询缓存、查询解析、查询优化器,也是Mysql中最复杂的所在。查询解析器的作用是是对输入的SQL语句进行解析,如进行语法检查,语义检查,数据访问权限检查等。SQL优化器的做用则是跟据统计信息生成最优的执行计划。
      那么存储引擎是干嘛的呢?这里举一个例子,比如我们使用select语句做查询,mysql服务层让存储引擎层知道我们要查询的数据,但是具体的实现方式就是由存储引擎来搞定。

    2.MyISAM

    MyISAM是5.5之前版本默认的存储引擎,现在的Mysql中呢,一些系统表还有临时表也在使用这个存储引擎,这里的临时表不是指CREATETEMPORARY所得到的表,而是说在排序、分组等操作中,当数量超过一定的大小之后,由查询优化器建立的临时表。



    由MyISAM存储引擎由MYD和MYI组成。如下图所示:


    创建表
    创建一个表后,我们看到磁盘里面有frm,MYD,MYI,如下图所示:

    其中frm是记录表结构的,所有存储引擎都有的文件

    2.1MyISAM特性

    • MyISAM提供的是表级锁,读取的时候需要加共享锁。在某些条件下,进行读取的时候可以在表的末尾添加数据。
    • 表损坏修复。在创建表的时候我已经把check和repair命令贴出来了,大家可以看一看。
    • 支持全文索引。这里推荐一篇文章https://blog.csdn.net/mrzhouxiaofei/article/details/79940958
    • 支持数据压缩:myisampack,压缩后就不能在写入数据了。


      myisampack

    2.2适合的场景

    • 适合非事务应用。比如数据仓库,不涉及财务的应用,是可以不需要事务的
    • 适合只读类应用
    • 适合空间类应用(GPS)

    3.Innodb

    Innodb使用表空间进行数据存储,数据存储的位置有innodb_file_per_table这个参数决定,如果这个值为ON,那么存在于独立的表空间:tablename.ibd,如果为OFF,则存在系统表空间中:ibdataX,其中X表示从1开始的数字。
    show variables like 'innodb_file_per_table';可以查看这个值的情况。如果要改变这个值可以用set global innodb_file_per_table=off;
    那么系统表空间和独立表空间要如何选择呢?
    1.系统表空间无法简单的收缩文件大小。就算我们把表中的数据删除了,这个文件的大小也不会改变的。但是如果使用独立表空间可以通过optimize table命令收缩系统文件。
    2.系统表空间会产生IO瓶颈,因为只有一个文件,对多个表进行数据刷新时,在文件层面上来说是顺序进行的。独立表空间可以同时向多个文件刷新数据。
    所以综上所述我们选择独立表空间。
    如果进行系统表空间的数据转移呢?
    1.使用mysqldump到处所有数据库表数据
    2.停止Mysql服务,修改innodb_file_per_table参数,并删除Innodb相关文件
    3.重启Mysql服务,重建Innodb系统表空间
    4.重新导入数据

    3.1Innodb存储引擎特性

    3.1.1Innodb是一种事务性存储引擎,完全支持事务的ACID特性。

    为了保证事务的ACD,Innodb提供了RedoLog和UndoLog两个日志文件。
    RedoLog是为了实现事务的持久性,它里面存储的都是已经提交的事务,且是顺序写入的,由两部分组成,一部分是内存中的重做日志缓冲区,缓冲区的大小是由innodb_log_buffer_size决定的,show variables like 'innodb_log_buffer_size'可以看到具体的值。缓冲区中的内容是1秒钟可以刷新到磁盘中,所以这个大小不必太大,另一部分是重做日志文件,也就是ib_logfile文件,文件的个数由innodb_log_files_in_group来决定。
    UndoLog是帮助未提交事务的回滚以及MVCC。

    3.1.2Innodb支持行级锁

    隔离性由锁来实现
    关于redoLog和UndoLog的一些知识可以推荐大家看https://zhuanlan.zhihu.com/p/63377684

    相关文章

      网友评论

        本文标题:Mysql体系结构

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