【转载】MySQL客户端服务器协议

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

查询的实行路径:

      这个协议是半双工的,这意味着 MySQL 服务器在某个给定的时间,可以发送或接收数据,但是不能同时发送和接收。这也意味着没有办法截断消息。

      这种协议让 MySQL 的沟通简单而又快捷,但是它也有一些限制。其中一个就是无法进行流程控制,一旦一方发送消息,另一方在发送回复之前就必须提取完整的消息。这像来回抛球的游戏:在任意时刻,只有某一方有球,而且除非有球在手上,否则就不能把球抛回去(发送消息)。

      客户端用一个数据包将查询发送到服务器。这就是为什么 max_packet_size 这个配置参数对于大查询很重要的一个原因(如果查询过大,那么服务器会拒绝接收数据并且抛出一个错误)。一旦客户端发送了查询,那就意味着“球”已经不在自己手中,唯一能做的事情就是等待结果。

      但是,服务器发送的响应由许多数据包组成。服务器发送响应的时候,客户端必须接收完整的结果集。它不能只提取几行数据后就要求服务器停止发送剩下的数据。如果客户端只需要其中的几行数据,要么等待所有数据都传送完毕后丢掉不用的数据,要么就笨拙地断开连接。这两种办法都不好,这就是为什么 LIMIT 子句很重要的原因。

      还有另外一种理解方式,当客户端从服务器提取数据的时候,它认为所有数据都是从服务器“”过来的,但实际情况是服务器在产生这些数据的同时就把它们“”到客户端。客户端只需要接收推出来的数据,根本没办法告诉服务器停止发送数据。

      绝大多数连接 MySQL 的类库,能让你提取完整的结果,然后缓存到内存中,或者只是提取需要的数据。默认的行为通常是提取所有数据后缓存。这很重要,因为 MySQL 只有在所有数据被提取之后,才会释放点所有的锁和资源。查询的状态会是“发送数据”。如果客户端类库一次性提取了所有的数据,那么就可以减少服务器所做的工作,让服务器可以尽可能快地完成所有的清理工作。

      大部分客户端类库可以让使用者像直接从服务器上提取数据一样处理结果,但是它实际上只是在类库的内存中处理数据。这种机制在大多数时候都工作良好,但是对于很庞大的结果集也许会需要很长的时间和很多内存。如果不缓存数据,那么就可以使用较少的内存,并且尽快开始工作。这么做的缺点就是在应用程序和类库交互的时候,服务器端的锁和资源都是被锁定的。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
网络协议 关系型数据库 MySQL
1.4 启动MySQL客户端程序
1.4 启动MySQL客户端程序
37 0
|
5月前
|
关系型数据库 MySQL 数据库
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
237 0
|
24天前
|
SQL 关系型数据库 MySQL
免费MySQL数据库客户端推荐
免费MySQL数据库客户端推荐
27 0
|
25天前
|
SQL 关系型数据库 MySQL
MySQL数据库免费客户端简介
MySQL数据库免费客户端简介
23 0
|
2月前
|
SQL 关系型数据库 MySQL
⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source
⑩⑨【Tool】MySQL常用客户端管理工具:mysql、mysqladmin、mysqlbinlog、mysqlshow、mysqldump、mysqlimport、source
28 0
|
2月前
|
存储 缓存 关系型数据库
MySQL处理客户端请求
可以提高系统性能,但是也因此需要维护这块缓存而造成一些开销。比如每次都要去查询缓存中检索、请求处理完后需要更新查询缓存等。从MySQL5.7开始不推荐使用查询缓存,在MySQL8.0中查询缓存被删除。
|
3月前
|
SQL 关系型数据库 分布式数据库
阿里云PolarDB是一款兼容MySQL、PostgreSQL和SQL Server等多种数据库协议的产品
阿里云PolarDB是一款兼容MySQL、PostgreSQL和SQL Server等多种数据库协议的产品
591 6
|
5月前
|
关系型数据库 MySQL
3.3.2 【MySQL】客户端和服务器通信中的字符集
3.3.2 【MySQL】客户端和服务器通信中的字符集
51 0
|
6月前
|
存储 缓存 关系型数据库
MySQL处理客户端请求
简单来说 MySQL 主要分为 Server 层和存储引擎层: Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binlog 日志模块。
MySQL处理客户端请求
|
7月前
|
关系型数据库 MySQL Windows
Windows端 五款 MySQL 客户端工具
Windows端 五款 MySQL 客户端工具
1428 0

热门文章

最新文章