首页 雷火电竞官网正文

雪铁龙c5,MySQL架构规划,上证50

admin 雷火电竞官网 2019-05-10 251 0

MySQL用了好多年了,可是关于大部分开发人员来说,仍是停留在运用上面。接下来的数篇文章将记载一下,MySQL原理的完成原理。

首要看一下MySQL的架构图,如下所示:

从上面的示意图能够看出,MySQL从上到下包含了:客户端、Server层和存储引擎层。关于客户端完成,能够是咱们常用的MySQL指令行窗口,或许是Java的客户端程序等等,这儿不做过多的介绍。

Server层首要包含了:衔接器、查询缓存、剖析器、优化器和履行器等。大部分MySQL对用户供给的功用,都在这一层完成:包含了内置函数的完成,存储进程、触发器、视图等等。

存储引擎层担任数据的存储和提取,存储引擎的完成是插件式的。也便是说用户能够挑选自己所需求的存储引擎,如InnoDB、MyISAM等。

衔接器

衔接器是MySQL服务端对外的门户,当咱们运用指令行黑窗口或许JDBC的Connection.connect(),衔接到MySQL Server端时,会校验用户名和暗码;然后会查询用户对应的权限列表。当衔接树立后,后续的权限规模就在此刻确认了,假如衔接没有断开的情况下,更改了用户的权限,此刻关于该衔接也不收效。

当衔接树立后,假如没有后续的操作,衔接就会进入闲暇状况。此刻能够运用如下指令,查看当时的衔接状况。

mysql> show processlist

假如客户端衔接太长时刻没有运用,衔接器就会将其断开。这个参数是由 wait_timeout 操控的,默许时刻是8小时。从上面衔接进程能够看出,MySQL客户端衔接的树立进程仍是比较耗时的。在咱们开发的进程中,一般会运用长衔接,可是假如过多的运用长衔接,就会形成MySQL的内存占用量很大(MySQL5.7 今后,能够运用 mysql_reset_connection 来从头初始化衔接资源,然后到达开释内存占用的意图)。

因此在实践开发中(以Java为例),会运用DBCP、C3P0或许Druid的衔接池来办理衔接。其间Druid是阿里巴巴开源的衔接池办理工具,还具有监控相关的功用,功用比较强壮,笔者比较引荐。

查询缓存

当衔接树立完成后,履行select 句子的时分,就会来到查询缓存。MySQL会将Select 句子为 KEY,将查询成果为VALUE 的方式保存在内存中。假如匹配到对应的 KEY 就会直接从内存中回来成果。

可是一般咱们不会运用MySQL本身的查询缓存,由于当有一条Update 或许 Insert 的改表句子时,就会清空对该表的一切查询缓存。缓存的粒度比较大,能够考虑相似 Redis 的分布式缓存做事务数据的缓存。在MySQL 8.0 中,查询缓存直接被移除了。

剖析器

接着上面的,假如在查询缓存中没有查到数据,就要真实的开端履行SQL句子了。剖析器首要会做“词法剖析”,如:

mysql> select id, name from T where id = 1;

词法剖析便是辨认上面字符串,id、name 是表的字段名,T 是表的称号等等。之后便是语法剖析,假如SQL有语法错误,在此刻就会报错。

优化器

当剖析器处理过之后,MySQL就知道SQL 要干什么了,可是此刻还需求优化器对待履行的SQL 进行优化。当然MySQL 供给的优化器,比较其他几款商用收费的数据库来说仍是比较弱的。当然MySQL 的优化器仍是能够对 join 操作,表达式核算等等进行优化,本篇不做过多的介绍。

履行器

履行阶段,首要会查看当时用户有没有权限操作该 SQL 句子。假如有,则持续履行后续的操作。


参阅:《极客时刻:MySQL实战》、《高性能MySQL》

雷火电竞版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

最近发表

    雷火电竞app_雷火竞技app_雷火电竞2

    http://www.ani-world.net/

    |

    Powered By

    使用手机软件扫描微信二维码

    关注我们可获取更多热点资讯

    雷火电竞出品