MySQL 的逻辑架构图
-
Server 层涵盖 MySQL 的大多数核心服务功能以及所有的内置函数
-
所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等
-
存储引擎层负责数据的存储和提取(架构模式是插件式的
- MySQL 5.5.5 版本开始 InnoDB 成为了默认存储引擎
- 不同的存储引擎共用一个 Server 层
-
连接器
-
负责跟客户端建立连接、获取权限、维持和管理连接
-
成功建立连接后,更换该账户权限不会影响已经存在的连接权限
- 新建的连接才会使用新的权限设置
-
show processlist
- 空闲连接:Command 列显示为 “Sleep” 的行
- 参数 wait_timeout 控制空闲连接自动断开的(默认: 8 小时
- 断开后,客户端显示 Lost connection to MySQL server during query
-
长连接:连接成功后,如果客户端持续有请求,则一直使用同一个连接
- 建立连接的过程通常是比较复杂的,推荐尽量使用长连接
- 内存占用过大:执行过程中临时使用的内存是管理在连接对象里面的,只在连接断开时才释放
- 解决方式:
- 定期断开长连接(再使用时重连
- MySQL 5.7 以后,通过执行 mysql_reset_connection 来重新初始化连接资源
-
短连接:每次执行完很少的几次查询就断开连接,下次查询再重新建立一个
-
-
查询缓存
- 缓存:key-value 对的形式
- 查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空
- 更新压力大的数据库来说,查询缓存的命中率会非常低
- 静态表推荐可以使用(类似于 配置表
- 按需使用:query_cache_type 设置成 DEMAND 时,只先显式使用 SQL_CACHE 才使用查询缓存
- MySQL 8.0 版本 开始移除此功能