1. select语句执行过程-网络通信

1. select语句执行过程-网络通信执行过程图 网络通信 MySQL 是支持多种通信协议的,可以使用同步/异步的方式,支持长连接/短连接。 1.同步/异步 异步的问题 异步可以避免应用阻塞等待,但是不能节省 SQL 执行的时间。 如果…

1. select语句执行过程-网络通信

执行过程图

执行过程

网络通信

MySQL 是支持多种通信协议的,可以使用同步/异步的方式,支持长连接/短连接。

1.同步/异步

异步的问题

  • 异步可以避免应用阻塞等待,但是不能节省 SQL 执行的时间。
  • 如果异步存在并发,每一个 SQL 的执行都要单独建立一个连接,避免数据混乱。线程的上下文切换,会增加服务器压力
  • 增加编程复杂度

默认是同步,即客户端需要等mysql服务器的响应,也是符合大多数情况的。

2. 长连接/短连接

短连接就是操作完毕以后,马上 close 掉。长连接可以保持打开,减少服务端创建和释放连接的消耗,后面的程序访问的时候还可以使用这个连接。一般我们会在连接池中使用长连接。

相关命令

2.1.查询连接超时时间

show global variables like "wait_timeout"; -- 非交互式超时时间, 如 JDBC 程序
show global variables like "interactive_timeout"; -- 交互式超时时间, 如数据库工具

代码100分

默认都是 28800 秒,8 小时。

2.2.查询和设置连接状态

2.2.1 查询连接状态
代码100分show global status like "Thread%";
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 649   |  <—当前被缓存的空闲线程的数量
| Threads_connected | 93    | <—正在使用(处于连接状态)的线程
| Threads_created   | 742   |  <—服务启动以来,创建了多少个线程
| Threads_running   | 5     | <—正在忙的线程(正在查询数据,传输数据等等操作)
+-------------------+-------+
2.2.2 查看开机起来数据库被连接了多少次
show status like "%connections%";
show global status like "%connections%";
+-----------------------------------+---------------------+
| Variable_name                     | Value               |
+-----------------------------------+---------------------+
| Connection_errors_max_connections | 0                   |
| Connections                       | 101395055           |   <–服务启动以来,历史连接数
| Max_used_connections              | 742                 |
| Max_used_connections_time         | 2018-08-21 15:42:38 |
+-----------------------------------+---------------------+
2.2.3 设置thread_cache_size

通过连接线程池的命中率来判断设置值thread_cache_size是否合适, 命中率超过90%以上,设定合理。 (Connections – Threads_created) / Connections * 100 %>=90%

2.3 查询执行状态

代码100分 SHOW PROCESSLIST;

1. select语句执行过程-网络通信 1. select语句执行过程-网络通信

2.4查询和设置最大连接数

查看配置

show variables like "max_connections";

在 5.7 版本中默认是 151 个,最大可以设置成 16384(2^14)。

设置配置

set global max_connections = 1000;

3.通信协议

1.Unix Socket。

2. TCP/IP

mysql -h192.168.8.211 -uroot -p123456

我 们 的 编 程 语 言 的 连 接 模 块 都 是 用 TCP 协 议 连 接 到 MySQL 服 务 器 的 , 比 如 mysql-connector-java-x.x.xx.jar。

1. select语句执行过程-网络通信

3. 命名管道(Named Pipes)

4. 内存共享(Share Memory)

这两种通信方式只能在 Windows 上面使用,一般用得比较少。

4.通信方式

  • 单工: 在两台计算机通信的时候,数据的传输是单向的。生活中的类比:遥控器。
  • 半双工: 在两台计算机之间,数据传输是双向的,你可以给我发送,我也可以给你发送, 但是在这个通讯连接里面,同一时间只能有一台服务器在发送数据,也就是你要给我发 的话,也必须等我发给你完了之后才能给我发。生活中的类比:对讲机。
  • 全双工: 数据的传输是双向的,并且可以同时传输。生活中的类比:打电话。 MySQL采用半双工方式

SQL命令一次性发送

客户端发送 SQL 语句给服务端的时候,(在一次连接里面)数据是不能分成小块发送的,不管你的 SQL 语句有多大,都是一次性发送 比如我们用 MyBatis 动态 SQL 生成了一个批量插入的语句,插入 10 万条数据,values后面跟了一长串的内容,或者 where 条件 in 里面的值太多,会出现问题。 相关配置max_allowed_packet,默认4M

执行结果一次性发送

服务端来说,也是一次性发送所有的数据,不能因为你已经取到了想要的数据就中断操作,这个时候会对网络和内存产生大量消耗

#参考资料 1.https://mp.weixin.qq.com/s/PEk97JyIlUexuAjFr2pmiw

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7171.html

(0)
上一篇 2023-03-25
下一篇 2023-03-25

相关推荐

  • 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句「终于解决」

    利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句「终于解决」1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write

    2023-04-20
    152
  • Python中的str

    Python中的str在Python的编程中,字符串(str)是最为普遍的数据类型之一,几乎所有的编程项目都涉及到字符串的处理和运用。Python中字符串的概念,是由若干个字符组成的序列。

    2024-06-19
    46
  • 代码演示Mybatis-Generator 扩展自定义生成「终于解决」

    代码演示Mybatis-Generator 扩展自定义生成「终于解决」Mybatis-Generator 可自动生成Model、Dao、Mapper代码,但其自带生成的代码存在以下问题: 生成的注释不是我们想要的,我们期望的是根据数据库表、字段生成不同的注释; 分页代…

    2023-01-31
    140
  • postgresql强制删除数据库

    postgresql强制删除数据库SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='db_name&#

    2023-03-01
    162
  • PS打开图片闪退原因

    PS打开图片闪退原因有的用户使用PS打开图片时会出现闪退的情况,这给用户带来了很大的不便。下面介绍一下PS打开图片闪退的原因。

    2024-09-22
    12
  • 使用setup.py来管理Python项目的依赖

    使用setup.py来管理Python项目的依赖Python是一门广受欢迎和广泛应用的编程语言,拥有优秀的生态系统和强大的第三方包支持。当我们在开发Python项目的时候,通常需要引用许多第三方库和框架。这时候,就需要一个好的依赖管理工具来帮助我们管理这些依赖关系,以确保项目的可靠性和稳定性。在Python中,使用setup.py来管理项目依赖是一种非常常见的做法。

    2024-03-25
    83
  • Python time模块:高效处理时间相关任务的利器

    Python time模块:高效处理时间相关任务的利器在Python程序的开发中,时间处理是一个十分重要的问题,Python中的time模块就是专门提供了对时间处理的相关函数和方法的模块。该模块可以帮助我们在处理时间相关任务的时候,提高代码的效率和可读性,提供强大的功能支持。本文将从多个方面对Python time模块进行详细的阐述,包括时间表示、时间计算、时间格式化、线程睡眠等知识点。

    2024-02-17
    93
  • sql查询结果分组_sql 分组查询

    sql查询结果分组_sql 分组查询数据分组以后,要找出在每个分组中都出现的某个字段值。 用SQL来解决这个问题并不容易! SQL缺少单纯的分组操作,只能返回各分组的统计值,而不能对各组的成员再进行更细的交、差、并等集合运算。要解决这…

    2023-03-07
    143

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注