MySQL体系结构!
MySQL体系结构!
月伴飞鱼服务器处理客户端请求:
不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:
- 客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。
连接管理:
每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互。
当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来。
在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。
这样就起到了不频繁创建和销毁线程的效果,从而节省开销。
MySQL
服务器会为每一个连接进来的客户端分配一个线程,但是线程分配的太多了会严重影响系统性能。
- 所以也需要限制一下可以同时连接到服务器的客户端数量。
查询缓存:
MySQL
服务器会把刚刚处理过的查询请求和结果缓存
起来,如果下一次有一模一样的请求过来,直接从缓存中查找结果就好了。这个查询缓存可以在不同客户端之间共享,也就是说如果客户端A刚刚查询了一个语句。
而客户端B之后发送了同样的查询请求,那么客户端B的这次查询就可以直接使用查询缓存中的数据。
如果两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。
如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表。
- 如
mysql 、information_schema、 performance_schema
数据库中的表,那这个请求就不会被缓存。MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改。
如对该表使用了
INSERT
、UPDATE
、DELETE
、TRUNCATE TABLE
、ALTER TABLE
、DROP TABLE
或DROP DATABASE
语句。那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。
从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
存储引擎:
各种不同的存储引擎向
MySQL server
层提供统一的调用接口(也就是存储引擎API),包含了几十个底层函数。在
MySQL server
完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。