《MySQL DBA修炼之道》——1.5 长连接、短连接、连接池

1.5 长连接、短连接、连接池

当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信。客户端必须使用数据库连接来发送命令和接收应答、数据。通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了。可以查阅程序语言手册来获知通过何种方式使用短连接、长连接。
1.5.1 短连接
短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是:连接→数据传
输→关闭连接。
在慢速网络下使用短连接,连接的开销会很大;在生产繁忙的系统中,连接也可能会受到系统端口数的限制,如果要每秒建立几千个连接,那么连接断开后,端口不会被马上回收利用,必须经历一个“FIN”阶段的等待,直到可被回收利用为止,这样就可能会导致端口资源不够用。在Linux上,可以通过调整/proc/sys/net/ipv4/ip_local_port_range 来扩大端口的使用范围;调整/proc/sys/net/ipv4/tcp_fin_timeout来减少回收延期(如果想在应用服务器上调整这个参数,一定要慎重!)。
另外一个办法是主机使用多个IP地址。端口数的限制其实是基于同一个IP:PORT的,如果主机增加了IP,MySQL就可以监听多个IP地址,客户端也可以选择连接某个IP:PORT,这样就增加了端口资源。
1.5.2 长连接
长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。
以PHP程序为例,当收到一个永久连接的请求时,PHP 将检查是否已经存在一个(前面已经开启了的)相同的永久连接。如果存在,则将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。
从客户端的角度来说,使用长连接有一个好处,可以不用每次创建新连接,若客户端对MySQL 服务器的连接请求很频繁,永久连接将更加高效。对于高并发业务,如果可能会碰到连接的冲击,推荐使用长连接或连接池。
从服务器的角度来看,情况则略有不同,它可以节省创建连接的开销,但维持连接也是需要内存的。如果滥用长连接的话,可能会使用过多的MySQL服务器连接。现代的操作系统可以拥有几千个MySQL连接,但很有可能绝大部分都是睡眠(sleep)状态的,这样的工作方式不够高效,而且连接占据内存,也会导致内存的浪费。
对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,那么可能会在流量增大的时候产生性能问题,此时长短连接都是无法解决问题的,所以应该进行合理的设计和优化来避免性能问题。
如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短
连接。
对于长连接的使用一定要慎重,不可滥用。如果没有每秒几百、上千的新连接请求,就不一定需要长连接,也无法从长连接中得到太多好处。在Java语言中,由于有连接池,如果控制得当,则不会对数据库有较大的冲击,但PHP的长连接可能导致数据库的连接数超过限制,或者占用过多的内存。
对此,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索就采用长连接。
1.5.3 连接池
由于一些数据库创建和销毁连接的开销很大,或者相对于所执行的具体数据操作,连接所耗的资源过多,此时就可能需要添加连接池来改进性能。
数据库连接池是一些网络代理服务或应用服务器实现的特性,如J2EE服务器,它实现了一个持久连接的“池”,允许其他程序、客户端来连接,这个连接池将被所有连接的客户端共享使用,连接池可以加速连接,也可以减少数据库连接,降低数据库服务器的负载。
1.5.4 持久连接和连接池的区别
长连接是一些驱动、驱动框架、ORM工具的特性,由驱动来保持连接句柄的打开,以便后续的数据库操作可以重用连接,从而减少数据库的连接开销。而连接池是应用服务器的组件,它可以通过参数来配置连接数、连接检测、连接的生命周期等。
如果连接池或长连接使用的连接数很多,有可能会超过数据库实例的限制,那么就需要留意连接相关的设置了,比如连接池的最小、最大连接数设置,以及php-fpm的进程个数等,否则程序将不能申请新的连接。

时间: 2024-08-03 15:16:15

《MySQL DBA修炼之道》——1.5 长连接、短连接、连接池的相关文章

《MySQL DBA修炼之道》——导读

前言 为什么要写本书 本书主要讲述MySQL DBA的必备技能,包括MySQL的安装部署.开发.测试.监控和运维,此外,读者还可从中学习到系统架构的一些知识. 我从业10多年,先是在传统行业做开发工程师.系统管理员.Oracle DBA,2008年因为机缘巧合投身互联网,开始从事MySQL运维工作.相对于成熟的商业数据库,MySQL缺乏高质量的技术文档和图书,我在接触MySQL的过程中,也感觉市面上的相关图书还存在一些不足,难以系统化地学习MySQL. 从一名Oracle DBA转型为一名MyS

《MySQL DBA修炼之道》——3.3 SQL基础

3.3 SQL基础 SQL是一种高级查询语言,它是声明式的,也就是说,只需要描述希望怎么获取数据,而不用考虑具体的算法实现.3.3.1 变量 MySQL里的变量可分为用户变量和系统变量.1.用户变量 用户变量与连接有关.也就是说,一个客户端定义的变量不能被其他客户端看到或使用.当客户端退出时,该客户端连接的所有变量将自动释放.这点不同于在函数或存储过程中通过DECLARE语句声明的局部变量,局部变量的生存周期在它被声明的"BEGIN-END"块内.对于用户变量的值,可以先保存在用户变量

《MySQL DBA修炼之道》——1.2MySQL 的基础架构和版本

第1章 理解MySQL 1.2MySQL 的基础架构和版本 1.2.1 软件架构中数据库的定位 数据库一般位于整个软件架构的后端,而不直接服务于用户,数据的展示.应用逻辑的处理都是由其他层次的程序来实现的.比较流行的一种软件架构的分类是"双层"."三层"."多层"架构.客户端直接和数据库服务器通信,比如通过ODBC.JDBC连接数据库,一般称为"双层架构"或"client-server"架构.若客户端和数据

《MySQL DBA修炼之道》——3.5 索引

3.5 索引 3.5.1 索引介绍 数据库索引,是数据库管理系统中一个排序的数据结构,用于协助快速查询.更新数据库表中的数据.它类似于书本上的索引,通过索引可以更便捷地找到书里面的内容而不需要查阅整本书.对于海量数据的检索,索引往往是最有效的. 目前MySQL主要支持的几种索引有:B树索引(B-tree).散列索引(hash).空间索引(R-tree)和全文索引(full-text).如果没有特别指明,本书指的就是B-Tree索引.由于索引是在存储引擎层实现的,所以不同的存储引擎的索引实现会有一

《MySQL DBA修炼之道》——3.4 PHP开发

3.4 PHP开发 3.4.1 概述 一般的流行语言,如PHP.C.Perl.Java都对MySQL提供了完善支持,这其中PHP是最常用的使用MySQL数据库的语言,互联网普遍使用的是LAMP/LNMP架构,这里的P可以理解为就是PHP,可以说PHP的应用范围相当广泛,尤其是在Web程序的开发上,比如,我们熟知的Facebook,就是PHP.MySQL的重度使用者.作为互联网开发者,我们有必要熟悉MySQL在各种语言环境下的使用,尤其是PHP. 以下简要介绍PHP与MySQL开发,PHP(全称为

《MySQL DBA修炼之道》——第3章 开发基础 3.1相关基础概念

第二部分 开发篇 本篇首先讲述数据库开发的一些基础知识,如关系数据模型.常用的SQL语法.范式.索引.事务等,然后介绍编程开发将会涉及的数据库的一些技巧,最后结合生产实际,提供一份开发规范供大家参考. 第3章开发基础 本章将为读者介绍 MySQL 数据库相关的开发基础,首先,介绍一些基础概念,然后讲解关系数据模型和 SQL 基础.由于在互联网开发者中,PHP 开发者占据了相当大的比重,因此这里也将简要介绍下 PHP 开发者应该掌握的一些基础知识和开发注意事项.最后,要接触的是 MySQL 数据库

《MySQL DBA修炼之道》——3.7 字符集和国际化支持

3.7 字符集和国际化支持 3.7.1 什么是字符集 字符集(character set)是一套符号和编码.校对规则(collation)是在字符集内用于比较字符的一套规则,即字符集的排序规则. 假设我们有一个字母表使用了4个字母:'A'.'B'.'a'.'b'.现在为每个字母赋予一个数值:'A'=0,'B'= 1,'a'= 2,'b'= 3,字母'A'是一个符号,数字0是'A'的编码,那么这4个字母和它们的编码组合在一起就是一个字符集.我们可以认为字符集是字符的二进制的编码方式,即二进制编码到

《MySQL DBA修炼之道》——2.5 常用命令

2.5 常用命令 本节先介绍几个常用命令,如mysql.mysqladmin.mysqldump的简单用法.后续章节还会再详述这些命令的使用.2.5.1 使用mysql命令 首先,需要留意区分MySQL的大小写.标准的说法是,MySQL指MySQL服务器,mysql指客户端. 从Unix/Linux系统下发展出来的MySQL有着优良的设计,客户工具的所有选项都可以保存到一个"-/.my.cnf"的用户级配置文件里的[client]部分中,而且它把适用于MySQL的选项集中在了[MySQ

《MySQL DBA修炼之道》——第1章 理解MySQL 1.1MySQL 介绍

第1章 理解MySQL 本章将介绍MySQL的一些常识,以及目前MySQL的发展现状.然后简要说明MySQL的基础架构.存储引擎.运行机制,以及工作中应该如何使用MySQL,为后面章节的学习做个铺垫. 1.1 MySQL介绍 1.1.1 应用领域和适用场景 MySQL是目前世界上最流行的开源关系数据库.在国内,MySQL大量应用于互联网行业,比如,大家所熟知的百度.腾讯.阿里.京东.网易.新浪等都在使用MySQL.搜索.社交.电商.游戏后端的核心存储往往都是MySQL,有的具有上千台甚至几千台M