背景
MySQL 可以分为 Server 层和存储引擎层两部分。
基础架构示意图
连接层
如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。
之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。
一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,
也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用
新的权限设置。
长连接 指连接成功后复用同一个连接,与之为短连接,三次握手四次挥手,
长连接的使用减少了连接的创建 销毁的时间,数据库连接池则是很好的对
连接进行了复用
在看数据连接池的时候看大一个最大使用次数的参数,自己内心在想,一定
需要设定最大使用次数吗?既然连接可以复用,一直使用就可以了,干嘛还
需要设定最大使用次数,这到底是为什么呢?
MySQL在执行过程中临时使用的内存是管理在连接对象中的,这些资源是需要爱连接
断开时才会释放,所以长时间累计下来,导致内存占用太大,被系统强行杀掉(OOM),
从现象上看是MySQL重启,所以使用长连接的时候,MySQL内存会涨的特别快,进而
在使用连接池的时候 需要设置最大使用次数。
另外在5.7版本后可以在执行一个比较大的操作后,执行mysql_reset_connection来
重新初始连接资源
查询缓存
执行逻辑的第二步,若缓存中有,则直接返回。但是不建议使用查询缓存,
因为,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有
的查询缓存都会被清空,使用查询缓存弊大于利。
可以将参数 query_cache_type 设置成 DEMAND
分析器
分析语法
优化层
优化器决定选择哪个方案,执行语句
执行器
先检查针对表是否有执行查询的权限