1.mysql基础架构

咳咳分享七篇笔记,建议大家还是先去看看书看看专栏在查漏补缺一下,不介意新手看,主要是今天想摸鱼不想学习了,时不时更新

基础架构

  • 1. MySQL可以分为Server层存储引擎层两部分;server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖了大多数核心服务,以及所有的内置函数、跨存储印象的功能也在这一层(存储过程、触发器、试图等)

  • 2. 储存引擎层复制数据的存储提取 ,其架构模式是插件式的,目前最常用的引擎是innoDB== mysql5.5.5成为默认存储引擎

  • 3.执行建表语句,不知道存储引擎类型默认使用innoDB, 可以指定别的存储引擎,比如 在建表语句中使用engine=memory,指定使用内存引擎常见表

  • 4.不同的存储引擎公用一个Server层


1.连接器

  • 1.一个用户成功建立连接后,即使用root对这个用户权限进行修改,不会影响已经存在连接的权限。只有新建的连接才会使用新的权限设置

  • 2.连接完成后,如果没有后续动作,连接处于空闲状态,但仍可以在show processlist中看到。客户端太长时间没动静,连接器自动断开,时间由wait_timeout控制,默认时间为8小时

  • 3.长连接指连接成功后,客户端持续请求,则一直使用同一个连接 ;短连接指每次执行很少几次查询后断开连接,下次查询重新建立连接。
    建立连接过程复杂,使用中尽量避免

  • 4.全部长连接,Mysql内存涨的很快,mysql执行过程中临时的内存是管理在连接对象里面的,资源在断开的时候释放。
    长时间积累内存过大,会被系统强行OOM也就是杀掉,现象来看是mysql重启
    解决方式:

1)定期断开长连接。或者程序内判断占用内存大查询后,断开连接,查询在重连。
2)如果用的是MySQL 5.7或更新版本,可以每次执行较大操作,通过mysql_reset_connection来重新初始化连接资源。过程不需要重连和重新权限验证,但会将连接恢复到刚创建的状态


2.查询缓存(执行命令逻辑)

  • 1.mysql拿到查询请求,先查看内存缓存,是不是执行过改语句。
    执行过的的语句及结果可能会以key value形式直接缓存到内存。
    key是查询的语句,value是查询的结果
    如果查询在缓存中找到key,value会直接返回客户端

  • 2.如果语句不在查询缓存中,继续执行,执行结束存入查询缓存。 查询命中缓存,mysql不需要执行后面复杂操作,直接返回。
    查询缓存弊大于利,失效频繁,对一个表进行更新,该表所有查询缓存都会被清空

  • 3.按需使用:,将参数query_cache_type,对默认的sql都不是有查询缓存
    确认使用查询缓存的语句,使用SQL
    CACHE
    显式指定 如:

select SQL_CACHE * from T where ID=10;

mysql8.0删除了此功能没有了查询缓存


3.分析器(没有命中缓存,真正执行语句

  • 没有命中缓存,分析器会词法分析,输入组成的查询语句,mysql需要识别字符串是什么代表什么。

4.优化器(分析后,进行优化器处理

  • 优化器在表内有多个索引的时候,决定使用哪个索引,或者多表连接决定表的连接顺序,多种方法取效率最高的

5.执行器(优化后,执行

  • 1.执行器执行前判断用户有没有执行查询权限

  • 2.如果有权限打开表继续执行,打开表过程执行器根据表的引擎定义,使用对应提供的接口

  • 3.在慢查询日志中看到rows
    examined
    字段,表示语句执行扫描了多少行,此字段是执行器每次调用引擎获取行时累加的

  • 4.一些场景,执行器调用一次,引擎内部扫描了多行,引擎扫描行数和rows
    examined宾补完全相同

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值