什么是短链接?
短链接是指程序和数据库通讯时须要创建链接,执行操做后,链接关闭。短链接简单来讲就是每一次操做数据库,都要打开和关闭数据库链接,基本步骤是:链接 →数据传输 →关闭链接。mysql
什么是长链接?
长链接是指程序之间的链接在创建以后,就一直打开,被后续程序重用。使用长链接的初衷是减小链接的开销,尽管MySQL的链接比其余数据库要快得多。sql
以PHP程序为例,当收到一个永久链接的请求时,PHP将检查是否已经存在一个(前面已经开启了的)相同的永久链接。若是存在,则将直接使用这个链接;若是不存在,则创建一个新的链接。所谓“相同”的链接是指用相同的用户名和密码到相同主机的链接。数据库
从客户端的角度来讲,使用长链接有一个好处,能够不用每次建立新链接,若客户端对MySQL服务器的链接请求很频繁,永久链接将更加高效。对于高并发业务,若是可能会碰到链接的冲击,推荐使用长链接或链接池。服务器
从服务器的角度来看,状况则略有不一样,它能够节省建立链接的开销,但维持链接也是须要内存的。若是滥用长链接的话,可能会使用过多的MySQL服务器链接。现代的操做系统能够拥有几千个MySQL链接,但颇有可能绝大部分都是睡眠(sleep)状态的,这样的工做方式不够高效,并且链接占据内存,也会致使内存的浪费。并发
对于扩展性好的站点来讲,其实大部分的访问并不须要链接数据库。若是用户须要频繁访问数据库,那么可能会在流量增大的时候产生性能问题,此时长短链接都是没法解决问题的,因此应该进行合理的设计和优化来避免性能问题。运维
若是客户端和MySQL数据库之间有链接池或Proxy代理,通常在客户端推荐使用短链接。对于长链接的使用必定要慎重,不可滥用。若是没有每秒几百、上千的新链接请求,就不必定须要长链接,也没法从长链接中获得太多好处。在Java语言中,因为有链接池,若是控制得当,则不会对数据库有较大的冲击,但PHP的长链接可能致使数据库的链接数超过限制,或者占用过多的内存。高并发
对此,研发工程师、系统运维工程师、DBA须要保持沟通,肯定合理的链接策略,千万不要不假思索就采用长链接。性能
所有使用长链接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是由于 MySQL 在执行过程当中临时使用的内存是管理在链接对象里面的。这些资源会在链接断开的时候才释放。因此若是长链接累积下来,可能致使内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。怎么解决这个问题呢?优化
解决方案:
1. 按期断开长链接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开链接,以后要查询再重连。spa
2. 若是你用的是 MySQL 5.7 或更新版本,能够在每次执行一个比较大的操做后,经过执行 mysql_reset_connection 来从新初始化链接资源。这个过程不须要重连和从新作权限验证,可是会将链接恢复到刚刚建立完时的状态。
我的总结:
长链接主要用于在少数客户端与服务端的频繁通讯,由于这时候若是用短链接频繁通讯常会发生Socket出错,而且频繁建立Socket链接也是对资源的浪费。
可是对于服务端来讲,长链接也会耗费必定的资源,须要专门的线程(unix下能够用进程管理)来负责维护链接状态。
总之,长链接和短链接的选择要视状况而定。
一、在频繁的与数据库服务通讯,而且又非高并发的状况下,使用长链接更合适;
二、太多持久链接,大部分是sleep状态的,或者系统是高并发的,使用短链接更合适。