在学习一项新东西时,先从宏观上有个整体的把握,然后循序渐进,逐渐掌握各个细节。按照这个方法论,先记录一下mysql数据库整体架构图。

一、整体架构图

相对完整的逻辑体系架构:

抽象出重要组件,更简易化的逻辑架构图:

mysql架构可分为大概的4层,分别是:

1.客户端:各种语言都提供了连接mysql数据库的方法,比如jdbc、php、go等,可根据选择 的后端开发语言选择相应的方法或框架连接mysql

2.server层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖mysql的大多数核心服务功能,以及所有的内置函数(例如日期、世家、数 学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

3.存储引擎层:负责数据的存储和提取,是真正与底层物理文件打交道的组件。 数据本质是存储在磁盘上的,通过特定的存储引擎对数据进行有组织的存放并根据业务需要对数据进行提取。存储引擎的架构模式是插件式的,支持Innodb,MyIASM、Memory等多个存储引擎。现在最常用的存储引擎是Innodb,它从mysql5.5.5版本开始成为了默认存储引擎。

4.物理文件层:存储数据库真正的表数据、日志等。物理文件包括:redolog、undolog、binlog、errorlog、querylog、slowlog、data、index等

二、server层重要组件介绍

通过介绍,也可以大概了解一条查询sql是怎么执行的

1.连接器

连接器负责来自客户端的连接、获取用户权限、维持和管理连接。

一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建连接才会使用新的权限设置。

查看连接信息

客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是8小时。如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。

2.查询缓存

mysql拿到一个查询请求后,会先到查询缓存查看之前是否执行过这条语句。前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。如果当前sql查询能够直接在查询缓存中找到key,那么这个value就会被直接返回给客户端。

其实大多数情况下建议不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。查询缓存非常容易失效,只要对一个表进行更新,与这个表相关的所有查询缓存都会被清空。因此很可能费劲把结果存起来后,还没使用就被一个更新操作全清空了。对于更新操作多的数据库来说,查询缓存的命中率会非常低。除非业务需要的是一张静态表,很长时间才会更新一次。比如,一个系统配置表,那么这张表的查询才适合使用查询缓存。

好在mysql提供了这种“按需使用”的方式,可以将参数query_cache_type设置成DEMAND,这样对于默认的sql语句都不使用查询缓存,而对于确定要使用查询缓存的语句,可以用SQL_CACHE显示指定,像下面这个语句一样:

MySQL 8.0 版本直接将查询缓存的整块功能删掉了。

3.分析器

词法分析(识别关键字,操作,表名,列名)

语法分析 (判断是否符合语法)

4.优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。

5.执行器

开始执行的时候,要先判断一下用户对这个表 T 有没有执行查询的权限。如果没有,就会返回没有权限的错误。如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去调用这个引擎提供的接口。在数据库的慢查询日志中看到一个rows_examined 的字段,表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎获取数据航的时候累加的。在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟rows_examined并不是完全相同的。

mysql系统结构图_MySQL架构图相关推荐

  1. mysql 按月和年累加_MySQL架构图

    在学习一项新东西时,先从宏观上有个整体的把握,然后循序渐进,逐渐掌握各个细节.按照这个方法论,先记录一下mysql数据库整体架构图. 一.整体架构图 相对完整的逻辑体系架构: 抽象出重要组件,更简易化 ...

  2. mysql系统变量_MySQL系统变量

    @v是用户自定义的变量set @a="1" @@是mysql系统变量select @@version_comment, @@global.xxxx, @@session.xxxx, ...

  3. mysql 系统默认_mysql之系统默认数据库

    相关内容: 系统默认数据库information_schema,performance_schema,mysql,test  的意义 首发时间:2018-02-23 17:10 安装mysql完成后, ...

  4. mysql知识结构图_MySql知识结构说明

    MySQL发展历史     MySQL历史背景 MySQL优势特性 数据库基础        数据库基础概念     数据库基础概念 数据库模型   层次模型 网状模型 关系模型 磁盘存储 常见数据库 ...

  5. mysql系统特性_MySQL · 引擎特性 · InnoDB 事务系统

    前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍InnoDB事务子系统,主要包括,事务的启动,事务的提交,事 ...

  6. mysql系统变量_MySQL 系统变量(system variables)

    3.全局与会话级别设置示例 --如何设置隔离级别 mysql> help isolation Name: 'ISOLATION' Description: Syntax: SET [GLOBAL ...

  7. mysql系统属性_mysql 显示表字段及mysql系统信息

    SHOW DATABASES                                //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name]      ...

  8. order是mysql系统关键字_MySQL数据库如何使用“ORDER BY”关键字对查询结果进行排序呢?...

    摘要: 下文讲述MySQL数据库中ORDER BY 关键字的用法简介说明,如下所示: ORDER BY 关键字的功能及语法说明 ORDER BY 功能: 对select 查询出的结果采用指定字段 指定 ...

  9. mysql 系统月份_MySQL里求给定的时间是所在月份的第几个星期

    分享一个昨天写的MySQL函数. 目的是求给定的时间是所在月份的第几个星期. DELIMITER $$ USE `t_girl`$$ DROP FUNCTION IF EXISTS `weekofmo ...

  10. 面试官:你给我画一下秒杀系统的架构图!

    泪目,不堪回首! 博主毕业4年了,最近秋招开始了,每次回想起自己的秋招,都感觉到当时自己特别的可惜(菜是原罪),自己当时简历上面的项目,只有一个 农资电商平台,当时的秒杀系统还没有那么普及(简历人均秒 ...

最新文章

  1. 机器学习的数学基础 - 常见分布函数
  2. 封闭已久的智能驾驶系统,在云栖大会上,被敲开一个裂缝
  3. BUU[SCTF2019]Strange apk
  4. Ambari2.7.0 + HDP3.1.4.0安装,hdfs数据备份和恢复,hive数据备份和恢复,hbase数据备份和恢复,常见错误总结,Ambari卸载,hadoop-ha,hive和ES整合
  5. outdated: 3.Adding Color
  6. hibernate java内存一次能取多少条_Hibernate管理Session和批量操作分析
  7. 使用MariaDB后端在Ubuntu 18.04 / Debian 9上安装PowerDNS和PowerDNS-Admin
  8. 射频测试系统软件,新的~~蓝牙5.0射频测试系统
  9. 【实践】面向广告主的猜你喜欢推荐与B端用户增长实践.pdf(附下载链接)
  10. sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇
  11. 【UE4】Bounds 详解
  12. 注销consul节点
  13. 计算机意识状态在线场所,科学网—浅谈计算机意识的有效范围 - 于金辉的博文...
  14. 如何利用python解方程_Python 解方程的三种方法
  15. 【转载】关于重定向RedirectAttributes的用法
  16. 强大的ElasticSearch-入门-了解-精通
  17. 【过关斩将】面试紧张怎么办?
  18. 输电线路综合在线监测装置
  19. cocos2d 使用SimpleAudioEngine加载音乐音效
  20. Qt之天气预报——界面优化篇(含源码+注释)

热门文章

  1. 单片机课设中期报告_毕业设计中期报告
  2. 彩虹易支付全开源码全新完全开源无任何加密易支付程序
  3. APEX 压枪练习记录
  4. 数字c语言代码大全,C语言代码大全
  5. c语言常用英语带音标,C语言常见英语单词,带音标
  6. 从0开始移植冒险岛online,和小伙伴一起在局域网或私服怀旧吧
  7. android 静默暗转_Android 7.0 静默安装
  8. python下载所有 XKCD 漫画
  9. 软件工程实验报告1-可行性分析
  10. 爱奇艺推出“帧绮映画MAX”标准打造高品质视听 多款电视机型获认证