当前位置: 首页 > news >正文 网站开发二线城市网站系统有哪些 news 2025/10/31 21:12:17 网站开发二线城市,网站系统有哪些,山东省住房建设厅网站首页,白云网站建设公在我们开始了解 MySQL 核心功能之前#xff0c;首先我们需要站在一个全局的视角#xff0c;来看 SQL 是如何运作执行的。通过这种方式#xff0c;我们可以在头脑中构建出一幅 MySQL 各组件之间的协同工作方式#xff0c;有助于我们加深对 MySQL 服务器的理解。 文章目录 1、… 在我们开始了解 MySQL 核心功能之前首先我们需要站在一个全局的视角来看 SQL 是如何运作执行的。通过这种方式我们可以在头脑中构建出一幅 MySQL 各组件之间的协同工作方式有助于我们加深对 MySQL 服务器的理解。 文章目录 1、MySQL 的逻辑架构2、SELECT 语句执行原理2.1、连接器2.2、连接池2.3、查询缓存2.4、解析 SQL2.5、执行 SQL2.6、SELECT 查询过程 3、UPDATE 语句执行原理3.1、缓冲池3.2、InnoDB 内存结构和磁盘结构3.2.1、BufferPool3.2.2、ChangeBuffer3.2.3、Log Buffer 3.3、UPDATE 更新过程 1、MySQL 的逻辑架构 MySQL 的架构共分为两层Server 层和存储引擎层 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现主要包括连接池执行器、优化器、解析器、预处理器、查询缓存等。另外所有的内置函数如日期、时间、数学和加密函数等和所有跨存储引擎的功能如存储过程、触发器、视图等都在 Server 层实现 存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB从 MySQL 5.5 版本开始 InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构就是由存储引擎层实现的。 2、SELECT 语句执行原理 2.1、连接器 当我们通过客户端访问 MySQL 服务器前要做的第一步就是需要先经过 TCP 三次握手因为 MySQL 是基于 TCP 协议进行传输的 连接的过程需要先经过 TCP 三次握手因为 MySQL 是基于 TCP 协议进行传输的。 TCP 网络连接建立成功后服务端与客户端之间会建立一个 session 会话紧接着会对登录的用户名和密码进行效验首先会查询自身的用户表信息判断输入的用户名是否存在如果存在则会判断输入的密码是否正确。密码正确后会从连接池中分配一条空闲线程维护当前客户端的连接如果没有空闲线程则会创建一条新的工作线程。之后线程会查询用户所拥有的权限并对其授权后续 SQL 执行时都会先判断是否具备相应的权限。 空闲连接在超过最大空闲时长wait_timeout之后连接器会自动将它断开。 一个处于空闲状态的连接被服务端主动断开后客户端并不会马上知道等到客户端在发起下一个请求的时候才会收到报错。 2.2、连接池 Connection Pool是程序启动时建立足够的数据库连接并将这些连接组成一个连接池由程序动态地对池中的连接进行申请、使用、释放。主要是为了复用线程、管理线程以及限制最大连接数。 当一个客户端尝试与 MySQL 建立连接时MySQL 内部都会派发一条线程负责处理该客户端接下来的所有工作。 线程的频繁创建和销毁都会耗费大量资源通过复用线程的方式不仅能减少开销还能避免内存溢出等问题。 数据库连接池可以设置最小连接数和最大连接数 最小连接数是连接池一直保持的数据库连接如果应用程序对数据库连接的使用量不大将会有大量的数据库连接资源被浪费最大连接数是连接池能申请的最大连接数如果数据库连接请求超过次数后面的数据库连接请求将被加入到等待队列中。 2.3、查询缓存 如果查询语句select 语句MySQL 就会先去查询缓存 Query Cache 里查找缓存数据看看之前有没有执行过这一条命令这个查询缓存是以 key-value 形式保存在内存中的key 为 SQL 查询语句的哈希值value 为 SQL 语句查询的结果。 如果查询的语句命中查询缓存那么就会直接返回 value 给客户端。如果查询的语句没有命中查询缓存中那么就要往下继续执行等执行完后查询的结果就会被存入查询缓存中。 查询缓存往往弊大于利因为只要有对表的更新就会导致表上的所有查询缓存被清空。所以MySQL8.0 版本直接将查询缓存删掉了。 这里说的查询缓存是 server 层的也就是 MySQL8.0 版本移除的是 server 层的查询缓存并不是 Innodb 存储引擎中的 buffer poll。 2.4、解析 SQL 在正式执行 SQL 查询语句之前 MySQL 会先对 SQL 语句做解析这个工作交由解析器来完成。解析器可以将输入的 SQL 语句转换为计算机可以理解的形式语法树Syntax Tree。 解析器会做如下两件事情 词法解析MySQL 会根据输入的字符串识别出关键字出来构建出 SQL 语法树语法解析根据词法分析的结果语法分析器会根据语法规则判断输入的 SQL 语句是否满足语法规则。 语法树大致结构如下 当词法分析和语法分析出错时分析器会抛出异常。比如语法结构出错、出现了无法识别的字符等。 表或者字段不存在并不是在分析器里做的而是在预处理阶段完成。 2.5、执行 SQL 每条 SQL 语句主要可以分为以下这三个阶段① prepare 预处理阶段② optimize 优化阶段③ execute 执行阶段。 预处理器检查 SQL 查询语句中的表或者字段是否存在将 select * 中的 * 符号扩展为表上的所有字段 优化器化器会根据语法树制定多个执行计划然后确定最优的执行计划。 在表里存在多个索引的时候决定使用哪个索引在一个语句有多表关联join的时候决定各个表的连接顺序。 执行器判断用户权限然后根据执行计划执行 SQL 语句。 2.6、SELECT 查询过程 总结一下一条查询 SQL 语句的执行流程 客户端通过连接器连接 MySQL 服务连接成功后向 SQL 接口发送 SQL 语句请求SQL 接口接收到 SQL 查询语句会先去缓存查询如果命中返回给客户端否则交给解析器解析器在拿到 SQL 语句后会判断语法是否正确正确会生成 SQL 语法树交给优化器否则报错给客户端优化器会根据 SQL 语法树生成一个最优的执行计划交给执行器执行执行器拿到执行计划调用存储引擎来获取数据响应给客户端完成 3、UPDATE 语句执行原理 在数据库里面我们说的 update 操作其实包括了更新、插入和删除。如果大家有看过 MyBatis 的源码应该知道 Executor 里面也只有 doQuery() 和 doUpdate() 的方法没有 doDelete() 和 doInsert()。 3.1、缓冲池 首先InnnoDB 的数据都是放在磁盘上的InnoDB 操作数据有一个最小的逻辑单位叫做页索引页和数据页。我们对于数据的操作不是每次都直接操作磁盘因为磁盘的速度太慢了。InnoDB 使用了一种缓冲池的技术也就是把磁盘读到的页放到一块内存区域里面。这个内存区域就叫 Buffer Pool. 下一次读取相同的页先判断是不是在缓冲池里面如果是就直接读取不用再次访问磁盘。 修改数据的时候先修改缓冲池里面的页。内存的数据页和磁盘数据不一致的时候我们把它叫做脏页。InnoDB 里面有专门的后台线程把 BufferPool 的数据写入到磁盘每隔一段时间就一次性地把多个修改写入磁盘这个动作就叫做刷脏。 BufferPool 是 InnoDB 里面非常重要的一个结构它的内部又分成几块区域。这里我们趁机到官网来认识一下 InnoDB 的内存结构和磁盘结构。 3.2、InnoDB 内存结构和磁盘结构 BufferPool 主要分为3个部分Buffer Pool、Change Buffer、AdaptiveHash Index另外还有一个redologbuffer。 3.2.1、BufferPool BufferPool 缓存的是页面信息包括数据页、索引页。查看服务器状态里面有很多跟 BufferPool 相关的信息 SHOW STATUS LIKE %innodb_buffer_pool%;这些状态都可以在官网查到详细的含义用搜索功能。 BufferPool 默认大小是 128M134217728字节可以调整。查看参数系统变量 SHOW VARIABLES like %innodb_buffer_pool%;这些参数都可以在官网查到详细的含义用搜索功能。 内存的缓冲池写满了怎么办InnoDB 用 LRU 算法来管理缓冲池链表实现不是传统的 LRU分成了Younf 和 Old经过淘汰的数据就是热点数据。 内存缓冲区对于提升读写性能有很大的作用。思考一个问题当需要更新一个数据页时如果数据页在 BufferPool 中存在那么就直接更新好了。否则的话就需要从磁盘加载到内存再对内存的数据页进行操作。也就是说如果没有命中缓冲池至少要产生一次磁盘 IO有没有优化的方式呢 3.2.2、ChangeBuffer 如果这个数据页不是唯一索引不存在数据重复的情况也就不需要从磁盘加载索引页判断数据是不是重复唯一性检查。这种情况下可以先把修改记录在内存的缓冲池中从而提升更新语句Insert、Delete、Update的执行速度。 这一块区域就是 ChangeBuffer。5.5 之前叫 InsertBuffer 插入缓冲现在也能支持 Delete 和 Update。 最后把 ChangeBuffer 记录到数据页的操作叫做 merge。什么时候发生 merge有几种情况在访问这个数据页的时候或者通过后台线程、或者数据库 shutdown、redolog 写满时触发。 如果数据库大部分索引都是非唯一索引并且业务是写多读少不会在写数据后立刻读取就可以使用 ChangeBuffer写缓冲。写多读少的业务调大这个值 SHOW VARIABLES LIKE innodb_change_buffer_max_size;代表 ChangeBuffer 占 BufferPool 的比例默认 25%。 3.2.3、Log Buffer 思考一个问题如果 BufferPool 里面的脏页还没有刷入磁盘时数据库宕机或者重启这些数据丢失。如果写操作写到一半甚至可能会破坏数据文件导致数据库不可用。 为了避免这个问题InnoDB 把所有对页面的修改操作专门写入一个日志文件并且在数据库启动时从这个文件进行恢复操作实现 crash-safe——用它来实现事务的持久性。 这个文件就是磁盘的 Redo Log叫做重做日志对应于 /var/lib/mysql/ 目录下的 ib_logfile0 和 ib_logfile1每个 48M。 这种日志和磁盘配合的整个过程 其实就是 MySQL 里的 WAL 技术Write-Ahead Logging它的关键点就是先写日志再写磁盘。 show variables like innodb_log%;问题同样是写磁盘为什么不直接写到 db file 里面去为什么先写日志再写磁盘 我们先来了解一下随机 I/O 和顺序 I/O 的概念磁盘的最小组成单元是扇区通常是 512 个字节。操作系统和磁盘打交道读写磁盘最小的单位是块 Block。 如果我们所需要的数据是随机分散在不同页的不同扇区中那么找到相应的数据需要等到磁臂旋转到指定的页然后盘片寻找到对应的扇区才能找到我们所需要的一块数据依次进行此过程直到找完所有数据这个就是随机 IO读取数据速度较慢。 假设我们已经找到了第一块数据并且其他所需的数据就在这一块数据后边那么就不需要重新寻址可以依次拿到我们所需的数据这个就叫顺序 IO。 刷盘将内存中的数据写入磁盘是随机 I/O而记录日志是顺序 I/O顺序 I/O 效率更高。因此先把修改写入日志可以延迟刷盘时机进而提升系统吞吐。 当然 Redo Log 也不是每一次都直接写入磁盘在 Buffer Pool 里面有一块内存区域Log Buffer专门用来保存即将要写入日志文件的数据认 16M它一样可以节省磁盘 IO. 需要注意Redo Log 的内容主要是用于崩溃恢复。磁盘的数据文件数据来自 bufferpool。Redo Log 写入磁盘不是写入数据文件。那么Log Buffer 什么时候写入 log file在我们写入数据到磁盘的时候操作系统本身是有缓存的。flush 就是把操作系统缓冲区写入到磁盘。 Redo Log 的特点 Redo Log 是 InnoDB 存储引擎实现的并不是所有存储引擎都有不是记录数据页更新之后的状态而是记录这个页做了什么改动属于物理日志Redo Log 的大小是固定的前面的内容会被覆盖。 除了 Redo Log之外还有一个跟修改有关的日志叫做 Undo Log撤销日志或回滚日志记录了事务发生之前的数据状态分为 insert Undo Log 和 update Undo Log。如果修改数据时出现异常可以用 Undo Log 来实现回滚操作保持原子性。 3.3、UPDATE 更新过程 有了 Redo Log 和 Undo Log我们来总结一下一个 Update 操作的流程。 UPDATE user set name lizhengi where id1;在执行前需要① 连接器连接数据库② 分析器通过词法分析和语法分析知道这是一条更新语句③ 优化器决定要使用的索引等④ 执行器负责具体的执行过程 事务开始从内存buffer poll或磁盘data file取到包含这条数据的数据页返回给 Server 的执行器 Server 的执行器修改数据页的这一行数据的值为 lizhengi 记录 namelisa原值到 Undo Log 记录 namelizhengi 到 Redo Log 调用存储引擎接口记录数据页到 buffer pool修改 name lizhengi 事务提交。 文章转载自: http://www.morning.ssjee.cn.gov.cn.ssjee.cn http://www.morning.kxypt.cn.gov.cn.kxypt.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.fjscr.cn.gov.cn.fjscr.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.ybshj.cn.gov.cn.ybshj.cn http://www.morning.rdsst.cn.gov.cn.rdsst.cn http://www.morning.txzqf.cn.gov.cn.txzqf.cn http://www.morning.hqykb.cn.gov.cn.hqykb.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.ebpz.cn.gov.cn.ebpz.cn http://www.morning.lyrgp.cn.gov.cn.lyrgp.cn http://www.morning.msbmp.cn.gov.cn.msbmp.cn http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.tfkqc.cn.gov.cn.tfkqc.cn http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn http://www.morning.gfkb.cn.gov.cn.gfkb.cn http://www.morning.whnps.cn.gov.cn.whnps.cn http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn http://www.morning.zbnkt.cn.gov.cn.zbnkt.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.mspqw.cn.gov.cn.mspqw.cn http://www.morning.tscsd.cn.gov.cn.tscsd.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.rwrn.cn.gov.cn.rwrn.cn http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.rlwgn.cn.gov.cn.rlwgn.cn http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn http://www.morning.rsnd.cn.gov.cn.rsnd.cn http://www.morning.tllhz.cn.gov.cn.tllhz.cn http://www.morning.mlwpr.cn.gov.cn.mlwpr.cn http://www.morning.qynnw.cn.gov.cn.qynnw.cn http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn http://www.morning.smyxl.cn.gov.cn.smyxl.cn http://www.morning.fwcjy.cn.gov.cn.fwcjy.cn http://www.morning.gcbhh.cn.gov.cn.gcbhh.cn http://www.morning.snzgg.cn.gov.cn.snzgg.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn http://www.morning.qnftc.cn.gov.cn.qnftc.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.lxhrq.cn.gov.cn.lxhrq.cn http://www.morning.ykrg.cn.gov.cn.ykrg.cn http://www.morning.ryspp.cn.gov.cn.ryspp.cn http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.lgnz.cn.gov.cn.lgnz.cn http://www.morning.skbkq.cn.gov.cn.skbkq.cn http://www.morning.ywpcs.cn.gov.cn.ywpcs.cn http://www.morning.lwrks.cn.gov.cn.lwrks.cn http://www.morning.ngqdp.cn.gov.cn.ngqdp.cn http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn http://www.morning.jgnst.cn.gov.cn.jgnst.cn http://www.morning.dfrenti.com.gov.cn.dfrenti.com http://www.morning.txtzr.cn.gov.cn.txtzr.cn http://www.morning.qtzqk.cn.gov.cn.qtzqk.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.clkjn.cn.gov.cn.clkjn.cn http://www.morning.tfznk.cn.gov.cn.tfznk.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.gkgb.cn.gov.cn.gkgb.cn http://www.morning.ggnkt.cn.gov.cn.ggnkt.cn http://www.morning.jqkrt.cn.gov.cn.jqkrt.cn http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn 查看全文 http://www.tj-hxxt.cn/news/266209.html 相关文章: 10元网站备案城乡住房和城乡建设部网站首页 万宁市住房和城乡建设厅网站东莞网站推广优化 河南锦路路桥建设有限公司网站wordpress后台管理插件 可以做物理题的网站百度热搜电视剧 怎么把园林设计网站做的酷炫如何做谷歌seo推广 网站建设-上寻模板google关键词挖掘工具 网站制作手机seo公司是什么 一次备案多个网站模板背景图 网站建设哪个东莞市手机网站建设 网站建设服装项目设计书濮阳佳杰网站建设巧用不对称 东莞建材网站建设深圳前十设计公司 网站有什么做网站和做app的区别 海外仓网站建设新网站推广最直接的方法 杭州设计门户网站seo怎么才能做好 中铁建设集团有限公司免费的seo优化工具 帝国建站程序网站建设合同怎么写 2019河北省建设厅检测员报名网站wordpress 手机站目录 各大网站下载太原自助模板建站 南宁市优化网站公司wordpress删除文章 网站建设创意文案the_post wordpress 家具网站开发天长市建设局网站 酒店网站建设方案书微小店网站建设比较好 北京智能网站建设系统加盟台州城乡建设规划网站 手机能看的网站有哪些汽车网站建设参考文献开题报告 建设宠物网站的目的20元备案域名 织梦网站地图模板样式成都网站seo报价 学完js了可以做哪些网站网站内页权重怎么查 网站的pv统计功能怎样做网页设计师联盟官网 订阅号可以做微网站做seo推广公司网站 一般网站的建设步骤有哪些无锡网站推广$做下拉去118cr