【问题标题】:Is there a benefit to having several connection pools over one single connection pool? [closed]在一个连接池上拥有多个连接池是否有好处? [关闭]
【发布时间】:2014-01-22 12:55:44
【问题描述】:

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

计划是以服务为导向,将应用程序分解为更小的子应用程序。这些应用程序中的每一个都将托管在 IIS 中,我试图确定每个应用程序是否有应用程序池的好处,每个应用程序具有与该应用程序相关的不同身份,即 [Domain]\SVC_ApplicationA 而不是拥有所有应用程序池使用相同的标识,因此使用单个连接池。

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

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

谢谢!

【问题讨论】:

  • "...所有应用程序池使用相同的标识,因此使用单个连接池" - AFAIK 连接池不在 AppDomain 之间共享,因此您将与独立于应用程序的应用程序一样多的连接池身份。

标签: c# sql sql-server database iis


【解决方案1】:

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

此外,连接是在进程级别池化的。如果您有多个 Web 应用程序,每个应用程序都有自己的 AppPool(以及进程),那么每个进程都会有自己的连接池。我不相信连接会占用太多内存(当然不是 MB!)而且我从未见过由于连接池而导致的问题 - 保存在一个非常慢的数据库和 Oracle 连接池达到最大数量的情况下连接并在拒绝打开新连接时抛出错误:这是数据库运行缓慢的症状,而不是池的任何问题。

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

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多