当前位置: 首页 > news >正文

公司网站开发维护织梦教育咨询企业网站模板

公司网站开发维护,织梦教育咨询企业网站模板,盘锦建网站,电商专员是做什么的MySQL 执行流程1-5如下图。 MySQL 的架构共分为两层#xff1a;Server 层和存储引擎层#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现#xff0c;主要包括连接器#xff0c;查询缓存、解析器、预处理器、优化器、执行器等。…MySQL 执行流程1-5如下图。 MySQL 的架构共分为两层Server 层和存储引擎层 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现主要包括连接器查询缓存、解析器、预处理器、优化器、执行器等。另外所有的内置函数如日期、时间、数学和加密函数等和所有跨存储引擎的功能如存储过程、触发器、视图等。都在 Server 层实现。存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB从 MySQL 5.5 版本开始 InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构就是由存储引擎层实现的不同的存储引擎支持的索引类型也不相同比如 InnoDB 支持索引类型是 B树 且是默认使用也就是说在数据表中创建的主键索引和二级索引默认使用的是 B 树索引。 第一步连接器客户端和服务器端建立TCP连接 通过在命令行敲如下命令开启mysql服务 mysql -h$ip -u$user -p$password连接的过程需要先经过 TCP 三次握手因为 MySQL 是基于 TCP 协议进行传输的如果 MySQL 服务并没有启动则会收到如下的报错 如果 MySQL 服务正常运行完成 TCP 连接的建立后连接器就要开始验证你的用户名和密码如果用户名或密码不对就收到一个Access denied for user的错误然后客户端程序结束执行。 如果用户密码都没有问题连接器就会获取该用户的权限然后保存起来后续该用户在此连接里的任何操作都会基于连接开始时读到的权限进行权限逻辑的判断。 所以如果一个用户已经建立了连接即使管理员中途修改了该用户的权限也不会影响已经存在连接的权限。修改完成后只有再新建的连接才会使用新的权限设置。 查看 MySQL 服务被多少个客户端连接了 如果你想知道当前 MySQL 服务被多少个客户端连接了你可以执行 show processlist 命令进行查看。 比如上图的显示结果共有两个用户名为 root 的用户连接了 MySQL 服务其中 id 为 6 的用户的 Command 列的状态为 Sleep 这意味着该用户连接完 MySQL 服务就没有再执行过任何命令也就是说这是一个空闲的连接并且空闲的时长是 736 秒 Time 列 空闲连接会一直占用着吗 MySQL 定义了空闲连接的最大空闲时长由 wait_timeout 参数控制的默认值是 8 小时28880秒如果空闲连接超过了这个时间连接器就会自动将它断开。 mysql show variables like wait_timeout; ---------------------- | Variable_name | Value | ---------------------- | wait_timeout | 28800 | ---------------------- 1 row in set (0.00 sec)当然我们自己也可以手动断开空闲的连接使用的是 kill connection id 的命令。 mysql kill connection 6; Query OK, 0 rows affected (0.00 sec)一个处于空闲状态的连接被服务端主动断开后这个客户端并不会马上知道等到客户端在发起下一个请求的时候才会收到这样的报错“ERROR 2013 (HY000): Lost connection to MySQL server during query”。 MySQL 的连接数有限制吗 MySQL 服务支持的最大连接数由 max_connections 参数控制比如我的 MySQL 服务默认是 151 个,超过这个值系统就会拒绝接下来的连接请求并报错提示“Too many connections”。 mysql show variables like max_connections; ------------------------ | Variable_name | Value | ------------------------ | max_connections | 151 | ------------------------ 1 row in set (0.00 sec)MySQL 的连接也跟 HTTP 一样有短连接和长连接的概念它们的区别如下 // 短连接 连接 mysql 服务TCP 三次握手 执行sql 断开 mysql 服务TCP 四次挥手// 长连接 连接 mysql 服务TCP 三次握手 执行sql 执行sql 执行sql .... 断开 mysql 服务TCP 四次挥手可以看到使用长连接的好处就是可以减少建立连接和断开连接的过程所以一般是推荐使用长连接。 但是使用长连接后可能会占用内存增多因为 MySQL 在执行查询过程中临时使用内存管理连接对象这些连接对象资源只有在连接断开时才会释放。如果长连接累计很多将导致 MySQL 服务占用内存太大有可能会被系统强制杀掉这样会发生 MySQL 服务异常重启的现象。 怎么解决长连接占用内存的问题 有两种解决方式。 第一种定期断开长连接。既然断开连接后就会释放连接占用的内存资源那么我们可以定期断开长连接。 第二种客户端主动重置连接。MySQL 5.7 版本实现了 mysql_reset_connection() 函数的接口注意这是接口函数不是命令那么当客户端执行了一个很大的操作后在代码里调用 mysql_reset_connection 函数来重置连接达到释放内存的效果。这个过程不需要重连和重新做权限验证但是会将连接恢复到刚刚创建完时的状态。 第二步查询缓存如果是SELECT语句就查缓存 建立连接后客户端向 MySQL 服务发送 SQL 语句MySQL 服务收到 SQL 语句后就会解析出 SQL 语句的第一个字段看看是什么类型的语句 如果 SQL 是查询语句select 语句MySQL 就会先去查询缓存 Query Cache 里查找缓存数据看看之前有没有执行过这一条命令这个查询缓存是以 key-value 形式保存在内存中的key 为 SQL 查询语句value 为 SQL 语句查询的结果。 如果查询的语句命中查询缓存那么就会直接返回 value 给客户端。如果查询的语句没有命中查询缓存中那么就要往下继续执行等执行完后查询的结果就会被存入查询缓存中。 为什么mysql8.0没有查询缓存功能 但是对于更新比较频繁的表查询缓存的命中率很低的因为只要一个表有更新操作那么这个表的查询缓存就会被清空。如果刚缓存了一个查询结果很大的数据还没被使用的时候刚好这个表有更新操作查询缓冲就被清空了相当于缓存了个寂寞。 所以MySQL 8.0 版本直接将查询缓存删掉了也就是说 MySQL 8.0 开始执行一条 SQL 查询语句不会再走到查询缓存这个阶段了。 对于 MySQL 8.0 之前的版本如果想关闭查询缓存我们可以通过将参数 query_cache_type 设置成 DEMAND。 TIP 这里说的查询缓存是 server 层的也就是 MySQL 8.0 版本移除的是 server 层的查询缓存并不是 Innodb 存储引擎中的 buffer pool。 第3步解析 SQL 在正式执行 SQL 查询语句之前 MySQL 会先对 SQL 语句做解析 解析器会做如下两件事情。 词法分析 第一件事情词法分析。MySQL 会根据你输入的字符串识别出关键字出来例如SQL语句 select username from userinfo在分析之后会得到4个Token其中有2个Keyword分别为select和from 关键字 非关键字 关键字 非关键字 select username from userinfo 第二件事情语法分析。根据词法分析的结果语法解析器会根据语法规则判断你输入的这个 SQL 语句是否满足 MySQL 语法如果没问题就会构建出 SQL 语法树这样方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等。 img 如果我们输入的 SQL 语句语法不对就会在解析器这个阶段报错。比如我下面这条查询语句把 from 写成了 form这时 MySQL 解析器就会给报错。 但是注意表不存在或者字段不存在并不是在解析器里做的《MySQL 45 讲》说是在解析器做的但是经过我和朋友看 MySQL 源码5.7和8.0得出结论是解析器只负责检查语法和构建语法树但是不会去查表或者字段存不存在。
http://www.dnsts.com.cn/news/28812.html

相关文章:

  • 专门做油画交流的网站网页qq空间登录界面
  • 哪里有免费建站平台手机端网站优化怎么做
  • 凡科建站建网站网站与客户端的区别
  • 企业网站建设公司视频网站建设应该注意什么
  • 知更鸟 wordpress整站建设和网站优化
  • 企石网站建设网站域名选择的原则
  • 个人做企业 网站抓取wordpress站点用户
  • 高端网站定制设计响应式网站案列
  • 桥梁建设杂志网站网络营销与直播电商专业学什么
  • 南阳做玉器网站兰州市城乡和住房建设局网站
  • 做网站谁家好拓客最有效方案
  • dz仿网站头部python做项目的网站
  • 网站开发国内外研究婚纱影楼网站模板
  • 资料填写网站类型怎么做wordpress 微信服务号
  • pc建站 手机网站深圳建筑工程公司招聘
  • 上虞区住房和城乡建设局网站直接通过域名访问wordpress
  • 潍坊网站定制 优帮云丰台成都网站建设
  • 快站app下载建设一个网站需要几个角色
  • 音乐网站制作源代码网站建设怎样提升形象与品牌价值
  • 制作logo的网站宝安logo设计
  • 兰州网站设计厂家福州网站建设专业定制
  • 营口门户网站建设网站系统名称怎么填
  • 沈阳微信网站制作价格网站只做程序员
  • 珠海网站建设乐云seo在线制作河南建筑市场一体化平台
  • aspcms是网站什么漏洞互联网服务平台官网
  • 网站设计公司无锡中山网站建设外包
  • 网站建设专家证书常州建设网站
  • 静态网站建设的流程申请个人网站域名
  • 温州专业做网站中国国家住房和城乡建设部网站首页
  • 做图模板网站有哪些内容WordPress邮箱验证登录