asp.net - SQL Server,连接池与特殊情况下的静态连接

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

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

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

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

既然是一库一表。我们不太可能从多线程连接池中获得任何性能提升吗?

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

谢谢。我知道这不是最重要的问题,感谢您抽出宝贵时间。我专门在 .net 环境中,但这是跨编程的基本概念,对吗?

最佳答案

  1. 对于一个全局连接,您需要准备好处理虚假的连接故障。这些总是会发生(网络问题,...)。
  2. 当对单个表使用多个并发语句时,您绝对确实获得并发。 SQL Server 通常不会独占锁定表(极为罕见)。
  3. 你会忘记在某处使用同步协议(protocol)(到处都是锁)。你最终会弄错,不得不参加比赛。
  4. 如果您有一个会阻塞整个应用程序的缓慢失控查询。它将在浏览器中显示为“挂起”。
  5. 您在全局锁上序列化所有 HTTP 请求。您只使用一个 CPU。你根本不会缩放。您的应用无法很好地处理突发情况。

拥有一个单一的全局连接确实是个坏主意。为什么不直接使用池化呢?这为您节省了使用同步的开发工作。工作量更少。

当然,合并并不总是更好。您可以在不存在的情况下构建病态案例。不过,我从未遇到过需要保持连接打开的时间超过当前 HTTP 请求的情况。

关于asp.net - SQL Server,连接池与特殊情况下的静态连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364304/

相关文章:

asp.net - 如何使用 ASP.Net Ajax $addHandler 将参数传递给被调用函数

html - 在页面中使用多个 <form> 标签时发布的表单数据不正确

sql-server - tsql 用户定义函数

c# - 在 Javascript 中获取属性背后的代码?

c# - 如何将列表与硬编码根一起返回到 JSON

sql-server - 为什么 SQL Server 会选择聚集索引扫描而不是非聚集索引扫描?

SQL 主键 - 复杂主键还是带有串联的字符串?

当对象调用从静态调用切换时,php-mysqli insert_id 返回 0 而不是最后一个 id

mysql - Filemaker Pro 并在 html 中生成统计数据

java - 使用 jdbc 的 SQL 语法错误