美文网首页程序员
1.1.MySQL逻辑架构

1.1.MySQL逻辑架构

作者: 老苏GO | 来源:发表于2019-10-30 23:11 被阅读0次

MySQL逻辑架构

image image

最上层的基于C/S架构模式, 即Client端.

第二层是大多数MySQL的核心服务.查询解析/分析/优化/缓存以及所有的内置函数(例如, 日期/时间/数学和加密函数等). 所有跨存储引擎的功能都在这一层实现: 存储过程 触发器 视图等.

第三层为存储引擎层. 存储引擎负责MySQL中数据的存储和提取. 存储引擎不会去解析SQL(innodb例外, 它会解析外键定义, 因为MySQL服务器本身没有实现该功能). 不同存储引擎之间不会相互通信, 而只是简单的响应上层服务器的请求. 服务器通过API与存储引擎进行通信, 这些API屏蔽了不同存储引擎之间的差异, 使得这些差异对上层的查询过程透明. 现在最常用的存储引擎是InnoDB, 从MySQL5.5.5版本成为默认存储引擎.

连接管理和安全性

每个客户端连接都会在服务器进程中拥有一个线程, 这个连接的查询只会在这个单独的线程中执行, 该线程只能轮流在某个CPU核心或者CPU中运行. 服务器会负责缓存线程, 因此不需要为每一个新建的连接创建或者销毁线程(MySQL5.5或者更新的版本提供了一个API, 支持线程池(Thread-Pooling)插件, 可以使用池中少量的线程来服务大量的连接.

连接器负责跟客户端建立连接|获取权限|维持和管理连接. 连接命令一般如下形式:

mysql -h$ip -P$port -u$user -p

通过如下语句可以查看当前连接的信息:

mysql> show processlist;
+----+------+--------------------+-------+---------+------+----------+------------------+
| Id | User | Host               | db    | Command | Time | State    | Info             |
+----+------+--------------------+-------+---------+------+----------+------------------+
|  5 | root | 192.168.33.1:57721 | mysql | Sleep   |   29 |          | NULL             |
|  6 | root | localhost          | NULL  | Query   |    0 | starting | show processlist |
+----+------+--------------------+-------+---------+------+----------+------------------+
2 rows in set (0.00 sec)

其中"Sleep"代表现在系统里面有一个空闲连接.

客户端如果太长时间不活动, 连接器就会自动断开. 这个是由等待超时时间wait_timeout控制的,默认值是8小时.

数据库长连接: 指连接成功后, 如果客户端持续有请求, 则一直使用同一个连接.

数据库短连接: 指每次执行完很少的几次查询后就断开连接, 下次查询重新再建立一个.

两种连接实践方案:

  1. 定期断开长连接. 使用一段时间, 或者程序里面判断执行过一个占用内存的大查询后, 断开连接, 之后要查询再重连.
  2. 如果使用的MySQL版本是5.7或更新版本, 可以在执行一个比较大的操作后, 通过执行mysql_reset_connection来重新初始化连接资源. 这个过程不需要重连和重新做权限验证, 但是会将连接恢复到刚刚创建完时的状态.

查询缓存

对于SELECT语句, 在解析查询之前, 服务器会先检查查询缓存(Query Cache), 如果能够在其中找到对应的查询, 服务器就不用再执行查询解析--优化--执行的整个过程了, 而是直接返回查询缓存中的结果集.

极客时间<MySQL实战45讲>中: 大多数情况下不建议使用查询缓存

原因: 查询缓存的实效非常频繁, 只要有对一个表的更新, 这个表上的查询缓存都会被清空. 对于更新压力大的数据库, 查询缓存的命中率会非常低. 除非有一张静态表(很长时间才更新一次), 比如, 一个系统配置表, 那么就比较适合使用查询缓存.

MySQL提供了"按需使用"查询缓存的方式. 将参数query_cache_type设置为DEMAND, 这样对于默认的SQL语句都不使用查询缓存. 而对于确定要使用查询缓存的语句, 可以用SQL_CACHE显式指定, 例如:

mysql> select SQL_CACHE * from T where ID=10;

注意: MySQL8.0版本直接查询缓存的整块功能删掉了.MySQL8.0版本功能变更介绍

分析器

  • 词法分析
  • 语法分析

优化器

  • 选择合适的索引
  • 决定各个表的连接顺序

执行器

  1. 判断对这个表有没有查询权限
  2. 有权限, 则继续执行.
  3. 调用存储引擎接口进行执行查询或其他操作.
  4. 最终将查询结果集返回给客户端, 语句即执行完成.

问题

如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在哪个阶段报出来的呢?

答案

分析器.

MySQL会解析查询, 并创建内部数据结构(解析树). 分析器会检查: 数据表和数据列是否存在, 别名是否有歧义等. 所以此为分析器阶段. ----- 参考自<MySQL实战45讲> 01节课后讨论@圈圈圆圆的回答.

相关文章

  • MySQL深入学习

    mysql 1.存储引擎 1.1.mysql逻辑架构 Connectors:C,PHP,JDBC,ODBC,.NE...

  • 1.1.MySQL逻辑架构

    MySQL逻辑架构 最上层的基于C/S架构模式, 即Client端. 第二层是大多数MySQL的核心服务.查询解析...

  • 架构设计的5视图方法

    架构设计的5视图方法: 逻辑架构,开发架构、运行架构、物理架构、数据架构 1.逻辑架构 逻辑架构关注功能,不仅包括...

  • 架构设计的五视图理论

    五视图分别是: 逻辑架构、开发架构、运行架构、物理架构、数据架构。 逻辑架构 逻辑架构着重考虑功能需求,系统应当向...

  • MySQL 架构逻辑和存储引擎

    逻辑架构 MySQL系统架构图系统架构图 MySQL逻辑架构图逻辑架构图 show_profile执行周期 修改配...

  • MySQL的逻辑架构

    MySQL的逻辑架构 MySQL的逻辑架构(from《高性能MySQL》)MySQL逻辑架构,来自:高性能MySQ...

  • 大数据架构

    逻辑架构: 物理架构:

  • 19-03 Adaptive AUTOSAR 架构 概述(3)-

    3 架构 3.1 逻辑层架构 下面显示了AP的逻辑架构.AA(adaptive application)在ARA ...

  • openGauss逻辑架构

    openGauss逻辑架构 了解openGauss逻辑架构参考文档:https://blog.opengauss....

  • MySQL架构篇

    1. 逻辑架构 1.1 逻辑架构图 1.1.1 连接器(Connectors) ​ ...

网友评论

    本文标题:1.1.MySQL逻辑架构

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