MySQL性能优化(一)——MySQL架构设计

要掌握MySQL的性能优化技术,首先我们就要对MySQL的总体架构和各个模块的功能于作用有个整体的认识和了解,再逐层深入,才能更加牢固的掌握,形成自己的知识体系。

  • MySQL总体架构
MySQL总体架构图

总体来看,MySQL可划分为连接层、SQL处理层、存储引擎层这三层,当然,MySQL的数据文件和日志文件最终是存放到文件系统中,因此MySQL最底层是文件系统,但文件系统属于操作系统,可以不算在MySQL的架构中。

  • MySQL详细架构

连接层

首先我们需要认识到一点,数据库的连接层并非MySQL所独有,任何的数据库系统都有这一层逻辑,只不过实现逻辑各异。连接层主要实现连接处理、权限管理、安全认证等功能。

MySQL连接层包含ConnectorsEnterprise Management Serveices & UtilitiesConnection Pool这三个功能模块,下面我们一次来讲讲这三个功能模块的具体作用。

Connectors(MySQL客户端)

此模块包含连接和访问MySQL数据库系统的各种客户端,如我们最常用的JDBC,还有如图给出的Python、Native C API、ODBC等不同实现的客户端。

Enterprise Management Serveices & Utilities(系统管理和控制工具)

此模块提供了MySQL的系统管理和控制工具,同时,也实现了MySQL的身份验证和权限校验,当一个用户通过客户端连接到MySQL服务器,服务器需要对其进行身份验证,也就是用户名、IP、密码验证,一旦连接成功,还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个数据库某个表的某个操作)。
MySQL登录认证

Connection Pool(连接池)

连接池的工作原理是,当MySQL启动(MySQL服务就是一个进程),等待客户端连接,每接收到一个客户端连接请求,MySQL服务器都会新建一个线程来处理(如果是线程池,则是分配一个空的线程),每个线程相互独立,且拥有各自的内存处理空间(注意是内存空间,不是磁盘)。但需要注意的是,如果这个请求只是查询数据,那不会发生数据同步问题,但是如果涉及到修改数据,当两个线程修改同一块内存时,则会引发数据同步问题。
MySQL连接池工作原理

除此以外,连接池允许我们通过max_connections参数,设置MySQL的最大连接数,MySQL默认最大连接数为151。

最大连接数
  • 查看MySQL最大连接数
show VARIABLES like '%max_connections%';
  • 设置最大连接数
set GLOBAL max_connections = 200

SQL处理层

准确的说,SQL处理层包含SQL Interface(SQL接口)、Parser(SQL解析器)、Optimizer(SQL优化器)、Caches&Buffers(缓存)这四个功能模块。

SQL Interface

此模块定义和实现了DML、DDL等我们操作和定义MySQL数据的SQL语言功能。也实现了MySQL的存储过程、视图、触发器、函数以及MySQL内置函数。这部分是我们平时使用MySQL数据库系统的过程中,接触最多的部分,也是MySQL数据库系统中,最核心的功能模块之一。

SQL Parser(SQL解析器)

解析查询,创建一个内部数据结构(解析树),这个解析树主要用来完成SQL语句的语义与语法解析。MySQL并不会按照我们书写的SQL规范和顺序,来完成数据的存取,而是会按照它内部所定义的一套SQL解析规范,来解析SQL,这样MySQL数据库系统才能识别。这就好比计算机不认识我们人类的语言,所有的人类语言,都要转换成0101这样的二进制字节码它才能认识。

下面就是MySQL解析的SQL解析树,也就是MySQL对我们书写的SQL的解析规则:

Optimizer(优化器)

优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询的,查询服务器优化器是如何运行的,便于用户重构查询和修改相关配置,以达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,比如某个操作的开销信息、是否对特定索引有查询优化等。

Caches&Buffers(缓存)

MySQL会缓存查询的SQL文本以及结果数据在内存中,当执行相同的SQL时,MySQL会优先从缓存中查询结果,如果命中,则直接向客户端返回结果,如果未命中,MySQL再解析、优化、执行SQL,从数据库中查询数据。

MySQL的SQL文本缓存是默认开启的,且外界无法干预(也就是说我们不能去手动关闭它),但MySQL的查询结果缓存,默认是关闭的,我们可以手动的去关闭和开启。

  • 查询缓存是否开启
show variables like '%query_cache_type%';

MySQL的缓存开关,在MySQL的配置文件中,通过设置query_cache_type = 1(开启)或者0(关闭)控制,设置完成重启MySQL服务即可。

  • 设置缓存大小
SET GLOBAL query_cache_size = 4000

或者在配置文件中,设置query_cache_size = 4000,重启服务即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值