ADO.NET数据库连接池研究(一) -查看连接池数

用sp_who查看数据库连接数

 

大家都知道ADO.NET自带链接池,而且在默认状态下是开启的,如果不设置的话,最大允许的链接个数为100个。

      那么怎么样能够看到连接池里现在活动的链接是多少了?

      讲过研究发现了,数据里的一个存储过程可以帮助我们,那就是sp_who

      为了验证这个事情,我们写了一个asp.net的程序并发布到windows2003的IIS服务器下建立了网站,同时为该网站指定独立的应用程序池。

       代码如下:

ADO.NET数据库连接池研究(一) -查看连接池数 - 萤火虫 - William Shared blog Code
SqlConnection conn = new SqlConnection("server=192.168.0.213;uid=sa;pwd=cpkf!@#$%^;database=test;");
            conn.Open();

            SqlCommand cmd = new SqlCommand("select * from Tablese", conn);

            SqlDataAdapter sda = new SqlDataAdapter(cmd);

            DataSet ds = new DataSet();
            sda.Fill(ds);

      大家看上面的代码可以知道,数据库链接没有关闭,而且在这里tablese这个表是不存在的。这样页面就会出错。

      我通过两个客户端不停的按F5执行,然后在运行exec sp_who查看,得到结果如下:

 

540sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
570sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
580sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
590sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
600sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
610sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
620sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
630sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
640sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
650sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
660sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
670sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
680sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
690sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
700sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
710sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
720sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
730sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
740sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
750sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
760sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
770sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
780sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
790sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
800sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
810sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
820sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
830sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
840sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
850sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
860sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
870sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
880sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
890sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
900sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
910sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
920sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
930sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
940sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
950sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
960sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
970sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
980sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
990sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
1000sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0
1010sleeping                      saCLONESERVER2                                                                                                                    0TestAWAITING COMMAND0

 

(注:Test代表的是数据库名称)

      我就可纳闷了,为什么状态都是sleeping,而且cmd都是AWAITING COMMAND,经过在网上查找发现:

 

sleepingSPID 目前並未執行。通常表示該 SPID 正處於等待應用程式發出指令的狀態。

 

 

AWAITING COMMAND目前沒有任要需要處理的指令。

 

      这个就说明,之所有sleeping是因为我们没有关闭数据库链接,而这个链接在连接池里将再也不会被唤醒,随着积累,到了100个以后,其他程序就获得不了连接了,就会出现空引用异常(假如你在使用Connection对象没有做为空判断)。

      然后你把该网站的应用程序池重启,这个时候你再用sp_who去查看,所有的sleeping都不见了。

      总结:上述写的是对连接池中如果连接不关闭的情况进行的研究,不关闭连接时很糟糕的事情,同时也说明了怎么查看连接池中的链接,重要的是对sleeping的理解,一定不能把当做线程一样在休眠了,这就大错特错了,一旦出现这个情况,就说明该链接存在问题,可能没有被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值