生活场景A,如果仅仅是你给朋友打电话,没有中间转接的过程
生活场景B,如果是你咨询10086会遇到一个转接的过程
而在程序中,频繁的与数据库建立关系,一般的开发中,open数据库,close数据库,这是生活场景A
而数据库连接池就是生活场景B中转接的这部分
物理连接:创建连接对象,使用该对象连接数据库
逻辑连接:使用已经创建好的对象,使用该对象连接数据库
直白点:一个是new对象实例,一个是把已经new过的对象保存在内存中,复用
在connectionstring后面加上pooling = ture; max pool size = 10; min pool size = 5
SqlConnection conn = new SqlConnection(connectionString);
//如果池中有空余的逻辑连接,使用空余的逻辑连接,否则是在创建新的物理连接
conn.Open();
//如果使用的是逻辑连接,将逻辑连接返回到池中,否则GC销毁
cmd.Clone();
1. 针对C/S开发,每个客户端代码都会去创建吗?
每个客户端使用的connectionstring是相同的,所以在数据库中如果有,不会重新创建
2. 最大/小连接数设置?
使用到connectionstring,就会创建最小连接数的连接对象
不够用时,会创建最大连接数的连接对象
最大连接数对象不够用时,自动创建新的物理连接
3. 5~10个够用吗?
需要明白一件事,那就是在什么情况下才会不够?
并发,在并发情况下,也就是说毫秒级时间相同时接入11个连接,第11个连接这时就需要创建新的物理连接对象。因为在数据库中操作速度很快,一般来说,当第11个连接时,前面已经有返回的连接对象了,所以对于一般程序,5~10个已经足够了!
4. 什么情况下使用数据库连接池?
用户请求量大,连接数据库频繁时
use table
go
exec sp_who
使用sa登录RedcellTeam的连接数有5个