当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信。客户端必须使用数据库连接来发送命令和接收应答、数据。通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了。可以查阅程序语言手册来获知通过何种方式使用短连接、长连接。

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,这样就增加了端口资源。

2. 长连接

长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。

以PHP程序为例,当收到一个永久连接的请求时,PHP将检查是否已经存在一个(前面已经开启了的)相同的永久连接。如果存在,则将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。

从客户端的角度来说,使用长连接有一个好处,可以不用每次创建新连接,若客户端对MySQL服务器的连接请求很频繁,永久连接将更加高效。对于高并发业务,如果可能会碰到连接的冲击,推荐使用长连接或连接池。

从服务器的角度来看,情况则略有不同,它可以节省创建连接的开销,但维持连接也是需要内存的。如果滥用长连接的话,可能会使用过多的MySQL服务器连接。现代的操作系统可以拥有几千个MySQL连接,但很有可能绝大部分都是睡眠(sleep)状态的,这样的工作方式不够高效,而且连接占据内存,也会导致内存的浪费。

对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,那么可能会在流量增大的时候产生性能问题,此时长短连接都是无法解决问题的,所以应该进行合理的设计和优化来避免性能问题。

如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短连接。对于长连接的使用一定要慎重,不可滥用。如果没有每秒几百、上千的新连接请求,就不一定需要长连接,也无法从长连接中得到太多好处。在Java语言中,由于有连接池,如果控制得当,则不会对数据库有较大的冲击,但PHP的长连接可能导致数据库的连接数超过限制,或者占用过多的内存。

对此,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索就采用长连接。

3. 连接池

由于一些数据库创建和销毁连接的开销很大,或者相对于所执行的具体数据操作,连接所耗的资源过多,此时就可能需要添加连接池来改进性能。

数据库连接池是一些网络代理服务或应用服务器实现的特性,如J2EE服务器,它实现了一个持久连接的“池”,允许其他程序、客户端来连接,这个连接池将被所有连接的客户端共享使用,连接池可以加速连接,也可以减少数据库连接,降低数据库服务器的负载。

4. 持久连接和连接池的区别

长连接是一些驱动、驱动框架、ORM工具的特性,由驱动来保持连接句柄的打开,以便后续的数据库操作可以重用连接,从而减少数据库的连接开销。而连接池是应用服务器的组件,它可以通过参数来配置连接数、连接检测、连接的生命周期等。

如果连接池或长连接使用的连接数很多,有可能会超过数据库实例的限制,那么就需要留意连接相关的设置了,比如连接池的最小、最大连接数设置,以及php-fpm的进程个数等,否则程序将不能申请新的连接。


http://www.taodudu.cc/news/show-891330.html

相关文章:

  • 操作系统:166个Linux实用命令,太全了!
  • Java技术:实现pdf和Excel的生成及数据动态插入、导出
  • 硬件:电脑基础进阶必学知识,详解电脑主板跳线!
  • 程序员幽默:39个奇葩代码注释,看完笑哭了
  • 后端技术:一个注解解决 SpringBoot 接口防刷
  • 后端:MyBatis 面试问题集锦
  • 分享一些笔记本电脑日常保养技巧
  • 前端:收集前端开发者手边必备的11款神器
  • SQLServer子查询相关知识笔记
  • 程序员漫画:别人眼中的程序员vs真实的程序员
  • 硬件:开机如何进BIOS,U盘启动快捷键一键查询!
  • Java后端:10w行级别数据的Excel导入优化记录
  • 开发工具:IDEA 调试技巧,非常实用,欢迎收藏!
  • MySQL索引使用详解
  • Linux最全命令详解,请记下来!
  • Java后端:一个注解搞定 Spring Boot 日志!
  • 后端技术:Nginx 应用场景详解
  • 硬件:台式机老式键盘知识科普
  • Java技术:Mybatis-plus常用API全套教程,值得收藏!
  • 幽默:程序员10大口头禅,你都听过吗?
  • 图解 Git 工作原理,看完你就懂了!
  • 电脑知识:磁盘分区相关知识笔记!
  • 后端技术:MyBatis 批量插入的 3 种写法
  • 后端技术:Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!
  • SQLServer基础:Apply关键字用法介绍
  • 后端技术:数据持久化框架为什么放弃 Hibernate、JPA、Mybatis,最终选择 JDBCTemplate!...
  • 电脑知识:分享几款常用的截屏方法,欢迎收藏!
  • 后端技术:SpringBoot配置热加载工具(devtools)笔记
  • 开发工具:Git超全实用技巧,值得收藏!
  • 数据库:MySQL、SqlServer、Oracle对比

MySQL性能优化知识:长连接、短连接、连接池相关推荐

  1. mysql半连接_mysql表的半连接,反连接导致的mysql性能优化剖析

    [导读] 关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书<Oracle DBA工作笔记>中讲性能优化的时候,我花... 关于Oracle的半连接,反 ...

  2. mysql左连接_面试考MySQL性能优化,一个问题就干趴下了!

    MySQL作为最流行的关系型数据库管理系统,重要性不言而喻.面试时它也是重点考察对象之一,估计大家都有过被MySQL相关问题支配的经历: 如何理解MySQL中加锁原理以及最终死锁形成的原因 ? 介绍一 ...

  3. MySQL性能优化点记录

    第一章 myisam,可以基于blob和text的前500字节,创建索引 myisam 支持fulltext 延迟更新索引 (delay_key_write) CREATE TABLE `table3 ...

  4. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  5. 性能优化专题 - MySql 性能优化 - 04 - MySql调优

    目录导航 前言 Undo-log与Redo-log 案例 当前读.快照读 Redo Log的落盘配置 MySQL配置优化 MySQL服务器参数类型 快速定位MySql配置文件 MySQL内存参数配置 ...

  6. 【原】Qone Mysql性能优化-实战篇

    Keywords:Mysql,性能优化,slow query,连接占满,Qone 前一段有客户反馈Qone系统的性能问题,并发用户不多,也就是20个左右,但是Qone服务器就down掉了,连登陆页面都 ...

  7. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...

  8. 干了三年的Java,你竟然还不会MySQL性能优化

    摘要:MySQL性能优化就算通过合理安排资源,调整系统参数使MySQL运行更快,更节省资源.MySQL性能优化包括查询速度优化,更新速度优化,MySQL服务器优化等等. 前言 MySQL性能优化就算通 ...

  9. mysql 性能优化 20 条建议

    MySQL性能优化的最佳20+条经验 2009年11月27日陈皓发表评论阅读评论100,946 人阅读     今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库 ...

最新文章

  1. Windows Phone 7 不温不火学习之《创建用户控件》
  2. SAP LSMW 导入Open PO单据,系统报错 --- GL account 670100 cannot be used ---
  3. 网站SEO优化需要注意哪些细节事项?
  4. Python 技术篇-百度语音合成SDK接口调用演示
  5. 如何写一个包含多个事件四则运算的留存SQL ——impala hive
  6. Python培训 之五 条件判断
  7. 实例1.1:通过HWND获得CWnd指针
  8. kitti数据集 Raw Data与00-10 Ground Truth的对应关系
  9. 【机器学习笔记1】一元线性回归模型及预测
  10. 团队的远程管理_管理远程团队的4种方法
  11. elementui表格文字不换行,溢出隐藏
  12. XShell连接远程centos监控控制台(tomcat)输出信息
  13. java mp3合并_java合并MP3文件
  14. 远程监控养猪监控系统
  15. 软件定义网络实验之SDN网络简单管理及开发
  16. 美国印钱 为什么不会通货膨胀
  17. 有属性的自定义注解,如何获取到post请求中RequestBody中对象的一个属性值?
  18. 一台计算机组装完成以后,要先装什么.,一台刚组装好的电脑,还需要进行哪些操作?...
  19. 实现输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
  20. Popular Cows POJ 2186(强连通分解)

热门文章

  1. Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误
  2. vs.net 2005 beta 2安装问题
  3. C# WPF:初识布局容器
  4. mysql起止时间怎么写_【Mysql 学习】日期函数函数
  5. 保留数据给硬盘增加分区
  6. #10172. 「一本通 5.4 练习 1」涂抹果酱 题解
  7. 记一次用WPScan辅助渗透WordPress站点
  8. 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
  9. Oracle12c:安装后新建用户及其默认表空间,并创建表测试
  10. HDU1429胜利大逃亡(续)HDU 1885 Key Task BFS+状态压缩+水