PHP,Navicat等
1.连接层(主要是线程连接的处理,对程序连接的管理) 1.1 连接之后对用户密码的校验 1.2 对于校验之后的连接进行线程分配管理 1.3 对用户校验 =》对于数据库表的操作权限的一个校验 1.4 返回连接id
powershell `show processlist;` -- 查看当前用户的连接 `show variables like "%max_connections%";` -- 查询最大连接数(一般没自己配置的是100-500之间
可以自己配置 在虚拟机或者Xshell(通过IP连接你的虚拟机) 输入命令:cat /etc/my.cnf 找到 max_connections=xxx(可以自己配置,最大值为1000) 连接分为 长连接与短连接(默认短连接) 频繁与数据进行通讯,且没有高并发的情况下的时候, 选择长连接(审计等) `PDO::ATTR_PERSISTENT => true //项目中开启长连接命令 注意---以上任意一步出现异常 都会抛出`.
Mysql整个查询执行过程,总的来说分为 5 个步骤 :
1.客户端向 MySQL 服务器发送一条sql请求(查询、新增、修改、删除等请求) 2.连接/线程处理对用户名密码的校验,校验成功后服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果,否则继续执行 3.服务器进行 SQL解析器把sql语句解析成token、再有语法解析器把每一个token排列成二叉树、再由优化器生成相对最优的执行计划 4.MySQL 根据执行计划,调用存储引擎的 API来执行查询 5.通过执行引擎将结果返回给客户端,同时存储查询结果进程与线程的区别
怎么判断缓存是否可以命中
MySQL将缓存存放在一个引用表 (不要理解成table,可以认为是类似于 HashMap 的数据结构), 通过一个哈希值索引,这个哈希值通过查询本身、当前要查询的数据库、 客户端协议版本号等一些可能影响结果的信息计算得来。所以两个查询在任何字符上的不同 (例如 : 空格、注释),都会导致缓存不会命中
查询执行引擎
在完成解析和优化阶段以后,MySQL会生成对应的执行计划,查询执行引擎根据执行计划给出的指令逐步执行得出结果。 整个执行过程的大部分操作均是通过调用存储引擎实现的接口来完成,这些接口被称为 handler API。 查询过程中的每一张表由一个 handler 实例表示。实际上,MySQL在查询优化阶段就为每一张表创建了一个 handler实例, 优化器可以根据这些实例的接口来获取表的相关信息,包括表的所有列名、索引统计信息等。 存储引擎接口提供了非常丰富的功能,但其底层仅有几十个接口,这些接口像搭积木一样完成了一次查询的大部分操作
查询返回结果
查询执行的最后一个阶段就是将结果返回给客户端。即使查询不到数据,MySQL 仍然会返回这个查询的相关信息
六星教育--2008期mysql优化--李建宇