背景


MySQL 可以分为 Server 层和存储引擎层两部分。



基础架构示意图




mysql inc 偶尔执行两次 mysql 出现次数_MySQL


连接层


如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。
之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。
一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,
也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用
新的权限设置。


    长连接 指连接成功后复用同一个连接,与之为短连接,三次握手四次挥手,
长连接的使用减少了连接的创建 销毁的时间,数据库连接池则是很好的对
连接进行了复用


    在看数据连接池的时候看大一个最大使用次数的参数,自己内心在想,一定
需要设定最大使用次数吗?既然连接可以复用,一直使用就可以了,干嘛还
需要设定最大使用次数,这到底是为什么呢?

MySQL在执行过程中临时使用的内存是管理在连接对象中的,这些资源是需要爱连接
断开时才会释放,所以长时间累计下来,导致内存占用太大,被系统强行杀掉(OOM),
从现象上看是MySQL重启,所以使用长连接的时候,MySQL内存会涨的特别快,进而
在使用连接池的时候 需要设置最大使用次数。

另外在5.7版本后可以在执行一个比较大的操作后,执行mysql_reset_connection来
重新初始连接资源


查询缓存


执行逻辑的第二步,若缓存中有,则直接返回。但是不建议使用查询缓存,
因为,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有
的查询缓存都会被清空,使用查询缓存弊大于利。

可以将参数 query_cache_type 设置成 DEMAND


分析器


分析语法


优化层


优化器决定选择哪个方案,执行语句


执行器


先检查针对表是否有执行查询的权限