1.1.MySQL逻辑架构

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节课后讨论@圈圈圆圆的回答.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容