ADO.NET 连接池和 SQLServer
-
08-06-2019 - |
题
- 它是什么?
- 如何使用 MS SQL 实现连接池?
- 性能影响是什么
- 一个接一个地执行许多查询(即使用超过 30K 次迭代的循环调用存储过程)?
- 执行一些需要很长时间(10 分钟以上)的查询?
- 有没有最佳实践?
解决方案
连接池是一种重用连接的机制,因为建立新连接的速度很慢。
如果您使用 MSSQL 连接字符串和 System.Data.SqlClient 那么您已经在使用它了 - 在 .Net 中,这个东西大多数时候都在幕后。
30k 次迭代的循环可能更适合作为服务器端游标(查找 T-SQL 游标语句),具体取决于您在存储过程之外的每个步骤中执行的操作。
长查询没问题 - 但从网页调用它们要小心,因为 Asp.Net 并未真正针对长时间等待进行优化,并且某些连接会被切断。
其他提示
关于连接池的更多信息......您已经将其与 SqlClient 一起使用,但前提是您打开的每个新连接的连接字符串都相同。我的理解是,框架会在可能的情况下自动池化连接,但如果连接字符串从一个连接到下一个连接甚至略有不同,那么新连接将不会来自池 - 它会重新创建(因此它更昂贵) )。
您可以在 XP/Vista 中使用性能监视器应用程序来监视 SQL 连接,并且您将很快看到是否正在使用池。查看性能监视器中的“.NET CLR 数据”类别。
我其次是基思;如果您调用存储过程 30,000 次,那么您遇到的问题比连接池大得多。
不隶属于 StackOverflow