近期在做DB审计的时候发现一个问题,决定写出来让大家参考参考。本篇文章主要是讲述开发在使用数据库的时候该如何规范的使用何种连接。
概念解释:
长连接:长连接是相对于短连接来说的。长连接指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。mysql的长连接如果长期闲置,mysql会8小时后(默认时间)主动断开该连接。
短连接:是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。
连接的区别:
使用长连接,短连接各有优势,也各有缺点。我们看看长短连接,系统是怎么做的?
1、短连接:
客户端连接--创建socket认证连接--维护连接--数据传输--关闭连接
2、长连接
客户端连接--创建socket认证连接--维护连接--数据传输--维护连接--数据传输.....-关闭连接
2种连接方式都需要系统开销来维护连接,哪种连接最合适并没有准确的说法,主要还是看你客户端的行为。
长短连接的例子
在这里主要讲一个该使用长连接的情况下使用了短连接,本文不会从系统性能负载以及开销去分析,重点是针对mysql的连接做审计来判断。
某业务在审计时候发现连接数一直在直线上升:
mysql> select count(1) from db_monitor.accesslog;
+----------+
| count(1) |
+----------+
| 16117 |
+----------+
1 row in set (0.01 sec)
mysql> select count(1) from db_monitor.accesslog;
+----------+
| count(1) |
+----------+
| 23768|
+----------+
1 row in set (0.01 sec)
...
截一段连接的审计图给看看:

查看mysql的进程却只有2-3个连接

但是每个连接几乎不到1s钟就关闭了,很典型的频繁连接进行数据通信。这种业务就特别的消耗系统资源和mysql的资源。这种情况业务应该使用长连接来使用数据库服务。
更改为长连接后,审计连接用户数就马上正常了,保持在一定的数值。
个人总结:
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。
但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。
总之,长连接和短连接的选择要视情况而定。
1、在频繁的与数据库服务通信,并且又非高并发的情况下,使用长连接更合适;
2、太多持久连接,大部分是sleep状态的,或者系统是高并发的,使用短连接更合适。
来源:https://blog.csdn.net/wlzjsj/article/details/52441813