《MySQL实战45讲》笔记一:基础架构

一、MySQL主要组件

MySQL逻辑架构图

1. 连接器

主要功能:与客户端建立连接,获取权限,管理和维护连接
动态修改用户的权限不会影响该用户已经存在的连接权限,新建连接以使用新权限。
连接完成后,没有后续操作,连接会处于sleep空闲状态,命令show processlist查看连接状态。客户端太长时间没有动静时连接会自动断开,控制时间由wait_timeout参数控制,默认为8小时(28800s)。

查看连接状态

长连接:连接建立后,如果客户端持续进行请求,则一直使用该连接,连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接。
短连接:每次执行完次数较少次数的查询后就断开连接,下次查询时再建立新的连接,连接-》数据传输-》关闭连接。
建立连接过程复杂,消耗资源,应尽量避免频繁创建连接,使用长连接;使用长连接后,有时MySQL所占用的内存会上涨较快,因为在执行过程中,临时使用的内存是存放在连接对象中的,在连接断开时才会释放这些资源。所以长期累积会导致内存占用过大,被系统强行杀掉(OOM),现象上看则是MySQL异常重启。
解决方案:

  1. 定期断开长连接,使用一段时间或程序中判断执行过一个占用内存较大的查询后,断开连接,后续查询重新建立连接。
  2. 若使用5.7或更新版本,在执行比较大操作后,执行mysql_reset_connection重新初始化连接资源;该过程不需要重连和权限验证,同时会恢复至连接刚创建完的状态。

2. 查询缓存

收到查询请求时,会先查询缓存,判断是否执行过这条语句,执行过的语句和结果以key-value的形式缓存在内存中,有对应的缓存则直接返回给客户端。

注意:大多数情况下不建议使用查询缓存,弊大于利

  • 查询缓存非常容易失效,对一个表进行更新时,该表的所有缓存会全部失效,所以可能存在刚缓存还未使用时就被清空。
  • MySQL提供按需使用的方式,参数query_cache_type设置未DEMAND,则对于默认的SQL不使用查询缓存,需要使用缓存的SQL用sql_cache显示指定。select SQL_CACHE * from T where ID=10;
    8.0版本查询缓存已经删除

3. 分析器

主要功能:解析SQL语句,词法分析(识别字符串分别是什么),语法分析(判断语句是否符合语法)

解析器和预处理器

  • 解析器处理语法和解析查询, 生成一课对应的解析树。
  • 预处理器进一步检查解析树的合法。比如: 数据表和数据列是否存在, 别名是否有歧义等。如果通过则生成新的解析树,再提交给优化器。

4. 优化器

主要功能:表中有多个索引是决定使用哪个索引;或在语句有多表关联(join)时决定表的连接顺序

5. 执行器

执行语句;开始执行时,判断是否有对应表的查询权限,没有则返回没有权限错误;如果命中缓存,会在查询缓存放回结果时做权限验证。
查询在优化器之前也会precheck验证权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值