我有点知道这个问题的答案,但无法真正掌握基本概念。我知道你总是被指示现在使用连接池。但想象一下这种情况。
我需要多次从一个数据库和一张表中读取数据。
连接池将注入(inject)微秒级的开销,但为什么不通过对所有内容使用单个连接并对其进行锁定来消除它呢?
既然是一库一表。我们不太可能从多线程连接池中获得任何性能提升吗?
只是希望在这里能清楚一些。也许一些简单的资源可以解释为什么,连接池总是更好。
谢谢。我知道这不是最重要的问题,感谢您抽出宝贵时间。我专门在 .net 环境中,但这是跨编程的基本概念,对吗?
最佳答案
- 对于一个全局连接,您需要准备好处理虚假的连接故障。这些总是会发生(网络问题,...)。
- 当对单个表使用多个并发语句时,您绝对确实获得并发。 SQL Server 通常不会独占锁定表(极为罕见)。
- 你会忘记在某处使用同步协议(protocol)(到处都是锁)。你最终会弄错,不得不参加比赛。
- 如果您有一个会阻塞整个应用程序的缓慢失控查询。它将在浏览器中显示为“挂起”。
- 您在全局锁上序列化所有 HTTP 请求。您只使用一个 CPU。你根本不会缩放。您的应用无法很好地处理突发情况。
拥有一个单一的全局连接确实是个坏主意。为什么不直接使用池化呢?这为您节省了使用同步的开发工作。工作量更少。
当然,合并并不总是更好。您可以在不存在的情况下构建病态案例。不过,我从未遇到过需要保持连接打开的时间超过当前 HTTP 请求的情况。
关于asp.net - SQL Server,连接池与特殊情况下的静态连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364304/