SQL Server,特殊情况下的连接池与静态连接

时间:2013-01-16 17:35:06

标签: asp.net sql-server database multithreading connection-pooling

我有点知道答案,但无法真正掌握基本概念。我知道你总是被指示现在使用连接池。但想象一下这种情况。

我需要多次从一个数据库和一个表中读取数据。

连接池将注入微秒的开销,但为什么不通过对所有内容使用单个连接并锁定它来消除它?

因为它是一个数据库,只有一个表。难道我们不太可能从多线程连接池中获得任何性能提升吗?

希望这里有一些清晰度。也许一些简单的资源可以解释为什么,连接池总是更好。

感谢。我知道这不是最大的问题,我很感激你的时间。我特意在.net环境中,但这是编程正确的基本概念吗?

1 个答案:

答案 0 :(得分:2)

  1. 通过一个全局连接,您需要准备好处理虚假连接失败。那些总是发生(网络打嗝......)。
  2. 对单个表使用多个并发语句时,绝对获得并发。 SQL Server通常不会独占锁定表(非常罕见)。
  3. 您将忘记在某处使用同步协议(锁定无处不在)。你最终会弄错,不得不参加比赛。
  4. 如果您的缓慢失控查询会阻止整个应用。它将显示为“挂起”给浏览器。
  5. 您序列化全局锁定上的所有HTTP请求。您只使用一个CPU。你根本不会扩展。你的应用程序无法正常处理。
  6. 拥有单一的全球连接确实是一个坏主意。为什么不直接使用汇集?这为您节省了使用同步的开发工作。它的工作量更少。

    当然,合并不是始终更好。你可以构建病态病例。我从未遇到过需要保持连接打开的时间比当前HTTP请求更长的情况。