数据库连接池如何影响性能?

时间:2009-10-29 17:23:59

标签: c# .net asp.net sql-server-2005 ado.net

我正在使用.Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C#+ ADO.Net来开发ASP.Net Web应用程序。 ASP.Net Web应用程序以数据库为中心/驱动。我想知道在ADO.Net连接字符串设置中打开/关闭线程池设置时是否有任何关于性能差异的性能参考数据?性能我指的是可以支持的并发连接和从ADO.Net客户端执行的特定SQL命令的执行时间?

感谢avdance, 乔治

4 个答案:

答案 0 :(得分:4)

从应用程序到应用程序,性能差异会有很大差异,因此没有关于您应该期望获得什么样的收益的硬数据。

您可以通过对应用进行压力测试来对其进行衡量的最佳操作,并配置/不使用池,并了解它的展示方式。

WCAT是一种可用于加载ASP.NET应用程序的压力工具。

您还可以尝试使用分析器(其中有很多分析器)来监控您的应用程序,以了解它在压力下的表现。

部分个人资料:ANTSdotTrace

答案 1 :(得分:4)

我手边没有任何性能统计数据,但在使用连接池时可能会发出警告:最终可能会出现太多小池,而不是一个大池。

ADO.NET将为

创建一个新的连接池
  • 每个连接字符串;它也非常挑剔 - 如果你有两个连接字符串,即使只是一个空格或其他东西也不同,那些被认为是两个独立的连接字符串,并将导致单独的连接池创建

  • 如果使用“集成安全性”(可信连接)设置,则为每个Windows凭据

所以如果你有一个类似

的连接字符串
server=MyDBServer;database=MyDatabase;integrated security=SSPI;

每个可区分用户的一个连接池将被创建 - 这是相当反直觉的,但这就是它的方式(并且它不能被影响/关闭)。

有关详细信息,请查看ADO.NET连接池上的MSDN docs

  

首次打开连接时,a   连接池是基于a创建的   精确匹配算法   将游泳池与游泳池相关联   连接中的连接字符串。   每个连接池都是关联的   具有不同的连接字符串。   打开新连接时,如果   连接字符串不是精确的   匹配现有池,新池   被建造。连接汇集在一起   每个应用程序域的进程   连接字符串和集成时   每个Windows使用安全性   身份。连接字符串也必须   完全匹配;提供关键字   以不同的顺序   连接将分开汇总。

此外,如果您有这两个连接字符串:

server=MyDBServer;database=MyDatabase;user id=tom;pwd=top$secret

server=MyDBServer;database=MyDatabase;user id=tom; pwd=top$secret;

这些被认为是不同的连接字符串,因此将创建两个单独的连接池。

在尝试测量连接池的效果时,需要注意这一点!

马克

答案 2 :(得分:2)

编写一个小的progeam来访问数据库。打开数据库连接而不关闭它并循环100次。

  1. 监控每次获取数据所需的时间。
  2. 使用'netstat -a'
  3. 监控服务器端连接
  4. 有/无合并

答案 3 :(得分:2)

你说'线程池',但显然是在谈论你的标题显示的连接池。

创建新数据库连接存在性能开销。这是一个资源密集型操作,这就是我们拥有ADO.NET连接池的原因。有效连接不会关闭,而只是返回到它们保持活动状态的池中,并且可以由相同代码库的其他部分(在AppDomain内)重用。

创建了一个ADO.NET应用程序池PER唯一连接字符串,因此值得注意的是,当您使用集成安全性时,您将失去连接池的好处,因为每个DB身份验证用户将有效地拥有一个连接池。 / p>