我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:金算盘高手论坛799222 > 排它性逻辑 >

MySQL逻辑架构与相关知识 ———《高性能MySQL》 - Beckham的博

归档日期:06-18       文本归类:排它性逻辑      文章编辑:爱尚语录

  如果能在脑海中构建一副MySQL各组件之间如何协同工作的,架构图,就会有助于深入理解MySQL服务器。

  最上层的服务并不是MySQL独有的,大多数基于网络的客户端/服务器工具或者服务都有类似的架构,比如连接服务器,授权认证,安全认证等等。

  第二层架构是MySQL比较有意思的部分,大多数MySQL的核心功能都在这一层,包括查询解析,分析,优化,缓存以及所有的内置函数(例如:日期,时间,数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。

  第三层包含了存储引擎。存储引擎服务MySQL中数据的存储和提取,和不同的文件系统一样,每个存储引擎都有各自的优势。服务器通过API与存储引擎通信,这些借口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。存储引擎包含了几十个底层函数,用户执行诸如“开始一个事物” 或者 “根据主键提取一行记录” 等操作。但存储引擎不会去解析SQL,不同的存储引擎之间不进行通信,只是简单的响应上层服务的请求。

  每个客户端连接都会在服务中占有一个线程,这个连接的查询只在这个线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会缓存线程,因此不需要为每一个新建连接创建或销毁线odb是一个例外,它会解析外键定义,因为MySQL服务器本身没有实现该功能。

  2.MySQL5.5以上的版本提供了一个API,支持线程池(Thread-Polling)插件,可以使用池中少量的线程来服务大量的连接。

  当客户端连接到MySQL服务器时,服务会对其进行验证,认证基于用户名、原始主机信息,和密码。如果使用了SSL的方式连接,还可以使用X.509证书认证。连接成功后,服务器会继续验证其是否具有某些 特定的查询权限(例如对某个库的某张表执行select语句)。

  MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括写查询、决定表的读取顺序,以及选择合适的索引等。用户可以通过特殊的关键字提示(hint)优化器,影响它的决策过程。也可以请求优化器解释(explain)优化过程的各个因素,使用用户可以知道服务器是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和schema、修改相关配置,使应用尽可能的提高运行效率。

  优化器并不关心表使用的是什么存储引擎,但存储引擎对于优化查询是有影响的。优化器会请求存储引擎提供容量或某个具体操作的开销信息,以及表数据的统计信息等。例如某些存储引擎的某种索引,可能对一些特定的查询会有优化。

  对于select语句,在在解析查询之前,服务器会先检查查询缓存(Query Cache),如果能够在其中找到对应的查询,服务器就不必在执行查询解析,优化和执行的整个过程,进而直接返回查询缓存中的结果集。

  以Unix系统的email box为例,典型的mbox文件格式是非常简单的。一个mbox邮箱中的所有邮件都串行在一起,彼此收尾相连。这种格式对于读取和分析邮件信息非常的友好,同事投递邮件也很容易,只要在文件末尾附加新的邮件内容给即可。

  但如果两个进程在同一时间对一个邮箱投递邮件,会发生什么情况?显然,邮箱的数据会被破坏,凉风邮件的内容会交叉的附加在邮箱文件的末尾。设计良好的邮箱投递系统会通过锁(lock)来防止数据损坏。如果客户视图投递邮件,而邮箱已经被其他客户锁住,那就必须等待,直到锁释放才能进行投递。这种锁的方案在实际应用环境中虽然工作良好,但并支持并发处理、因为任意时刻,只有一个进程可以修改邮箱的数据,这在大容量的邮箱系统中时个问题。

  如果把上述的邮箱当成数据库中的一张表,把邮件当成表中的一行记录,就很容易看出,同样的问题依然存在。解决这类经典问题的方式就是并发控制,其实非常简单。在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的系统来解决问题。这两种类型的锁通常被称为共享锁(shared lock)和排他锁(exclusive lock),也叫读锁(read lock) 和写锁(write lock)。

  读锁是共享的,或者说是相互不阻塞的。多个客户同一时刻可以同时读取同一个资源,互不干扰。写锁则是排他的,也就是说一个写锁会阻塞其他的写锁和读锁,这是出于安全策略考虑,只有这样,才能确保在给定的时间里,只有一个用户执行写入,并防止其他用户读取正在写入的同一资源。

  一种提高共享资源并发性的方式就是让锁定对象更有选择性。尽可能的只锁定要修改的部分数据,而不是所有的资源。更理想的方式是,只对会修改的数据片进行精确的锁定。加锁也需要消耗资源,锁的各种操作,获得,检查,解除,释放锁等都会增加系统的开销。如果系统花费大量的时间来管理锁,而不是存储取数据,那么系统性能可能会因此受到影响。所以在不发生冲突的情况下,锁定的数量越少,系统的并发则越高。

  所谓的锁策略,就是在锁的开销和数据的安全性之间寻求平衡,当然也会影响到性能。大多数商业数据库系统没有提供更多的选择,一般都是在表上施加行集锁(row-level lock),并以各种复杂的方式来实现,以便在锁比较多的情况下尽可能地提供更好的性能。而MySQL则提供了多种选择。每种MySQL存储引擎都可以实现自己的锁策略和锁粒度。在存储引擎的设计中,锁管理是个非常重要的决定。将锁粒度固定在某个级别,可以为某些特定的应用场景提供更好的性能,但同时却会失去对另外一些应用场景的良好支持。好在MySQL支持多个存储引擎的架构,所以不需要单一的通用解决方案。

  在特定场景中,表可可能有良好的性能,例如 READ LOCAL 表锁支持某些类型的并发写操作。另外,写锁也可以比读锁有更高的优先级,因此写锁请求可能会被插入到读锁队列的前面)(写锁可以茶语到锁队列中读锁的前面,反之读锁则不能插入到写锁的前面)。

  说起MySQL的查询优化,相信所有人都了解一些最简单的技巧:不能使用SELECT*、不使用NULL字段、合理创建索引、为字段选择合适的数据类型…..你是否真的理解这些优化技巧?是否理解其背后的工作原理...

  MySql作为最受欢迎的数据库之一在我们的工作中经常会被用到,但我发现在工作中面试了很多IT工作者,很多人只是站在了MySql的大门之外,并没有深入理解MySql的一些基本原理,出于这个原因,我产...

  前言:   本章概要描述MySQL服务器架构、各种存储引擎间的主要区别及区别的重要性   回顾MySQL历史背景、基准测试,通过简化细节和演示案例来讨论MySQL的原理正文:   MySQL架构可在多...

  准备mysql5.7+sqlyog数据库开发规范的制定数据库必须使用小写字母并用下划线分割(见名知意,最好不超过32字符)禁止使用的MySQL保留关键字(如有,``包裹),去

  如何获得MySQL最优性能?如何建立MySQL高可用集群?如何搭建稳定高效的MySQL环境?适合人群适合具有一定自学能力,掌握Linux系统基础知识及MySQL数据库基础知识的学员数据库专家,国内顶级...

  下面是收集的一些MySQL体系架构图等,有必要多看多思考,特别适合看过一遍之后,过一段时间再看一遍,对知识回忆很有好处mysql架构图来源:DatabaseblogbyRathishkumar来源:江...

  01.打造扛得住的MySQL数据库架构02.高并发下的数据库设计03.高性能可扩展MySQL数据库04.深入浅出Mysql优化性能提升联系我...

  课程简介:本课程为PHP高性能架构班系列课程中的mysql优化部分教程,由燕十八主讲。课程通过16课时(共32课)来详解mysql的优化技术,帮助大家在实际使用过程中来提升mysql的性能,从而节约成...

  Mysql各个组件之间如何协作,有助于深入理解MySql服务器。   第一层,服务层:为客户端提供服务,如连接处理,授权认证、安全等。   第二层,核心层:MySql的核心服务都在这一层。包括查...

  高可用性H.A.(HighAvailability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不...

  MySql并不完美,但是却足够灵活,能够适应高要求的环境。同时,MySql既可以嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。为了...

  1.并发控制1.1读写锁共享锁(读锁S):读锁是共享的,或者说是互不阻塞。多个客户可以同时读取同一数据,而互不干扰。排他锁(写锁X):写锁是排他的,一个写锁会阻塞(排斥)其他的写锁和读锁,以确保同一时...

  1.MySQL整体逻辑架构mysql数据库的逻辑架构如下图第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的:连接处理,身份验证,安全性...

  MySql的基本架构示意图如下:一、MySQL总体上可分为Server层和存储引擎层。Server层包括连接器、查询器、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数...

  高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQL高性能MySQ...

  本书以 MySQL 数据库的基础及维护(基础篇)为切入点,重点介绍了 MySQL 数据库应用系统的性能调优(优化篇),以及高可用可扩展的架构设计(架构篇)。 基础篇的主要内容有:MySQL 数据库介绍,架构组成,存储引擎介绍、安全管理,以...

  一、MySQL最重要的、最与从不同的特性是它的存储引擎架构,这种构架的设计将查询处理及其它系统任务和数据的存储/提取相分离。第一层,服务层,最上层的服务并不是MySQL独有的,大多数基于网络的客户端/...

  1.1   Mysql的逻辑架构           第一层主要是授权认证,连接处理等,每个客户端连接都会拥有一个线以后有线程池插件。     第二层是核心服务层,所有的查询、优化、缓存内部...

  CSDN开篇博客,本来想写下mysql与mongoDB的区别,无奈牵涉的专业知识太多,技术能力也有限,所以分开来介绍下mysql和mongoDB,主要从逻辑架构,存储引擎,数据如何存储,如何查询方面进...

  我是技术搬运工,好东西当然要和大家分享啦.原文地址存储引擎oDBInnoDB是MySQL的默认事务型引擎,只有在需要InnoDB不支持的特性时,才考虑使用其它存储引擎。采用MVCC来支持高并...

  高性能mysql第三版个人的一些注意项总结,书里是5.5,和5.6还是有一些不同点一、架构历史1、读写锁(共享锁和排它锁);2、锁粒度:表锁,行级锁。粒度越小锁开销越大;3、事务:InnoDB支持,m...

  最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等。第二层构架是MySQL比较有意思的部分。大多数MySQL的核心服务功...

  架构逻辑视图 每个虚线框为一层,总共三层。第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等。第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图。第三层...

  数据库设计是获得良好性能的基石,特别是新手,或者说入行一两年的工作来说,其实大多数面试所提到的就是数据库,最基本的就是数据库的设计了。一个表如果设计得不合理,它的后期扩展将会让你一筹莫展,香菇无泪啊!...

  高性能MYSQL笔记1.MYSQL逻辑结构MYSQL逻辑结构有三层,分别为1.连接/线程处理:实现连接处理,授权认证,安全等2.服务层:该层主要有缓存,解析,处理,优化以及跨存储引擎如存储过程,触发器...

  下载地址:百度网盘 彻底拿下Linux集群+Nginx高并发+lvs负载均衡+MySQL优化+NoSQL!2000W万条真实网站数据,拒绝纸上谈兵!Linux资深运维+燕十八老师亲自授课!Linux优...

  整理mysql26个知识点:1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联:主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;从:io...

  数据库设计规范(统一)数据库命名规范数据库基本设计规范(存储引擎的选择,字符类型的选择)数据库索引设计规范(索引列的选择,索引的优化技巧)数据库字段设计规范(列的字段类型)SQL开发规范(开发人员使用...

  1.1前言  在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。更多关于MySQL查询相关参...

  前言 数据库高可用是生产环境使用数据库必要条件,MySQL数据库通常使用复制技术实现。然MySQL复制本身存在很多的“坑”容易被忽视,导致一些开发或运维人员对于MySQL复制的可靠性有所怀疑。 高可用...

  一、数据库基础知识在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库第二范式定义:若关系模式R∈1NFR\in1NF,且关系模式R的每个非主属性完全函数依赖...

  Mysql数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护...

  从事IT行业的都知道一个开发者的水平基本取决于你做过多少项目,唯有见多才能识广,这次收集的34套Java经典项目主要包括26套Java web项目,6套Java swing项目,2套Java控制台项目...

  一、适用场景内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存即可,不必每个都去实例化对象,从而节省内存空间。二、模式核心 享...

  一、前言最近由于研究需要,要用到线性判别分析(LDA)。于是找了很多资料来看,结果发现大部分讲的都是理论知识,因此最后还是看的一知半解,后来终于找到了个英文的文档,作者由PCA引入LDA,看过后豁然开...

  相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是: ⑴ 找出算法...

  作者fbysss声明:本文由fbysss原创,转载请注明出处关键字:tomcat监控...

  从trust zone之我见知道,支持trustzone的芯片会跑在两个世界。 普通世界、安全世界,对应高通这边是HLOS,QSEE。 如下图: 如下是HLOS与QSEE的软件架...

  公司产品之前使用xmpp作为底层库,之前同事编译自己的sdk静态库想生成.a库,但是各种编译问题(其实耐心修改配置都能解决),但是从百度找到方案用framework可以解决,所以最终使用的是frame...

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...

  偶然间发现各路大牛的一些python创作,不得不说python是一个比较全面的语言,附上网址以后可能需要用到python视觉处理,爬虫数据分析的时候可以用的上吧2333 python小项目: ht...

  docx4j官方提供了一些例子,本文只是其中一部分应用的简单例子。需要注意的地方是页眉和页脚,必须创建对应关系才能起作用。页眉和页脚添加图片的时候,第二个参数sourcePart是必须的,调用的cre...

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...

  一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托...

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...

本文链接:http://jdockfish.com/paitaxingluoji/459.html