mysql是最广泛使用的开源数据库之一,作为后端开发人员,或多或少都会和mysql打交道,本篇文章会从sql查询语句的执行过程,来介绍mysql的服务器架构,

查询的过程大致分为从客户端到服务器,在服务器上解析,生成执行计划,执行,并返回结果给客户端。如下图1.1所示。

图1.1 sql查询执行路径

1.1 连接器

连接器对客户端的连接请求进行用户名和密码的验证,并会管理连接池。客户端和服务器为“半双工”通信协议,客户端和服务器无法同时发送消息,当服务器向客户端发送查询结果时,必须全部返回,客户端不能主动停止,mysql需要等所有的数据都发送给了客户端才会释放本次查询所占用的资源,因此大多数库函数都会接收结果并缓存在客户端,以使查询早点结束,减轻服务端压力。

对于连接到mysql的客户端,可以用show full processlist查看连接状态,该状态表示了mysql当前在做什么,一个查询完整的生命周期,状态会变很多次。

在show full processlist中,字段command表示线程正在执行的命令类型,The type of command the thread is executing,一般就是休眠(sleep),查询(query),连接 (connect),含义如下:

  • sleep,线程正在等待客户端发送新的请求。
  • query,线程正在执行查询或将结果返回客户端。
  • connect,正在建立连接。

show full processlist最重要的字段是state,Most states correspond to very quick operations. If a thread stays in a given state for many seconds,there might be a problem that needs to be investigated.An action, event, or state that indicates what the thread is doing,表示线程处于某一状态下具体正在做什么,值的含义如下:

  • Locked,在Mysql服务器层,线程正在等待锁,这里不包括innodb存储引擎实现的行锁
  • Analyzing and statistics,线程正在收集存储引擎的统计信息,并生成查询的执行计划。
  • Copying to tmp table [on disk],线程正在执行查询,并将结果放在临时表,带有on disk,表示mysql在将内存临时表存入磁盘。
  • Sorting result,线程正在对结果集排序。
  • Sending data,线程正在多个状态间传送数据,或者在生成结果集,或者向客户端返回数据。

1.2 查询缓存

在解析sql语句之前,mysql会从查询缓存中获取数据,具体是一个大小写敏感的哈希查找,sql语句必须和缓存中的sql语句完全匹配,否则不会命中,对于更新比较频繁的数据库,经常会导致缓存失效,建议将查询缓存关闭。

1.3 分析器

假如查询缓存没有命中,则会进入分析器,对sql语句进行词法和语法分析,并会进行预处理,以便知道此sql语句是要做什么。它会验证是否使用错误的关键字,关键字顺序是否正确等。并且,预处理会根据一些规则对解析树的合法性进行进一步校验,比如检查数据表和列是否存在,解析名字和别名,看看是否有歧义等,如下图1.2经常遇到的语法错误就在这一阶段

图1.2 sql语法错误提示

1.4 优化器

sql语句经过分析器分析合法,需要经过查询优化器转化成执行计划,查询优化器解决的是怎么做的问题,相同的sql语句,返回相同的结果集,有很多种执行方式,查询优化器就是要选择性能较好的一种。

mysql是基于成本的优化器,会预测一个查询使用某种计划时的成本,并选择其中成本最小的一种,可以通过Last_query_cost值查询到当前会话查询的成本。很多原因会导致mysql优化器选择错误的执行计划,比如:统计信息不准、不考虑其他并发执行的查询,执行计划太多,无法估算所有的计划等。

1.5 查询执行引擎

查询执行引擎根据优化器生成的执行计划(执行计划是一种数据结构,而不是字节码),调用存储引擎接口,完成执行计划中的所有操作。mysql将查询结果返回客户端是一个增量、逐步返回的过程。开始生成第一条结果,mysql就可以开始向客户端返回数据。这样做服务端无需存储太多结果,减小了服务端内存的消耗压力,另外,客户端也可以第一时间获得返回的结果。

mysql服务器架构的更多相关文章

  1. MySql服务器逻辑架构

    一.MySql服务器逻辑架构图         每个虚线框都是一层: 第一层:最上层的服务器不是MySql所独有的,大多数基于网络的客户端/服务器工具或者服务都有类似的系统.比如链接处理,授权认证,安 ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. mysql 逻辑架构

    1.mysql是基于网络的客户端/服务器架构,服务器上层是连接线程,解析器,查询缓存,下层是存储引擎. 2.每个客户端连接,服务器都有一个对应的线程,这个线程只为这个连接查询服务,高版本的mysql支 ...

  4. MySQL 主从架构配置详解

    无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为开发人员,特别是后端开发人员的一项必备技能.MySQL 数据库内建的复制功能,可以帮助我们对数据进行异地备份,读写 ...

  5. Windows平台网站图片服务器架构的演进[转]

    构建在Windows平台之上的网站,往往会被业内众多架构师认为很“保守”.很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成 的.由于长期缺乏开源支持,所以只能“闭门造车”,这样很容易形成 ...

  6. QQ游戏百万人同时在线服务器架构实现

    转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...

  7. 高性能mysql主存架构

    原文:高性能mysql主存架构 MySQL Replication(Master与Slave基本原理及配置) 主从mysql工作原理: 1:过程: (1)Mysql的复制(replication)是一 ...

  8. mysql的架构

    和其他数据库相比,mysql有点与众不同,它的架构可以在多种不同场景中应用并发挥好的作用,而理解其设计是发挥好作用的先决条件 每当我们在想起mysql的逻辑架构师,我们可以构造一副mysql各组件之间 ...

  9. Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)

    什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...

随机推荐

  1. python 文件与数据格式化

    https://www.cnblogs.com/li-zhi-qiang/p/9269453.html       文件和数据格式化 https://www.cnblogs.com/li-zhi-qi ...

  2. Activiti工作流数据库表详细介绍

    Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...

  3. ecshop自动确认收货(无其他商家)

    1.创建文件 includes/modules/auto_order_confirm.php 代码:(思路:对已经发货和已经付款的订单检索,对比发货时间与当前时间的间隔,达到设定时间则自动收货) &l ...

  4. storm学习总结

    1.storm shell端常用指令: 提交Topologies命令格式:storm jar [jar路径] [拓扑包名.拓扑类名] [拓扑名称]样例:storm jar /storm-starter ...

  5. unigui 1.90.0 Example

    Example//-------------------------------------1:[UNG-2783] - ReCaptcha -------//无法显示 //------------- ...

  6. ASP.NET MVC项目中App_Code目录在程序应用

    学习ASP.NET MVC,如果你是开发ASP.NET MVC项目的,也许你去为项目添加前ASP.NET项目的APP_Code目录,在这里创建与添加的Class类,也许你无法在MVC项目所引用. 那这 ...

  7. 大叔学ML第二:线性回归

    目录 基本形式 求解参数\(\vec\theta\) 梯度下降法 正规方程导法 调用函数库 基本形式 线性回归非常直观简洁,是一种常用的回归模型,大叔总结如下: 设有样本\(X\)形如: \[\beg ...

  8. 【渗透技术】渗透测试技术分析_TomCat

    [渗透技术]渗透测试技术分析_TomCat 本文转自:i春秋论坛 渗透测试-中间人攻击(原理)说起“中间人攻击”我想大多数对渗透测试又了解的朋友都多少有所了解,因为我们用到的次数真是非常的多.它可以将 ...

  9. 一键访问Google和YouTube等国外知名网站

    1.首先打开快速安全通道网站,点击注册!网站地址 https://www.faststunnel.xyz/GWx6uy0M 2.注册好之后下载插件 3.将插件下载完后拖到浏览器安装 4.登录插件,即可 ...

  10. Spring详解(八)------事务管理

    PS:本篇博客源码下载链接:http://pan.baidu.com/s/1mi3NhX2 密码:3io2 1.事务介绍 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指 ...