数据库
首页 > 数据库> > 连接系统如何跟mysql打交道(mysql优化系列一)

连接系统如何跟mysql打交道(mysql优化系列一)

作者:互联网

1.mysql是单独的服务,java程序想要连接数据库,需要对应的 数据库驱动!

2.正常流程是,java程序通过驱动连接mysql数据库,编写的sql 通过建立的连接发送给mysql数据库去执行

 

 

 

3.但是这样的话,当有多个用户访问咱们的tomcat应用程序时,tomcat会启动多个线程来跑。这时候,多个线程就会抢这一个数据库连接来访问数据库,这样肯定是不行的,如果说,每个线程用完之后都关闭连接的话,那得多消耗连接建立和销毁的资源啊

4.这时候可以用连接池来管理多个连接,有线程来了,通过连接池给分配一个空闲的连接,线程用完之后再还给连接池!

 

 

 

常见的数据库连接池有DBCP、C3P0、Druid

一般连接池常用的配置如下

initialSize :初始化的连接个数(程序启动时初始化一些连接,类似饿汉模式)

minIdle :连接池中最小空闲连接数,当连接数少于此值时,连接池会创建连接来补充到该值的数量

maxIdle :连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态。设 0 为没有限制。

maxWait :连接池中连接用完时,新的请求等待时间,毫秒,这里取值-1,表示无限等待,直到超时为止,也可取值9000,表示9秒后超时。超过时间会出错误信息

removeAbandoned : 是否清除已经超过“removeAbandonedTimout”设置的无效连接。如果值为“true”则超过“removeAbandonedTimout”设置的无效连接将会被清除。设置此属性可以从那些没有合适关闭连接的程序中恢复数据库的连接。

removeAbandonedTimeout: 活动连接的最大空闲时间,单位为秒 超过此时间的连接会被释放到连接池中,针对未被close的活动连接

minEvictableIdleTimeMillis :连接池中连接可空闲的时间,单位为毫秒 针对连接池中的连接对象

timeBetweenEvictionRunsMillis / minEvictableIdleTimeMillis:每timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止.

5.这是咱们程序这边的连接池,其实数据库那边也是有一个连接池的!否则怎么能处理程序这边建立的多个连接呢?

 

 

 

所以,数据库那边的配置文件里也同样可以设置,连接池的一些信息,如下

# 最大连接数

max_connections=151

# 每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,

# 如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求。

# 最大缓存线程数量

thread_cache_size=10

由于mysql是被动连接端,所以可设置的就比较少!

标签:打交道,数据库,线程,空闲,mysql,连接,连接池
来源: https://blog.csdn.net/qq_38965140/article/details/114208670