(一)Mysql底层架构(工作原理)

mysql底层结构

用户:进行数据库连接的人。

支持接口:是第三方语言提供和数据库连接的接口,常见的有jdbc,odbc,c的标准api函数等等。

连接层:提供与用户的连接服务,用于验证登录服务。

服务层:完成大多数的核心服务功能。有sql接口,解析器parser,优化器optimizer,查询缓存 cache/buffer 。

      服务层执行过程:sql语句通过sql接口,服务器如果缓存cache有命中查询结果,直接读取数据。如果没有命中查询结果,由解析器进行sql语句的解析,预处理,经过优化器进行优化后提交给引擎层。通俗的说--------->服务层告诉引擎层要做什么。

引擎层:  提供各种存储引擎,真正的负责MySQL中数据的存储和提取。常见有innodb  myisam 。innodb支持全文索引,事务(高并发),行锁,myisam 性能优先。 mysql中查询引擎语句:show engines.   通俗的说--------->引擎层会转发服务层解析出来的sql语句告诉存储层要做什么(增删改查)并且告诉存储层要以何种方式做(innodb myisam等等)。

存储层: 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

 

 

 

SQL的执行流程:数据库通常不会被单独使用,而是由其它编程语言通过SQL支持接口调用MySQL。由MySQL处理并返回执行结果。首先,其它编程语言通过SQL支持接口调用MySQL,MySQL收到请求后,会将该请求暂时放在连接池,并由管理服务与工具进行管理。当该请求从等待队列进入到处理队列时,管理器会将该请求传给SQL接口,SQL接口接收到请求后,它会将请求进行hash处理并与缓存中的数据进行对比,如果匹配则通过缓存直接返回处理结果;否则,去文件系统查询:由SQL接口传给后面的解析器,解析器会判断SQL语句是否正确,若正确则将其转化为数据结构。解析器处理完毕后,便将处理后的请求传给优化器控制器,它会产生多种执行计划,最终数据库会选择最优的方案去执行。确定最优执行计划后,SQL语句交由存储引擎处理,存储引擎将会到文件系统中取得相应的数据,并原路返回。
 

----------------------------------2019.10.25日补充一些详细的知识点---------------------------------------------------

1.引擎是什么:

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

当我们理解了引擎这个概念,自然而然就知道引擎层的作用就提供各种不同引擎给你选择,然后用你选出来的引擎去处理sql语句

2.MySQL缓存机制:

上面SQL语句进入服务层后会进行测试是否命中查询缓存。所谓的查询缓存就是将第一次的查询结果放在hash表中然后存入内存。一条查询语句所带来的开销可以忽略,但一旦涉及到高并发,有成千上万条查询语句时,hash计算和查找所带来的内存开销就必须重视了。

MySQL缓存相关的配置参数

mysql> show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     |      --查询缓存是否可用
| query_cache_limit            | 1048576 |      --可缓存具体查询结果的最大值
| query_cache_min_res_unit     | 4096    |      --查询缓存分配的最小块的大小(字节)
| query_cache_size             | 599040  |      --查询缓存的大小
| query_cache_type             | ON      |      --是否支持查询缓存
| query_cache_wlock_invalidate | OFF     |      --控制当有写锁加在表上的时候,是否先让该表相关的 Query Cache失效
+------------------------------+---------+
  • 开启缓存
mysql> set global query_cache_size = 600000; --设置缓存内存大小
mysql> set global query_cache_type = ON;     --开启查询缓存
  • 关闭缓存
mysql> set global query_cache_size = 0; --设置缓存内存大小为0, 即初始化是不分配缓存内存
mysql> set global query_cache_type = OFF;     --关闭查询缓存

    set global时需要有SUPER权限

    考虑关闭mysql缓存,还可以借住memcached,redis等外部缓存工具,提高mysql查询缓存性能。

 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值