添加mysql服务逻辑架构中服务层怎么连接的

2-mysql架构
一、客户端:
Mysql客户端并不具体指某个客户端软件。
事实上mysql客户端是一种复合的概念。包含:
不同程序语言编写的前端应用程式
所调用的API接口
通俗地讲,只要能够连接数据库并且能够对mysql数据库做操作的软件
二、服务层
Mysql是单进程多线程的
Mysql并不为所有的连接创建线程,创建线程和消除线程本身也是需要消耗系统资源的过程,故mysql有线程缓冲池(缓存已使用的线程),以便承受更大的并发量和访问
三、核心层
四、存储引擎层
存储引擎:查询管理操作数据
Create table t1(id int)
engine=MYISAM;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。MySQL的逻辑架构
MySQL架构的特点:
基于C/S 架构模型
基于线程工作
同时MySQL 是一个独立的进程
客户端:需要专门的客户端工具 可能是SQL的接口访问Mysql&
& & & & & & &要执行SQL语句操作需要用到SQL接口 客户端可能有N多种 对于用户需要提供驱动&
& & & & & & &Connetort 客户端通过连接器连接到服务器上 &服务器上有专门的组件用于响应
& & & & & & &客户端发起的请求 这个组件的名称叫 连接/线程处理& & &&
& & & & & & & & & & &&
& & && & &&
& & &服务器端:包含以下几部分 & & & & &
& & & & &连接/线程处理
& & & & &查询缓存&
& & & & &分析器
& & & & &优化器
& & & & &存储引擎
& & & & &&
& & & &每一个客户端发起一个新的请求都由服务器端的连接/线程处理工具负责接收客户端的请求并开辟一个新的内存空间 在服务器端的内存中生成一个新的线程, 当每一个用户连 & & & &接到服务器端的时候就会在进程地址空间里生成一个新的线程 用于响应客户端请求 用户发起的查询请求都在线程空间内运行, 结果也在这里面缓存并返回给服务器端.线程的 & & & &重用和销毁 都是由连接/线程处理管理器实现的
& & & &综上所述:用户发起请求 连接/线程处理器 开辟内存空间 开始提供查询的机制
& & & &接下来用户发起SQL 查询语句 用户的SQL语句 在连接/线程处理器接收 接收下来后 开始交给服务器端的核心组件来查询 为了加速 MySQL 的查询速度 提供了一个查询缓存 & & & & &空间 如果同一个SQL语句此前被查询过了结果符合某个特定条件 就会保存在查询缓存空间里 &因此第二次执行这条语句的时候 就直接返回结果 这样大大的提高了MySQL检 & & & & &索响应速度。 如果缓存中没有响应的语句(缓存未命中)此时就交给分析器
& & & &分析器分析用户发起的SQL语句 &把语句进行切片 该分析器包括词法分析和语法分析两部分 语法分析器用来分析接收到的语句语法是否正确 如果语法是错误的就不用执行这 条语句了 如果语法分析无误 (syntex 0K !) 接下来就做词法分析, 词法分析 就是把接收到的语句进行切片 一段一段用空格分开 因为分析器分析的结果要送达给解释器 进行 & & & &执行的 &【命令 选项 参数】&
& & & 为什么要进行词法分析呢?
& & & SQL 有个最重要的特点 &在数据库的表中的检索特定字段的数据时 不同数据库不同表 是不一样的 &字段不一样 就必须要把接收到的语句进行切片才能找到特定的字段值
& & & 词法分析后的结果发现没有问题&
& & &分析的结果交给优化器进行优化 &怎么进行优化呢
& & &有N中执行办法 &N中执行路径 &是否用到数据库 执行路径中哪个速度最快 &都是优化过程需要考虑的问题 优化器的主要目的就是从N中执行路径中选择一种最快的 并生成对应 & & &的可执行的二进制格式 并进行执行 ,选一个最优的执行&
& & &执行就是从存储在磁盘中的文件中检索一个最优的数据&
& & &真正存储在磁盘上的数据是由存储引擎管理的, 存储在文件系统或者是裸设备上的数据管理程序
& & &本身能提供给上层应用不同的功能 不同的存储引擎具有不同的特性
--------------------------------------------------------------------------------------------------------------
核心组件包含
&SQL interface
& & &用户发过来的SQL命令都由SQL接口接收
& & &本地API发送来的请求则是由其他机制接收
& & &DML 数据操作语言 &data manipulation language
& & & & &update,delete,&
& & & & e.g. 查询一行数据、删除一行数据、修改一行数据 & & & & // 实现数据本身的操作
& & &DDL 数据定义语言 &data difinition language
& & & & &CREATE,DROP
& & & & &e.g. 创建一个新的数据库、创建一个新的表、创建一个新的索引 & & & &
& & & & &help CREATE TABLE & & & & &
& & &存储过程
& & &触发器
&Parser 分析器
& & &查询事情
& & &对象权限
& & &词法分析句法分析
&Optimizer 优化器
& & &访问路径 执行路径 实现统计
&Caches&Buffers 缓存和缓冲
& & &全局定义
& & &特定的缓存缓冲
&Pluggable Storage Engines &插件式存储引擎
& 数据库提供了大量的数据
& MySQL是提供数据库的管理软件 管理数据库中的数据
& 数据库的物理结构是一个个的文件 逻辑上看是一个个的表
& 如何组织 对应的表怎么转化成物理文件 靠MySQL 提供的存储引擎来实现 一一对应起来
& 用户可以自己选择 因为是插件式的存储引擎 把表和数据文件对应起来
& 存储引擎:将逻辑结构转换成物理结构的程序
& MySQL 插件式存储引擎 使用灵活 最终形成的文件要保存在磁盘分区上 分区上与文件系统相关&
& 数据库对象:&
& & & & 表,二维关系 & & & & & & & & & & & & & // 逻辑上是以表的形式存储
& & & & & & & & & & & & & & & & & & & & & &
& & & & 记录
& & & & 字段
& & & & 索引
& & & & 视图
& & & & 触发器
& & & & 存储过程
& & & & 存储函数
& & & & 时间调度器
& & & & 用户
& & & & 游标
& & &元数据库信息保存在数据中 & & & &&
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & // 物理上对应于一个文件存储&
本文已收录于以下专栏:
相关文章推荐
庖丁解牛之前应该也是对牛的骨架youyige
说起MySQL的查询优化,相信所有人都了解一些最简单的技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作...
1.MySQL整体逻辑架构
我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture)
                   ...
本人从事Java Web开发,在项目开发中会用到很多中间件,本文主要介绍MySQL监控的一点心得和使用,公司DBA也有相应的监控,但是我们的业务比较重要,想做一个备份监控,对MySQL监控需...
跟踪文件里的一些字符串表示的意思:
kdstgr:表示数据块,即表对应的段中除了段头块外的块(存储数据行的)或是索引的对应的段中除了段头块外的块(存储索引条目的)。
Kdusru:  以当前模式读入...
最近拜读了大牛许令波大神的著作《深入分析JavaWeb技术内幕》,感觉颇有受益,决定写一写读书笔记,以作总结。第一章,我们就来讲一讲Web请求过程。
随着Web2.0时代的到来,互联网的网络架构已从传...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
麻雀虽小,五脏俱全。MySQL虽然以简单著称,但其内部结构并不简单。本章从MySQL逻辑组成,物理组成,以及相关工具这几个角度来介绍MySQL的整体架构组成,希望能够让读者对MySQL有一个更全面深入的了解。
逻辑模块组成
总的来说,MySQL可以看成是二层架构,第一层我们通常叫做SQL层(SQL Layer),在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成,包括权限判断,sql解析,执行计划优化,query cache的处理等等;第二层就是存储引擎层(Storage Engine Layer),也就是底层数据存取操作实现部分,由多种存储引擎共同组成。所以,可以用如下一张最简单的架构示意图来表示MySQL的基本架构,如图所示:
虽然从上图看起来MySQL架构非常的简单,就是简单的两部分而已,但实际每一层中都含有各自的很多小模块,尤其第一层SQL Layer,架构相当复杂的。下面我们就分别针对SQL Layer和Storage Engine Layer做一个简单的分析。
SQL Layer中包含了多个子模块,下面我将逐一做一下简单的介绍:
初始化模块
顾名思议,初始化模块就是在MySQL Server 启动的时候,对整个系统做各种各样的初始化操作,比如各种buffer,cache 结构的初始化和内存空间的申请,各种系统变量的初始化设定,各种存储引擎的初始化设置,等等。
核心API模块
核心API 模块主要是为了提供一些需要非常高效的底层操作功能的优化实现,包括各种底层数据结构的实现,特殊算法的实现,字符串处理,数字处理等,小文件I/O,格式化输出,以及最重要的内存管理部分。核心API 模块的所有源代码都集中在mysys 和strings文件夹下面,有兴趣的读者可以研究研究
网络交互模块
底层网络交互模块抽象出底层网络交互所使用的接口api,实现底层网络数据的接收与发送,以方便其他各个模块调用,以及对这一部分的维护。所有源码都在vio 文件夹下面。
Client & Server交互协议模块
任何C/S 结构的软件系统,都肯定会有自己独有的信息交互协议,MySQL 也不例外。MySQL的Client & Server 交互协议模块部分,实现了客户端与MySQL 交互过程中的所有协议。当然这些协议都是建立在现有的OS 和网络协议之上的,如TCP/IP 以及Unix Socket。
用户模块所实现的功能,主要包括用户的登录连接权限控制和用户的授权管理。他就像MySQL 的大门守卫一样,决定是否给来访者“开门”。
访问控制模块
造访客人进门了就可以想干嘛就干嘛么?为了安全考虑,肯定不能如此随意。这时候就需要访问控制模块实时监控客人的每一个动作,给不同的客人以不同的权限。访问控制模块实现的功能就是根据用户模块中各用户的授权信息,以及数据库自身特有的各种约束,来控制用户对数据的访问。用户模块和访问控制模块两者结合起来,组成了MySQL 整个数据库系统的权限安全管理的功能。
连接管理、连接线程和线程管理
连接管理模块负责监听对MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责MySQL Server 与客户端的通信,接受客户端的命令请求,传递Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的cache 等。
Query解析和转发模块
在MySQL 中我们习惯将所有Client 端发送给Server 端的命令都称为query,在MySQL Server 里面,连接线程接收到客户端的一个Query 后,会直接将该query 传递给专门负责将各种Query 进行分类然后转发给各个对应的处理模块,这个模块就是query 解析和转发模块。其主要工作就是将query 语句进行语义和语法的分析,然后按照不同的操作类型进行分类,然后做出针对性的转发。
Query Cache模块
Query Cache 模块在MySQL 中是一个非常重要的模块,他的主要功能是将客户端提交给MySQL 的Select 类query 请求的返回结果集cache 到内存中,与该query 的一个hash 值做一个对应。该Query 所取数据的基表发生任何数据的变化之后,MySQL 会自动使该query 的Cache 失效。在读写比例非常高的应用系统中,Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
Query优化器模块
Query 优化器,顾名思义,就是优化客户端请求的query,根据客户端请求的query 语句,和数据库中的些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个query语句的结果。
表变更管理模块
表变更管理模块主要是负责完成一些DML 和DDL 的query,如:update,delte,insert,create table,alter table 等语句的处理。
表维护模块
表的状态检查,错误修复,以及优化和分析等工作都是表维护模块需要做的事情。
系统状态管理模块
系统状态管理模块负责在客户端请求系统状态的时候,将各种状态数据返回给用户,像DBA 常用的各种show status 命令,show variables 命令等,所得到的结果都是由这个模块返回的。
这个模块从名字上看来很容易和上面的表变更和表维护模块相混淆,但是其功能与变更及维护模块却完全不同。大家知道,每一个MySQL 的表都有一个表的定义文件,也就是*.frm文件。表管理器的工作主要就是维护这些文件,以及一个cache,该cache 中的主要内容是各个表的结构信息。此外它还维护table 级别的锁管理。
日志记录模块
日志记录模块主要负责整个系统级别的逻辑层的日志的记录,包括error log,binary
log,slow query log 等。
复制模块又可分为Master 模块和Slave 模块两部分, Master 模块主要负责在Replication 环境中读取Master 端的binary 日志,以及与Slave 端的I/O 线程交互等工作。Slave 模块比Master 模块所要做的事情稍多一些,在系统中主要体现在两个线程上面。一个是负责从Master 请求和接受binary 日志,并写入本地relay log 中的I/O 线程。另外一个是负责从relay log 中读取相关日志事件,然后解析成可以在Slave 端正确执行并得到和Master 端完全相同的结果的命令并再交给Slave 执行的SQL 线程。
存储引擎接口模块
存储引擎接口模块可以说是MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天MySQL 可插拔存储引擎的特色。
各模块工作配合
在了解了MySQ的各个模块之后,我们再看看MySQL各个模块间如何相互协调工作的。接下来,我们通过启动MySQL,客户端连接,请求query,得到返回结果,最后退出,这样一整个过程来进行分析。
当我们执行启动MySQL 命令之后,MySQL 的初始化模块就从系统配置文件中读取系统参数和命令行参数,并按照参数来初始化整个系统,如申请并分配buffer,初始化全局变量,以及各种结构等。同时各个存储引擎也被启动,并进行各自的初始化工作。当整个系统初始化结束后,由连接管理模块接手。连接管理模块会启动处理客户端连接请求的监听程序,包括tcp/ip 的网络监听,还有unix 的socket。这时候,MySQL Server 就基本启动完成,准备好接受客户端请求了。
当连接管理模块监听到客户端的连接请求(借助网络交互模块的相关功能),双方通过Client & Server 交互协议模块所定义的协议“寒暄”几句之后,连接管理模块就会将连接请求转发给线程管理模块,去请求一个连接线程。
线程管理模块马上又会将控制交给连接线程模块,告诉连接线程模块:现在我这边有连接请求过来了,需要建立连接,你赶快处理一下。连接线程模块在接到连接请求后,首先会检查当前连接线程池中是否有被cache 的空闲连接线程,如果有,就取出一个和客户端请求连接上,如果没有空闲的连接线程,则建立一个新的连接线程与客户端请求连接。当然,连接线程模块并不是在收到连接请求后马上就会取出一个连接线程连和客户端连接,而是首先通过调用用户模块进行授权检查,只有客户端请求通过了授权检查后,他才会将客户端请求和负责请求的连接线程连上。
在MySQL 中,将客户端请求分为了两种类型:一种是query,需要调用Parser 也就是Query 解析和转发模块的解析才能够执行的请求;一种是command,不需要调用Parser 就可以直接执行的请求。如果我们的初始化配置中打开了Full Query Logging 的功能,那么Query 解析与转发模块会调用日志记录模块将请求计入日志,不管是一个Query 类型的请求还是一个command 类型的请求,都会被记录进入日志,所以出于性能考虑,一般很少打开FullQuery Logging 的功能。
当客户端请求和连接线程“互换暗号(互通协议)”接上头之后,连接线程就开始处理客户端请求发送过来的各种命令(或者query),接受相关请求。它将收到的query 语句转给Query 解析和转发模块,Query 解析器先对Query 进行基本的语义和语法解析,然后根据命令类型的不同,有些会直接处理,有些会分发给其他模块来处理。
如果是一个Query 类型的请求,会将控制权交给Query 解析器。Query 解析器首先分析看是不是一个select 类型的query,如果是,则调用查询缓存模块,让它检查该query 在query cache 中是否已经存在。如果有,则直接将cache 中的数据返回给连接线程模块,然后通过与客户端的连接的线程将数据传输给客户端。如果不是一个可以被cache 的query类型,或者cache 中没有该query 的数据,那么query 将被继续传回query 解析器,让query解析器进行相应处理,再通过query 分发器分发给相关处理模块。
如果解析器解析结果是一条未被cache 的select 语句,则将控制权交给Optimizer,也就是Query 优化器模块,如果是DML 或者是DDL 语句,则会交给表变更管理模块,如果是一些更新统计信息、检测、修复和整理类的query 则会交给表维护模块去处理,复制相关的query 则转交给复制模块去进行相应的处理,请求状态的query 则转交给了状态收集报告模块。实际上表变更管理模块根据所对应的处理请求的不同,是分别由insert 处理器、delete处理器、update 处理器、create 处理器,以及alter 处理器这些小模块来负责不同的DML和DDL 的。
在各个模块收到Query 解析与分发模块分发过来的请求后,首先会通过访问控制模块检查连接用户是否有访问目标表以及目标字段的权限,如果有,就会调用表管理模块请求相应的表,并获取对应的锁。表管理模块首先会查看该表是否已经存在于table cache 中,如果已经打开则直接进行锁相关的处理,如果没有在cache 中,则需要再打开表文件获取锁,然后将打开的表交给表变更管理模块。
当表变更管理模块“获取”打开的表之后,就会根据该表的相关meta 信息,判断表的存储引擎类型和其他相关信息。根据表的存储引擎类型,提交请求给存储引擎接口模块,调用对应的存储引擎实现模块,进行相应处理。
不过,对于表变更管理模块来说,可见的仅是存储引擎接口模块所提供的一系列“标准”接口,底层存储引擎实现模块的具体实现,对于表变更管理模块来说是透明的。他只需要调用对应的接口,并指明表类型,接口模块会根据表类型调用正确的存储引擎来进行相应的处理。
当一条query 或者一个command 处理完成(成功或者失败)之后,控制权都会交还给连接线程模块。如果处理成功,则将处理结果(可能是一个Result set,也可能是成功或者失败的标识)通过连接线程反馈给客户端。如果处理过程中发生错误,也会将相应的错误信息发送给客户端,然后连接线程模块会进行相应的清理工作,并继续等待后面的请求,重复上面提到的过程,或者完成客户端断开连接的请求。
如果在上面的过程中,相关模块使数据库中的数据发生了变化,而且MySQL 打开了binlog功能,则对应的处理模块还会调用日志处理模块将相应的变更语句以更新事件的形式记录到相关参数指定的二进制日志文件中。在上面各个模块的处理过程中,各自的核心运算处理功能部分都会高度依赖整个MySQL的核心API 模块,比如内存管理,文件I/O,数字和字符串处理等等。
了解到整个处理过程之后,我们可以将以上各个模块画成如下图的关系图:
tigerlchen
浏览: 121471 次
来自: 深圳
WatchKey都没有reset,第二次loop妥妥的捕获不到 ...
复杂对象就需要使用framedecorator了一、MySql服务器逻辑架构图
每个虚线框都是一层:第一层:最上层的服务器不是MySql所独有的,大多数基于网络的客户端/服务器工具或者服务都有类似的系统。比如链接处理,授权认证,安全等等。
第二层:大多数的MySql的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(例如:日期,时间,数学和加密函数等)。所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。
第三层:包含了存储引擎。存储引擎负责MySql中的数据存储和提取。服务器通过API和存储引擎进行通信,这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。存储引擎API包含了几十个底层函数,用于执行诸如&开始一个事务&或者&根据主键提取一行记录&等操作。但存储引擎不会去解析SQL(InnoDB是一个例外,它会解析外键定义,因为MySQL服务器本身没有实现该功能)
二、连接管理和安全性
每个客户端连接都会在服务器进程中拥有一个线程,这个链接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会负责缓存线程,因此不需要为每一个新建的创建或者销毁线程。
当客户端(应用)连接到MySQL服务器时,服务器需要对其进行认证。认证基于用户名,原始主机信息和密码。如果使用了安全套接字(SSL)的方式连接,还可以使用X.509整数认证。一旦客户端连接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限。
三、优化与执行
MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。用户可以通过特殊的关键字提示(hint)优化器,影响他的决策过程。也可以请求优化器解释(explain)优化过程的各个因素,使用户可以知道服务器是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和schema(对于MySQL下的schema,可以理解成就是存储数据的地方)、修改相关配置,使应用尽可能高效运行。
优化器并不关心表使用的是什么存储引擎,但存储引擎对于优化查询是有影响的。优化器会起请求存储引擎提供容量或某个具体操作的开销信息,以及表数据的统计信息等。
对于SELECT语句,在解析查询之前,服务器会先检查缓存(Query cache),如果能够在其中找到对应的查询,服务器就不必在执行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的结果集。
阅读(...) 评论() &}

我要回帖

更多关于 查看mysql服务 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信