问题标签 [connection-pooling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - .NET SqlConnection 类,连接池和重新连接逻辑
我们有一些客户端代码使用 .NET 中的 SqlConnection 类与 SQLServer 数据库通信。它间歇性地失败并出现此错误:
“ExecuteReader 需要一个打开且可用的连接。连接的当前状态为已关闭”
“临时”解决方案是重新启动进程,之后一切正常 - 但是,这显然不能令人满意。
该代码保留了 SqlConnection 实例的缓存,每个数据库一个。
我们想重写代码,但在我这样做之前,我需要知道一些事情:
我的第一个问题是:反复连接和断开SqlConnection对象是效率低下,还是底层库代表我们执行连接池?
因为我们的代码没有执行上述操作,所以问题的可能原因似乎是在连接的“生命周期”期间底层 SQLServer 数据库发生了一些事情,导致连接关闭......
如果事实证明“缓存”SqlConnection 对象是值得的,那么推荐的方法是处理所有可以通过“重新连接”到数据库来解决的错误。我说的是这样的场景:
- 数据库已脱机并重新联机,但发生这种情况时客户端进程没有打开的事务
- 数据库“断开连接”,然后“重新连接”
我注意到 SqlConnection 上有一个“状态”属性......有没有合适的方法来查询它?
最后,我设置了一个具有完全访问权限的测试 SQLServer 实例:我怎样才能重现确切的错误“ExecuteReader 需要一个打开且可用的连接。连接的当前状态是关闭”
memory-management - commons dbcp(和其他连接池)如何管理打开的语句和结果集?
具体来说,当我将连接返回到池时,dbcp(和其他连接池)是否会为我关闭语句和结果集?
还是我应该自己关闭这些?
jdbc - 连接中断后如何自动重新连接Oracle连接池?
我正在通过 OracleConnectionCacheImpl 遇到 Oracle 连接池的问题。当我通过瘦驱动程序连接到我的数据库服务器(Oracle 10g)上的连接池时,一切正常,直到在未指定的时间之后,数据库连接被丢弃(可能是由于空闲连接?)并且我收到一条错误消息:
封闭连接。
刷新页面并重新尝试连接会重新连接数据库,因此似乎不是网络或数据库的问题。如果池中的连接因任何原因死亡,Oracle 连接池是否可以验证其连接并重新连接?
我正在使用 Apache Tomcat 6.0.18、Java EE6 更新 11。
(Oracle 瘦驱动程序中似乎有一个 ping 功能。这有帮助吗?我在哪里可以找到它?)
java - 如何缩小数据库连接池?
我在我的 tomcat 容器中使用带有 JNDI 的 Apache DBCP 来汇集到 mysql 数据库的连接。一切正常,但我看到的一个问题是,一旦 pconnection 被汇集,它就永远不会被释放。因此,在负载尖峰连接之后,它们将永远处于休眠状态。他们是通过 context.xml 参数缩小池的方法吗?这是我的配置:
sql-server - sql server 连接必须空闲多长时间才能被连接池关闭?
我有一个客户端-服务器应用程序,它使用 .NET SqlClient 数据提供程序连接到 sql server - 非常标准的东西。默认情况下,连接池管理器关闭数据库连接并将其从池中删除之前连接必须空闲多长时间?如果有什么设置可以控制这个?
连接池程序在连接池长时间空闲后,或者如果池程序检测到与服务器的连接已被切断,则从池中删除连接。
haskell - Haskell 中的并发数据库连接池
我是一名学习 Haskell 的 Java 程序员。
我在一个使用 Happstack 并通过 HDBC 与数据库对话的小型网络应用程序上工作。
我已经编写了select和exec函数,我像这样使用它们:
如您所见,非常简单。有查询、参数和结果。
连接创建和提交/回滚内容隐藏在 select 和 exec 中。
这很好,我不想在我的“逻辑”代码中关心它。
坏点:
- 每次调用都会创建一个新连接——这会降低负载时的性能
- DB url“users.db”是硬编码的 - 我不能在其他项目中重用这些功能而无需编辑
问题 1:如何引入一个具有一些已定义(最小、最大)并发连接数的连接池,以便在 select/exec 调用之间重用连接?
问题 2:如何使“users.db”字符串可配置?(如何将其移至客户端代码?)
它应该是一个透明的特性:用户代码不应该需要明确的连接处理/释放。
jboss - jboss连接池
我有一个与 Prepared Steement pooling(跨所有连接)有关的问题。这是配置文件
似乎这一行:
不会对准备好的语句造成任何问题,但是:
如果过去 20 分钟内没有流量,则会导致所有连接都被删除并重新创建。因此,现有的 Prepared Statements 将从缓存的 Prepared Statements 池中删除。如何克服这个问题?我必须使用 idle-timeout-minutes 因为 MySQL 服务器在 8 小时后关闭连接
c# - 如何在使用连接池时强制 SqlConnection 物理关闭?
我知道如果我实例化一个 SqlConnection 对象,我实际上是从连接池中获取一个连接。当我调用 Open() 时,它将打开连接。如果我对该 SqlConnection 对象调用 Close() 或 Dispose() 方法,它会返回到连接池。
但是,这并不能真正告诉我它是否真的关闭了,或者我是否仍然有与数据库的活动连接。
如何强制 SqlConnection 在网络级别关闭,或者至少告诉它何时关闭?
例子:
- 首次运行:300 毫秒
- 第二次运行:100 毫秒
- 第三次运行:100 毫秒
- 等待很长时间(30分钟)后:300 ms
如果连接真正关闭,第二次和第三次运行也应该是 300 毫秒。但我知道连接并没有真正关闭那些运行(我检查了 SQL Server 的活动监视器)。执行身份验证/等不需要额外的 200 毫秒。
如何强制连接真正关闭?
想法
- CommandBehavior.CloseConnection 有效吗?(显然不是?)
- 在连接字符串中设置“Max Pool Size = 0”是否有效?(这将是一个昂贵的解决方案)
- Dispose() 有效吗?
参考
- 关于连接池的文章
- 这是另一个告诉我们Close() 并没有真正关闭连接。
- 一篇关于连接池的优缺点的文章
java - 连接池 - 它有多少开销?
我在 Webpshere Application Server 6.1 中运行一个 webapp。这个 webapp 有一个规则类型的引擎,每个规则都从 websphere 数据源池中获取自己的连接。因此,我看到当一个用例运行时,对于 100 条输入记录,从池中获取大约 400-800 个连接并释放回池中。我有一种感觉,如果这个引擎投入生产,完成处理可能需要太多时间。
频繁地从池中获取连接是一种不好的做法吗?从池中获取连接所涉及的间接成本是多少?我的猜测是,所涉及的成本应该是最小的,因为池只不过是一个资源缓存。如果我错了,请纠正我。
asp.net - IIS 应用程序池和 .NET 垃圾收集
考虑一个存在连接池内存泄漏问题的 ASP.NET 应用程序(例如,连接未正确关闭)。
回收应用程序池是否会清除连接池(从而允许建立更多连接)?
如果连接保留在内存中,直到垃圾收集器将它们删除,当应用程序池重新启动时是否会发生这种情况(或者它们是否/可以超出此范围)?我也知道垃圾收集器也可以随时清理它们,但是它们是否仍在使用中并且在重置或应用程序池重新启动之前无法收集?
我正在审查一个系统,其最终目标显然是更正代码以正确管理连接,并且我试图更多地了解垃圾收集/应用程序池过程。