zoukankan      html  css  js  c++  java
  • ADO.NET数据库连接池研究(一) 查看连接池数 (转)

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

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

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

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

           代码如下:

    ADO.NET数据库连接池研究(一) -查看连接池数 - 萤火虫 - William Shared blogCode
    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查看,得到结果如下:

          

    54 0 sleeping                       sa CLONESERVER2                                                                                                                    

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

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

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

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

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

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


    来自:http://hi.baidu.com/westfruit/blog/item/1bbebb097567bcc53bc76382.html
  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    An existing connection was forcibly closed by the remote host
    各种浏览器的兼容css
    vs输出窗口,显示build的时间
    sass
    网站设置404错误页
    List of content management systems
    css footer not displaying at the bottom of the page
    强制刷新css
    sp_executesql invalid object name
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/2514484.html
Copyright © 2011-2022 走看看