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
  • 相关阅读:
    通过secureCRT连接虚拟机VMware workstation问题记录
    redis 数据类型
    windows下redis安装及配置
    js获取response头信息
    flask token认证
    IDEA 双击只选择了一个变量的某部分单词
    IDEA 对spring boot Maven 项目打 Jar 包
    ElasticSearch 7.3.0 查询、修改、删除 文档操作
    ElasticSearch Kibana 创建索引,删除索引,查看索引配置
    elasticsearch-analysis-ik windows 环境 IK 中文分词器 的 下载 和 安装
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/2514484.html
Copyright © 2011-2022 走看看