在一个连接池上安装多个连接池有什么好处?

时间:2014-01-22 12:55:45

标签: c# sql sql-server database iis

我们正在使用一个(大型)遗留应用程序,它在任何地方都使用单个连接字符串,因此它们可以使用单个连接池。

计划是采用面向服务的方式,将应用程序分解为更小的子应用程序。这些应用程序中的每一个都将托管在IIS中,我试图弄清楚应用程序池是否对每个具有与该应用程序绑定的不同身份的应用程序有益,即[Domain] \ SVC_ApplicationA而不是拥有所有应用程序池使用相同的标识,因此使用单个连接池。

虽然我们现在有一个(SQL Server)数据库,但是当我们转移到这个新模型时,计划是从每个应用程序的原始数据库中的新模式开始。 dbo架构将被弃用为旧版,为了访问dbo,应用程序必须通过各自架构中的对象(视图,过程等)来实现。需要注意的是,应用程序模式只允许访问其自己的模式或dbo中的对象,而不是其他应用程序模式。

如果每个应用程序都有自己的标识,我们可以独立保护每个模式。我担心的是,如果我们有50个应用程序,我们将拥有50个连接池。这会对性能产生负面影响吗?我知道这是一个很复杂的问题,但我真的只是抽象地问。

谢谢!

1 个答案:

答案 0 :(得分:1)

查看this doc。如果您在网站中使用模拟并在数据库中使用AD安全性,则每个用户使用该网站时已经有一个池。您可以将最大池大小设置为连接字符串的一部分,但即使有超过100个用户,我也从未遇到过此问题。

此外,Connections在进程级别进行池化。如果您有多个Web应用程序,每个Web应用程序都有自己的AppPool(从而处理),那么每个进程都将拥有自己的连接池。我不相信连接需要非常多的内存(当然不是MB!)而且我从未见过因连接池而导致的问题 - 在一个案例中使用非常慢的DB和Oracle连接池达到了最大数量连接并在拒绝打开新错误时抛出错误:数据库缓慢的症状,而不是汇集错误。

将遗留数据库拆分为多个模式听起来很明智。你会有更多的管理开销,设置相关位的权限,但我不应该想太多。