MySQL 既支持短连接,也支持长连接。短连接就是操作完毕以后,马上close 掉。长连接可以保持打开,减少服务端创建和释放连接的消耗,后面的程序访问的时候还可以使用这个连接。一般我们会在连接池中使用长连接。
保持长连接会消耗内存。长时间不活动的连接,MySQL 服务器会断开。
show global variables like 'wait_timeout'; -- 非交互式超时时间,如JDBC 程序
show global variables like 'interactive_timeout'; -- 交互式超时时间,如数据库工具
默认都是28800 秒,8 小时。
我们怎么查看MySQL 当前有多少个连接?
可以用show status 命令:
show global status like 'Thread%';
Threads_cached:缓存中的线程连接数。
Threads_connected:当前打开的连接数。
Threads_created:为处理连接创建的线程数。
Threads_running:非睡眠状态的连接数,通常指并发连接数。
每产生一个连接或者一个会话,在服务端就会创建一个线程来处理。反过来,如果要杀死会话,就是Kill 线程。
有了连接数,怎么知道当前连接的状态?
也可以使用SHOW PROCESSLIST; (root 用户)查看SQL 的执行状态。
https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html
一些常见的状态:
https://dev.mysql.com/doc/refman/5.7/en/thread-commands.html
MySQL 服务允许的最大连接数是多少呢?
在5.7 版本中默认是151 个,最大可以设置成16384(2^14)。
show variables like 'max_connections';
show 的参数说明:
1、级别:会话session 级别(默认);全局global 级别
2、动态修改:set,重启后失效;永久生效,修改配置文件/etc/my.cnf
set global max_connections = 1000;