连接(connection)影响MySQL性能

请问各位这个怎么解决,前几天的面试题目

现象: 连接(connection)也是影响MySQL性能的重要一方面。MySQL客户机与MySQL服务器之间的连接是MySQL客户机与MySQL服务器反复握手的结果。每次'握手'都经历身份验证、权限验证等环节,握手需要占用一定的网络资源和MySQL服务器内存资源。
针对以上现象,请提出解决方案??

阅读 4k
4 个回答

使用连接池,就是长连接,同一个线程可以反复循环利用,只有线程建立连接的时候才需要握手校验

eg : 执行100次 update sql

未使用连接池执行sql


-- 步骤    建立连接(认证、权限等)     执行sql              销毁连接
-- 耗时: |<--------- t1 -------->|<------ t2 ----->|<------- t3 ------>

-- 总耗时: tt1 = 100 *(t1 + t2 + t3) 

使用连接池执行sql


-- 预先建立 5 连接并保存起来复用
-- 耗时   5 * t1  
-- 总耗时: tt2 = (5 * t1) + 100 * t2
-- 注:连接池的连接可以复用,下次不需要在重新建立连接,创建一次即可

很显然: tt2 < tt1

so,使用连接池可以解决因为执行sql所带来的额外开销的问题!

Java中常用的数据库连接池

  1. C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection和Statement 池的DataSources对象。(主页:http://sourceforge.net/projec...
  2. BoneCP 是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。(主页:http://jolbox.com/

  3. DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和1.4。1.3 版本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK版本了,功能上倒是没有什么区别。(主页:http://commons.apache.org/dbcp/
  4. Druid is a distributed, column-oriented, real-time analytics data store that is commonly used to power exploratory dashboards in multi-tenant environments. Druid excels as a data warehousing solution for fast aggregate queries on petabyte sized data sets. Druid supports a variety of flexible filters, exact calculations, approximate algorithms, and other useful calculations. Druid can load both streaming and batch data and integrates with Samza, Kafka, Storm, Spark, and Hadoop.(http://druid.io/)

这里特别说一下 Druid 是阿里巴巴开源的连接池,"马爸爸"最近有点了,Druid 明明就是中国人开源的软件,官方网页竟然没有找到中文文档的入口,官网全英文!本来还想特地介绍一下 Druid,想了一下还是算了吧!

1.使用连接池

2.使用批量插入/查询

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题