MySQL运行原理与基础架构

下面是关于上述部件的介绍:

1. connectors

与其他编程语言中的sql 语句进行交互,如php、java等。

2. Management Serveices & Utilities

系统管理和控制工具

3. Connection Pool (连接池)

管理缓冲用户连接,线程处理等需要缓存的需求

4. SQL Interface (SQL接口)

接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

5. Parser (解析器)

SQL命令传递到解析器的时候会被解析器验证和解析。

主要功能:

a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,后面SQL语句的传递和处理就是基于这个结构的

b.  如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的,语句将不会继续执行下去

6. Optimizer (查询优化器)

SQL语句在查询之前会使用查询优化器对查询进行优化(产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果) 他使用的是“选取-投影-联接”策略进行查询。

用一个例子就可以理解: select uid,name from user where gender = 1;

这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤

这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤

将这两个查询条件联接起来生成最终查询结果.

7. Cache和Buffer (查询缓存)

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

8.Engine (存储引擎)

存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。

Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)

-+-----------------------------------------------------------------------------------+-

SQL 语句执行过程

数据库通常不会被直接使用,而是由其他编程语言通过SQL语句调用mysql,由mysql处理并返回执行结果。那么Mysql接受到SQL语句后,又是如何处理的呢?

首先程序的请求会通过mysql的connectors与其进行交互,请求到处后,会暂时存放在连接池(connection pool)中并由处理器(Management Serveices & Utilities)管理。当该请求从等待队列进入到处理队列,管理器会将该请求丢给SQL接口(SQL Interface)。SQL接口接收到请求后,它会将请求进行hash处理并与缓存中的结果进行对比,如果完全匹配则通过缓存直接返回处理结果;否则,需要完整的走一趟流程:

(1)由SQL接口丢给后面的解释器(Parser),上面已经说到,解释器会判断SQL语句正确与否,若正确则将其转化为数据结构。

(2)解释器处理完,便来到后面的优化器(Optimizer),它会产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果。

(3)确定最优执行计划后,SQL语句此时便可以交由存储引擎(Engine)处理,存储引擎将会到后端的存储设备中取得相应的数据,并原路返回给程序。

这里有几点需要注意:

(1)如何缓存查询数据?

存储引擎处理完数据,并将其返回给程序的同时,它还会将一份数据保留在缓存中,以便更快速的处理下一次相同的请求。具体情况是,mysql会将查询的语句、执行结果等进行hash,并保留在cache中,等待下次查询。

(2)buffer与cache的区别?

从上面的图可以看到,缓存那里实际上有buffer和cache两个,那它们之间是否有什么不同呢?简单的说就是,buffer是写缓存,cache是读缓存。

(3)如何判断缓存中是否已缓存需要的数据

这里可能有一个误区,觉得处理SQL语句的时候,为了判断是否已缓存查询结果,会将整个流程走一遍,取得执行结果后再与需要的进行对比,看看是否命中,并以此说,既然不管缓存中有没有缓存到查询内容,都要整个流程走一遍,那么缓存的优势又在哪里??

实际上,并非如此,在第一次查询后,mysql便将查询语句以及查询结果进行hash处理并保留在缓存中,SQL查询到达之后,对其进行同样的hash处理后,将两个hash值进行对照,如果一样,则命中,从缓存中返回查询结果;否则,需要整个流程走一遍。

原文地址:http://blog.51cto.com/xiaocao13140/2105952

时间: 2024-07-30 08:39:35

MySQL运行原理与基础架构的相关文章

nginx负载均衡和mysql主主被动模式基础架构综合部署

1.结构思路 准备用5个虚机,一个虚机安装nginx来配置负载均衡,两个虚机做web服务器,另外两个虚机,安装mysql,做主主被动配置,每次web只读取一个mysql服务. 2.具体实施步骤 用vmware最小化安装5个虚机,我用的是centos7,可以克隆. 配置两个虚机web服务,我这里用wordpress.架构可以用lamp,也可以用lnmp,我这里用lnmp.注意web连接的mysql不是在本地,启用的是另外一个虚机的mysql. 配置虚机的nginx负载均衡. 配置两个虚机的mysq

Silverlight运行原理

Silverlight运行原理 Silverlight通过什么方式和服务器端的托管代码进行交互. Silverlight也许是把托管dll下载到本地执行. 用工具跟踪http请求后,果然如此. 1. IE加载页面后.IE缓存中加载了 HTML页面.Silverlight.JS.XAP应用程序包. clip_image002[7] 2.FF调试网络通信发现.先加载HTML页面-- Silverlight.JS---得到一个LInkID--- XAP应用程序包—安装Silverlight的图片 cl

计算机运行原理与操作系统基础

一.冯诺依曼体系 使用二进制 数据和代码存储在一起 存储器是按地址访问的线性编制的一维结构. 二.计算机五大部件 运算器(CA).控制器(CC).存储器(M,内存+外存).输入设备(I).输出设备(O) 三.计算机运行原理 五大部件中,以控制器为中心的指令流和以运算器为中心的数据量贯通其中,从而得出结果. 四.操作系统基础 目前大家所知道的操作系统有windows,mac,linux,unix等. 操作系统是运行在系统硬件上用于整合硬件资源的系统软件. 主要包括存储管理.进程管理.文件管理.设备

MySQL基础架构

前段时间订阅了<Mysql实战45讲>(从原理到实战),新的一年为自己充充电.对于这部分内容,我所知道的只来源于我大学里学习的课程<数据库原理>,在大学里学习的只是简单的查询,增加,删除,索引,锁,触发器,视图等内容.几乎没有基础的架构知识.因此在这里巩固一下原理,学习一下数据库Mysql在原理上究竟是怎样的. 首先我们一起看一个Mysql的基本架构示意图: 1.Mysql可以分为Server层和存储引擎层两部分. 2.Server层:包含连接器,查询缓存,分析器,优化器,执行器等

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

【转载】Spark系列之运行原理和架构

参考 http://www.cnblogs.com/shishanyuan/p/4721326.html 1. Spark运行架构 1.1 术语定义 lApplication:Spark Application的概念和Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序,包含了一个Driver 功能的代码和分布在集群中多个节点上运行的Executor代码: lDriver:Spark中的Driver即运行上述Application的main()函数并且创建SparkCon

Atitit.&#160;数据约束&#160;校验&#160;原理理论与&#160;架构设计&#160;理念模式java&#160;php&#160;c#.net&#160;js&#160;javascript&#160;mysql&#160;oracle

Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq  index2 3. 检查约束 (Check Counstraint) 对该列数据的范围.格式的限制(如:年龄.性别等)2 4. 默认约束 (Default Counstraint) 该数据的默认值2 5. trigger2 6. 外键机制  参照完整性:2 7. 断言约束:不必与特定的列绑定,可以理解为能应用于多个表的

区块链技术系列(3)- Fabric基础架构原理

前言 对于区块链方面多技术,我还是建议大家多看英文文档,多利用Google来搜索技术文章. 怎么搭建自己专属V-P-N来访问Google,请看我之前发的文章: 新人如何快速搭建自己的个人网站以及自己专属V-P-N代理 Linux基金会于2015年12月启动了名为"超级账本"(Hyperledger)的开源项目,旨在推动各方协作,共同打造基于区块链的企业级分布式账本底层技术,用于构建支撑业务的行业应用和平台. 超级账本里包括10个项目(project),其中区块链框架类项目5个:Fabr

高性能MySQL之基础架构

一.背景 为什么我们需要先学习MYSQL的基础架构先呢? 原因很简单,当我们需要了解一件事物的时候,我们只有站在宏观的层面,才能层层剥丝抽茧的去理解问题.举个例子,我们要看一个框架的源码,一开始就想进去研究,却发现找不着北,原因很简单,因为我们没有鸟瞰全貌,我们根本不知道入口在哪里.因此我们学习MYSQL的时候也是这样.先从高纬度理解问题,最后看到里面有哪些组件,一层层的拆解,这样让我们对mysql有更深入的理解.废话不多说,我们先看总体的逻辑架构图,如下所示. 二.Mysql总体逻辑架构 从图