0
点赞
收藏
分享

微信扫一扫

MySQL 的连接原理分析

1 MySQL连接介绍

1.1通信类型

同步通信依赖于被调用方,受限于被调用方的性能。也就是说,应用操作数据库,线程

会阻塞,等待数据库的返回。

1.2 异步通信

异步可以避免应用阻塞等待,但是不能节省 SQL 执行的时间。如果异步存在并发,每

一个 SQL 的执行都要单独建立一个连接,避免数据混乱。但是这样会给服务端带来巨大的

压力(一个连接就会创建一个线程,线程间切换会占用大量 CPU 资源)。另外异步通信还

带来了编码的复杂度,所以一般不建议使用。如果要异步,必须使用连接池,排队从连接池

获取连接而不是创建新连接。

2 连接方式

2.1 短连接

短连接操作步骤:

连接–>数据传输–>关闭连接。

2.2 长连接

长连接操作步骤

连接–>数据传输–>保持连接–>数据传输–>保持连接–>…………–>关闭连接

3 协议

3.1 TCP/IP

TCP/IP 套接字连接方式是 MySQL 在任何平台都提供的一种连接方式,也是网络中使用

最多的一种方式

3.2 Unix Socket

UNIX Socket 是连接 MySQL 需要一个物理文件,文件的存放位置在配置文件中有定义,

所以只能在 MySQL 客户端和数据库实例在同一台服务器上的情况下使用。它所有协议中最

高效的一个。

4 在服务端中查看连接信息

4.1 查看服务端中的连接数

show global status like ‘Thread%’

MySQL 的连接原理分析_服务端

Thread_cached:线程缓存中的线程数

Thread_connected:当前打开的连接数

Thread_created:为处理连接而创建的线程数

Thread_running:未休眠的线程数

4.2 优化 Threads_created

MySQL 的连接原理分析_服务端_02

threads_created 表示创建过的线程数,很明显,如果threads_created 过大,表明 mysql 服务

器一直在创建线程,这也是比较耗资源,说明服务器不健康。

4.2.1 解决方案

配置 thread_cache_size:

thread_cache_size 作用是当客户端断开之后,服务器处理此客户的线程将会缓存起来以

响应下一个客户而不是销毁(前提是缓存数未达上限)。MySQL<= 5.6.7 默认为 0,MySQL>=

5.6.8 默认值为-1(自动调整)。可设置为 0-16384。

查看 thread_cache_size:默认为10->可以缓存10个线程

show variables like ‘thread_cache_size’

MySQL 的连接原理分析_服务端_03

设置规则:

如果是短连接,适当设置大一点,因为短连接往往需要不停创建,不停销毁,如果大一

点,连接线程都处于取用状态,不需要重新创建和销毁,所以对性能肯定是比较大的提升。

如果是长连接,可以设置成小一点,一般在 50-100 左右

根据物理内存设置规则:

1G —> 8

2G —> 16

3G —> 32

>=4G —> 64

set global thread_cache_size=64 //重启 mysql 后失效。

MySQL 的连接原理分析_mysql_04

MySQL 的连接原理分析_服务端_05

5 查看连接超时时间

5.1 交互式

交互式:是指使用客户端工具连接数据库服务端。如:Navicat、SQLyog 等。

全局: ->单位秒

show global variables like ‘interactive_timeout’

MySQL 的连接原理分析_mysql_06

会话:

show session variables like ‘interactive_timeout’

MySQL 的连接原理分析_服务端_07

5.2 非交互式

非交互式:是指使用 JDBC 方式连接数据服务端。

全局:

show global variables like ‘wait_timeout’

MySQL 的连接原理分析_服务端_08

会话:

show session variables like 'wait_timeout

MySQL 的连接原理分析_服务端_09

5.3 优化连接超时时间

5.3.1 交互式

全局

set global interactive_timeout=600;

MySQL 的连接原理分析_mysql_10

MySQL 的连接原理分析_服务端_11

会话

set session interactive_timeout=600;

MySQL 的连接原理分析_服务端_12

MySQL 的连接原理分析_mysql_13

5.3.2 非交互式

全局

set global wait_timeout=600;

MySQL 的连接原理分析_服务端_14

MySQL 的连接原理分析_mysql_15

会话

set session wait_timeout=600;

MySQL 的连接原理分析_服务器_16

MySQL 的连接原理分析_mysql_17

5.3.3 总结

wait_timeout 的作用是,设置非交互连接(就是指那些连接池方式、非客户端方式连接

的)的超时时间,默认是 28800,就是 8 小时,超过这个时间,mysql 服务器会主动切断那

些已经连接的,但是状态是 sleep 的连接

6 查看最大连接数

对客户端而言,MySQL 服务端的最大连接数是指服务端允许的最大连接并发数。

show variables like ‘max_connections’;

MySQL 的连接原理分析_服务器_18

6.1 优化最大连接数

该参数设置过小的最明显特征是出现”Too many connections”异常。

如果服务器的并发连接请求量比较大,建议调高该值,以增加并行连接数量,当然这建

立在机器能支撑的情况下,因为如果连接数越多,介于 MySQL 会为每个连接提供连接缓冲

区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。

通过命令修改

set global max_connections = 200; ->通过global设置的参数在服务器重启后会失效

MySQL 的连接原理分析_mysql_19

MySQL 的连接原理分析_mysql_20

通过配置文件修改 my.ini ->重启也不影响参数设置


举报

相关推荐

0 条评论