(一)MySQL体系架构

(一)MySQL体系架构

目录
一、MySQL体系结构
二、MySQL内存结构
三、MySQL文件结构
四、Innodb体系结构


1.MySQL体系结构

MySQL体系架构

由图,可以看出MySQL最上层是连接组件。下面服务器是由连接池管理工具和服务SQL接口解析器优化器缓存存储引擎文件系统组成。

连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql复制、集群等
SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
解析器: SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本, 主要功能:
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
优化器:查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
用一个例子就可以理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤
这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤
将这两个查询条件联接起来生成最终查询结果
缓存器: 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
通过LRU算法将数据的冷端溢出,未来得及时刷新到磁盘的数据页,叫脏页。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

2.MySQL内存结构

MySQL中内存大致分为:全局内存(Global buffer)线程内存(Thread buffer) 两大部分。

在这里插入图片描述
全局内存:缓冲池里面有数据缓存、索引缓存、锁信息、插入缓存等等。此外还有重做日志缓存、额外的内存池。
线程内存:Master Thread、IO Thread、Purage Thread、Page Cleaner Thread。

CheckPoint技术:缓冲池的设计目的为了协调CPU速度与磁盘速度的鸿沟。因此跟新或者删除的时候直接操作的是内存的数据,先写入重做日志,然后再修改内存池里面的数据,最后定时刷新到磁盘上。


3、MySQL文件结构

(1) 参数文件:启动MySQL实例的时候,指定一些初始化参数,比如:缓冲池大小、数据库文件路径、用户名密码等。
在这里插入图片描述
(2) 日志文件:比如:错误日志、二进制日志、慢查询日志、查询日志等等。

  • 通过show variables like "error_log"来查看错误日志存放内容。

  • 通过show variables like "long_query_time"来查看慢查询日志记录的阈值。默认的慢查询日志的阀值是10秒,也就是查询时长超过10秒就会记录到慢查询日志文件;

(3) socket文件:当用UNIX域套接字方式进行连接的时候需要的文件。
(4) pid文件:MySQL实例的进程ID文件。
(5) 表结构文件:用来存放MySQL表结构定义文件。

  • .frm后缀命名的文件都是表结构文件,和存储引擎类型无关。所有的表都会生成一个.frm文件;

(6) 存储引擎文件:存储引擎正在存储了记录和索引等数据。

  • (1)共享表空间:共享表空间文件以.ibdata*来命名; 共享表空间下,innodb所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
    共享表空间主要存放double write、undo log(undo log没有独立的表空间,需要存放在共享表空间)
  • (2)独立表空间:每个表拥有自己独立的表空间用来存储数据和索引。
  • (3)查看数据库是否启用独立表空间:
    show variables like ‘innodb_file_per_table’;查看,innodb_file_per_table=ON,表示启用了独立表空间;
  • (4)使用独立表空间的优点:
    如果使用软链接将大表分配到不同的分区上,易于管理数据文件
    易于监控解决IO资源使用的问题;
    易于修复和恢复损坏的数据;
    相互独立的,不会影响其他innodb表;
    导出导入只针对单个表,而不是整个共享表空间;
    解决单个文件大小的限制;
    对于大量的delete操作,更易于回收磁盘空间;
    碎片较少,易于整理optimize table;
    易于安全审计;
    易于备份
    如果在innodb表已创建后设置innodb_file_per_table,那么数据将不会迁移到单独的表空间上,而是续集使用之前的共享表空间。只有新创建的表才会分离到自己的表空间文件。
  • (5)共享表空间的数据文件配置:
    innodb_data_file_path参数:设置innoDB共享表空间数据文件的名字和大小,例如innodb_data_file_path=ibdata1:12M:autoextend(初始大小12M,不足自增)
    innodb_data_home_dir参数:innodb引擎的共享表空间数据文件的存放目录
    目前主要是使用独立表空间,但是共享表空间也是需要的,共享表空间主要存放double write、undo log等

4、InnoDB表存储结构

在这里插入图片描述

在这里插入图片描述

  • (1)每页=16Kb(页类型:数据页、undo页、系统页、事务数据页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页、压缩的二进制大对象页)
  • (2)区=64个连续的页=64*16Kb=1MB


  • 16
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值