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

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 语句执行则间接返回后果。

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

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据