【问题标题】:ADO.NET Connection Pooling & SQLServerADO.NET 连接池和 SQLServer
【发布时间】:2008-08-12 20:48:30
【问题描述】:
  • 这是什么?
  • 如何使用 MS SQL 实现连接池?
    • 一个接一个地执行多个查询(即使用具有 30K+ 次迭代的循环调用存储过程)?
    • 执行一些需要很长时间(10 分钟以上)的查询?
  • 有什么最佳做法吗?

【问题讨论】:

    标签: sql-server performance ado.net


    【解决方案1】:

    连接池是一种重用连接的机制,因为建立新连接很慢。

    如果您使用 MSSQL 连接字符串和 System.Data.SqlClient,那么您已经在使用它 - 在 .Net 中,这些东西大部分时间都在后台。

    30k 次迭代的循环可能更适合作为服务器端游标(查找 T-SQL 游标语句),具体取决于您对存储过程之外的每个步骤执行的操作。

    长查询很好 - 但要小心从网页调用它们,因为 Asp.Net 并没有真正针对长时间等待进行优化,并且某些连接会中断。

    【讨论】:

      【解决方案2】:

      有关连接池的更多信息...您已经在 SqlClient 中使用它,但前提是您的连接字符串对于您打开的每个新连接都相同。我的理解是,框架会在可能的情况下自动连接连接,但是如果连接字符串从一个连接到下一个连接略有不同,那么新连接将不会来自池 - 它是重新创建的(所以它更昂贵)。

      您可以将性能监视器应用与 XP/Vista 一起使用来监视 SQL 连接,并且您会很快看到是否正在使用池。查看性能监视器中的“.NET CLR 数据”类别。

      【讨论】:

        【解决方案3】:

        我第二个基思;如果您调用存储过程 30,000 次,那么您遇到的问题要比连接池大得多。

        【讨论】:

          【解决方案4】:

          this thread 也部分回答了您的问题。搜索会发现这一点.. 连接池的定义,其中 Google 会回答第一个命中是 this..

          这将只留下最佳实践,我认为这是一个很好的问题:)

          +1 到Keith's Answer。他一针见血。

          常见问题解答中的礼貌提醒:

          您之前搜索过互联网 问你的问题,你来 我们拥有研究和信息 关于你的问题……对吧?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-14
            • 2017-06-14
            • 2015-02-26
            • 1970-01-01
            相关资源
            最近更新 更多