Mysql数据库连接池知识分享

 

使用优点:

连接池最大的优点是性能。创建一个新的数据库连接是一个耗时耗资源的一个过程。而使用了连接池之后,连接请求可以直接通过连接池来提供而不需要重新连接、认证。这样就节省了时间。

使用缺点:

连接池中可能会存在着多个没有被使用一直连接着的数据库,这意味着资源的浪费。

基本原理:

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户调用数据库操作类MySqlConnectionOpen()方法时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,等待下一次调用。而连接的建立、断开是由连接池自身来管理的。同时,还可以设置连接池的一些参数来控制连接池中的初始连接数、连接的上限、下限以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

主要属性说明:

1、连接池启用(pooling=true|false)

表示是否启用连接池,当pooling=true时启用连接池,等于false的时候不启用连接池,默认状态是启用连接池的。

如果启用连接池,当数据库操作类调用Close()方法的时候并不是真正的关闭连接,而是将连接放回连接池中等待下次使用;如果不启用连接池,则当调用Close()方法的时候被调用的数据库连接将被销毁,当再次需要用到连接对象的时候需要重新建立新的连接。

2、超时时间(ConnectionTimeout)

是指连接对象在连接池中拿到连接的最大时间,如果超过该时间,程序将会抛出一个系统异常。ConnectionTimeout=0表示永远不超时。

3、最小连接数(MinimumPoolSize)

是连接池最少保持的数据库连接,如果应用程序对数据库连接的使用量不大,将会有一些的数据库连接资源被浪费。

4、最大连接数(MaximumPoolSize)

是连接池能申请的最大连接数,系统默认的连接数是100,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

 

测试过程:

软件:VS2012Navicat PremiumWampServer

1、测试pooling,最小连接数,最大连接数以及超时

A.启用连接池:将最小连接数设为2,最大连接数设为4,超时时间为5

spacer.gif

(图1-1

B.运行连接池测试程序,建立一个连接。如图:

spacer.gif

(图1-2

运行NavicatPremium,建立连接后(过程略),执行showprocesslist命令。发现实际上已经建立了2个连接。结果如下图:(dbexample的为我们的测试库)

spacer.gif

(图1-3

由此可见,当设置了最小连接数,即使程序中只建立一个连接,数据库端也会自动建立2个连接。

C.点击第一个连接的“断开连接”按钮。连接状态将会显示为“未连接”;再次执行show processlist命令会发现连接池中依然存在两个连接(图形略)。

说明调用Close方法的时候实际上没有关闭连接,只是将连接放回连接池中。

D.试图建立5个连接,如图:

spacer.gif

(图1-4

spacer.gif

(图1-5

点击第5个连接5秒钟后显示第5个连接失败。由此可见当前连接池只能容纳4个连接,且超时后程序会报出异常。

 

2、不启用pooling

A.在数据库连接字符串中将pooling改为false

B.运行测试程序,建立一个连接,如图(图1-1),执行showprocesslist命令,结果如图:

spacer.gif

(图2-1

C.点击第一个连接的“断开连接”按钮,再次执行show processlist,结果如下图:

 

spacer.gif

(图2-2

可见连接是真正的关闭了,并没有保存在连接池中。