MySQL处理客户端请求

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 可以提高系统性能,但是也因此需要维护这块缓存而造成一些开销。比如每次都要去查询缓存中检索、请求处理完后需要更新查询缓存等。从MySQL5.7开始不推荐使用查询缓存,在MySQL8.0中查询缓存被删除。

可以提高系统性能,但是也因此需要维护这块缓存而造成一些开销。比如每次都要去查询缓存中检索、请求处理完后需要更新查询缓存等。从MySQL5.7开始不推荐使用查询缓存,在MySQL8.0中查询缓存被删除。


  • Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binlog 日志模块。
  • 存储引擎:主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5 版本开始就被当做默认存储引擎了。


一、连接管理

**每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个进程专门处理与这个客户端的交互。**当客户端退出时会与该服务器断开连接,服务器并不会立即把与该客户端的交互的线程销毁,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分给新客户端。这样就不用频繁地创建和销毁线程,从而节省了开销。当然线程分的太多也会影响系统性能,所以也可以限制连接到服务器的客户端的梳理。


在客户端发起连接时,需要携带主机信息、用户名、密码等信息,服务器程序会对客户端提供的这些信息进行认证。如果认证失败,服务器程序会拒绝连接。另外如果客户端程序和服务器程序不在一台计算机上,我们还可以通过传输层安全性TLS协议对连接进行加密,从而保证数据传输的安全。


当连接建立后,与该客户端关联的服务器线程会一直等待客户端发送过来的请求。MySQL服务器接受到的请求只是一个文本消息,该文本消息还要经过各种处理。


扩展:

平时Web应用中一般会使用线程池进行数据库连接的管理,因为建立连接是需要时间的,对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接建立(如三次握手、验证账户、密码等)和释放过程的时间开销,从而缩减了系统整体响应时间。

此外在Java应用中,一般使用ThreadLocal来维护线程的数据库连接,这样可以实现线程之间的相互隔离,并且保证在一个请求上下文中不同DAO都使用一个连接。


二、解析与优化

1、查询缓存

MySQL服务器程序处理查询请求时会把上次处理过得查询请求和结果存储起来,如果下一次有同样的请求过来,直接从缓存中查找结果就可以了,不需要再去底层的表中查找了。这个查询缓存可以在不同的客户端之间共享。


当然如果两个查询请求有任何字符上的不用,包括空格、注释、大小写等,都会导致缓存不命中。并且如果查询请求中包含某些系统函数、用户自定义变量和函数、系统表(如mysql、information_schema、performance_shcema),这个请求就不会被缓存。


MySQL的缓存系统会检测设计的每张表,只要该表的结构或者数据被修改,比如对表使用了Insert、Update、Delete、Truncate Table、Alter Table、Drop Table和Drop Database等语句,都会使得与该表有关的所有查询缓存无效并被删除。


虽然查询缓存有时候可以提高系统性能,但是也因此需要维护这块缓存而造成一些开销。比如每次都要去查询缓存中检索、请求处理完后需要更新查询缓存等。从MySQL5.7开始不推荐使用查询缓存,在MySQL8.0中查询缓存被删除。


2、语法解析

如果查询缓存没有命中,接下来就要进入正式的查询阶段了。因为客户端程序发送过来的请求只是一段文本,所以MySQL服务器首先需要对这段文本进行分析,判断请求的语法是否正确,然后从文本中将要查询的表、各种查询条件都提取出来放到MySQL服务器内部使用的一些数据结构上。


3、查询优化

在语法解析之后欧,服务器程序获得到了需要的信息,比如要查询的表和列是哪些、搜索条件是什么等。然而因为我们写的SQL语句执行起来效率可能不是很高,MySQL的优化程序会对我们的语句做一些优化,如外连接转换为内连接、表达式简化、子查询转化为连接等等。优化的结果就是生成一个执行计划,这个执行计划表明了应该用哪些索引执行查询,以及表之间的连接顺序是啥样的等等。我们可以使用Explain语句来查看某个语句的执行计划。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
7月前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
374 1
|
3月前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
4月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
35 2
|
4月前
|
存储 分布式计算 DataWorks
DataWorks产品使用合集之在本地客户端一直无法连接ADB MySQL,是什么原因
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——概述-MySQL的安装、启动与停止和客户端连接、关系型数据库(RDBMS)、数据模型
MySQL数据库——概述-MySQL的安装、启动与停止和客户端连接、关系型数据库(RDBMS)、数据模型
65 0
|
7月前
|
存储 关系型数据库 MySQL
从 MySQL 执行原理告诉你:为什么分页场景下,请求速度非常慢
从 MySQL 执行原理告诉你:为什么分页场景下,请求速度非常慢
51 0
|
7月前
|
SQL 关系型数据库 MySQL
⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source
⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source
91 0
|
关系型数据库 MySQL
3.3.2 【MySQL】客户端和服务器通信中的字符集
3.3.2 【MySQL】客户端和服务器通信中的字符集
145 0
|
19天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1