MySQL的分层

本文详细阐述了MySQL架构的三个主要层次——网络连接层、SQL层和存储引擎层,包括连接管理、线程池与连接池的区别,SQL层的功能、流程和优化,以及存储引擎如InnoDB、MyISAM的特点。特别强调了查询缓存的局限性和现代版本的调整。
摘要由CSDN通过智能技术生成

MySQL的架构通常简化为三个主要层级:网络连接层、SQL层和存储引擎层。网络连接层和SQL层又可以统称为Server层

1. 网络连接层

1.介绍与作用

  • 网络连接层主要有连接池和线程池。主要用于连接与线程处理。比如连接处理、授权认证、安全等。(通信协议,线程,验证)

2.连接管理方式

  • No-Threads:处理连接使用主线程处理,不额外创建线程,这种方式主要用于调试;
  • One-Thread-Per-Connection:是线程池出现以前最常用的方式,为每一个连接创建一个线程服务;
  • Pool-Threads:则是线程池方式。

3.连接池与线程池

每创建一个新的会话,mysql内部创建一个新的用户线程来提供服务,当连接被销毁,线程也被销毁。即一个连接有一个线程。这种创建链接和销毁链接都会消耗cpu性能。为了降低这种消耗,有了连接池和线程池。

连接池

在客户端部署。客户端创建预先创建一定的连接,利用这些连接服务客户端所有的DB请求。如果某一个时刻,空闲的连接数小于DB的请求数,则需要将请求排队,等待空闲连接处理。通过连接池可以复用连接,避免连接的频繁创建和释放,从而减少请求的平均响应时间,并且在请求繁忙时,通过请求排队,可以缓冲应用对DB的冲击。当连接断开,连接将回归连接池,从而提高性能。但是mysql的连接池不能获取mysql server的查询处理能力以及当前的负载情况。

线程池

在服务器端部署。通过创建一定数量的线程服务DB请求,有了线程池,当有了新连接,可以直接从线程池里拿线程,断开时,也不销毁线程,而是回放进线程池。通过线程池,可以将server端的服务线程数控制在一定的范围,减少了系统资源的竞争和线程上下切换带来的消耗,同时也避免出现高连接数导致的高并发问题。

2. SQL层

1.sql层功能

解析器,授权,优化器,查询执行,查询高速缓存,查询日志记录,跨存储引擎功能。

解析器:解析SQL语法,形成语法树
授权:SQL的权限验证 *.*对于指定的库和表
优化器:CBO(基于成本的优化),根据统计信息–> SQL改写 —>执行计划(即选哪种算法执行)

2.sql层流程

用户传入sql->查询缓存(命中缓存可直接返回结果)->解析器(生成sql解析树)->预处理器(可能sql等价改写)->查询优化器(生成sql执行计划)->查询执行引擎->结果返回给用户。

注意:因为查询缓存过于鸡肋现在已经不再使用,也不推荐使用。

3.SQL接口:

功能:接受用户的SQL命令,并且返回用户需要查询的结果。

4.解析器:(Parser)

SQL命令传递到解析器的时候会被解析器验证和解析(进行语义和语法的分析,分解成数据结构,如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的 ),生成sql解析树。解析器是由Lex和YACC实现的,是一个很长的脚本。

5.查询优化器:(Optimizer)

SQL语句在查询之前会使用查询优化器对查询进行优化,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果,即执行计划。查询优化器使用选取-投影-联接策略生成执行计划。

6.查询缓存功能(Cache和Buffer):(建议关闭)

当执行sql的时候,ql第一次被执行,然后再次执行的时候如果相同的sql,可以不进行解析,直接返回结果,提高查询效率。但是局限性比较大,任何查询结果有变更,都需要进行更新,对于mysql性能影响比较严重,整个更新过程的锁颗粒度的比较高,还持有全局锁,效率很低。在mysql8.0里没了查询缓存功能。

关闭查询缓存:query_cache_type = 0 query_cache_size = 0

3. 存储引擎层

存储引擎,也称为表类型,真正的负责了MySQL中数据的存储和提取,储存引擎层由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。存储引擎不会互相通信。不同的存储引擎采用不同的技术(存储机制、索引机制、锁定机制)存储数据。MySQL的存储引擎是插件式的,也就是说,用户可以随时切换MySQL的存储引擎:针对表或针对库都可(通过SQL语句命令)。MySQL集合了多种引擎:MyISAM、InnoDB、BDB、Merge、Memory等,默认的是InnoDB。

  • InnoDB:持事务安全。但是对比MyISAM引擎,写的处效率会差些
  • MyISAM:支持事务,插速度般innodb快一些
  • Memory:数据存储于内存之中
  • CSV:数据存储为CSV件格式,不进转换
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值