关于db-mysql:MySQL架构三-MySQL运行机制

48次阅读

共计 1770 个字符,预计需要花费 5 分钟才能阅读完成。

Thresh


①建设连贯(Connectors&Connection Pool)

通过客户端 / 服务器通信协议与 MySQL 建设连贯。MySQL 客户端与服务端的通信形式是“半双工”。对于每一个 MySQL 的连贯,时刻都有一个线程状态来标识这个连贯正在做什么。(半双工:指的某一时刻,要么发送数据,要么接收数据,不能同时。例如晚期对讲机)

线程状态:show processlist; // 查看用户正在运行的线程信息,root 用户能查看所有线程,其余用户只能看本人的
        id:线程 ID,能够应用 kill xx;user:启动这个线程的用户
        Host:发送申请的客户端的 IP 和端口号
        db:以后命令在哪个库执行
        Command:该线程正在执行的操作命令
            Create DB:正在创立库操作
            Drop DB:正在删除库操作
            Execute:正在执行一个 PreparedStatement
            Close Stmt:正在敞开一个 PreparedStatement
            Query:正在执行一个语句
            Sleep:正在期待客户端发送语句
            Quit:正在退出
            Shutdown:正在敞开服务器
         Time:示意该线程处于以后状态的工夫,单位是秒
         State:线程状态
            Updating:正在搜寻匹配记录,进行批改
            Sleeping:正在期待客户端发送新申请
            Starting:正在执行申请解决
            Checking table:正在查看数据表
            Closing table : 正在将表中数据刷新到磁盘中
            Locked:被其余查问锁住了记录
            Sending Data:正在解决 Select 查问,同时将后果发送给客户端
         Info:个别记录线程执行的语句,默认显示前 100 个字符。想查看残缺的应用 show full processlist;

②查问缓存(Cache&Buffer)
这是 MySQL 的一个可优化查问的中央,如果开启了查问缓存且在查问缓存过程中查问到完全相同的 SQL 语句,则将查问后果间接返回给客户端;如果没有开启查问缓存或者没有查问到完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成“解析树”。

a. 缓存 Select 查问的后果和 SQL 语句
b. 执行 Select 查问时,先查问缓存,判断是否存在可用的记录集,要求是否完全相同(包含参数值),这样才会匹配缓存数据命中。c. 即便开启查问缓存,以下 SQL 也不能缓存
    查问语句应用 SQL_NO_CACHE
    查问的后果大于 query_cache_limit 设置
    查问中有一些不确定的参数,比方 now()
d. show variables like '%query_cache%'; // 查看查问缓存是否启用,空间大小,限度等
e. show status like 'Qcache%'; // 查看更具体的缓存参数,可用缓存空间,缓存块,缓存多少等

③解析器(Parser)
将客户端发送的 SQL 进行语法解析,生成 ” 解析树 ”。预处理器依据一些 MySQL 规定进一步查看“解析树”是否非法,例如这里将查看数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最初生成新的“解析树”。
④查问优化器(Optimizer)
依据“解析树”生成最优的执行打算。MySQL 应用很多优化策略生成最优的执行打算,能够分为两类:动态优化(编译时优化)、动静优化(运行时优化)。

等价变换策略
    5=5 and a>5 改成 a > 5
    a < b and a=5 改成 b >5 and a=5
    基于联结索引,调整条件地位等
优化 count、min、max 等函数
    InnoDB 引擎 min 函数只须要找索引最右边
    InnoDB 引擎 max 函数只须要找索引最左边
    MyISAM 引擎 count(*),不须要计算,间接返回
提前终止查问
    应用了 limit 查问,获取 limit 所需的数据,就不在持续遍历前面数据
in 的优化
    MySQL 对 in 查问,会先进行排序,再采纳二分法查找数据。比方 where id in (2,1,3),变成 in (1,2,3) 

⑤查问执行引擎
负责执行 SQL 语句,此时查问执行引擎会依据 SQL 语句中表的存储引擎类型,以及对应的 API 接口与底层存储引擎缓存或者物理文件的交互,失去查问后果并返回给客户端。若开启用查问缓存,这时会将 SQL 语句和后果残缺地保留到查问缓存(Cache&Buffer)中,当前若有雷同的 SQL 语句执行则间接返回后果。

如果开启了查问缓存,先将查问后果做缓存操作
返回后果过多,采纳增量模式返回

正文完
 0