问题标签 [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.
java - C3p0 中的锁排序
我正在尝试使用 c3p0's 在我们的应用程序中记录数据库连接的创建和销毁ConnectionCustomizer
。在其中,我有一些看起来像这样的代码:
我遇到了僵局。我发现 c3p0 在其库中至少有几个使用同步方法的对象,并且似乎没有指定它们预期的锁定顺序。当我记录连接时,我会锁定C3P0Registry
并最终PoolBackedDataSource
(只需创建数据源列表即可访问导致锁定的哈希码)。
关闭连接提供程序(调用C3P0ConnectionProvider.close()
)会导致以相反的顺序调用锁。但是,当子数据源被关闭时,我的日志记录被触发了。结果是死锁。
似乎我对 c3p0 库进行的两个调用都是有效的预期调用:
C3P0ConnectionProvider.close()
C3P0Registry.getPooledDataSources()
似乎(除非在文档中明确说明)管理它自己的锁定策略应该是库的责任。(我说这不是为了责怪任何人.. 只是为了确认我对最佳实践的理解)
我应该如何处理这个问题?由于 c3p0 使用同步方法而不是更现代的机制,因此我无法真正测试锁。
从我的DataSource
关闭代码中,我可以C3P0Registry
在关闭DataSource
. 我会猜测正确的锁定顺序,我不知道我是否觉得舒服。
我不认为我可以反转日志调用的锁定顺序。我需要C3P0Registry
来获取 的列表DataSources
,所以如果DataSources
没有先锁定C3P0Registry
来获取对它们的引用,我就无法锁定 。
当然,另一种解决方案是在 c3p0 之上提供另一个更高级别的锁。在连接池的情况下,这似乎违背了这一点。
现在,我正在回滚我的日志记录。谢谢你的帮助。
asp.net - 在 asp.net 应用程序中管理与数据库的连接
我想知道,在 asp.net 中管理与数据库的连接的最佳方法是什么。
我的应用程序是使用 N 层架构构建的。DAL 由带有方法的静态类组成,例如
这里要注意的一点是,我将连接从 BLL 传递到 DAL。
这是我考虑过的几点,但对我来说似乎都不合适,所以我只是寻求建议。
我是否应该在 MasterPage 中创建连接,将其存储在一个对象中,然后在创建它们时将其传递给我的业务对象(我试图避免的事情)
我是否应该使用静态类创建连接并在其上调用 CreateConnection 之类的方法,从我的业务对象的构造函数(我想要的东西,但我不想每个对象都有一个连接,我想要它为我的对象的所有实例共享,但由于 asp.net 是多线程的,静态类对存储连接没有意义)
理想情况下,该解决方案也应该在 Windows 窗体环境中运行良好(因此在会话中没有存储连接,并在当前上下文中使用类中的静态方法检索它)
connection - jdbc连接池中可共享和不可共享连接的区别?
我们注意到托管在 sun app server 企业版 8.1 上的 struts Web 应用程序中有一些奇怪的地方。
即使用户活动相对非常少,用于监控 JDBC 资源的 NumConnUsed 保持在 100 的连接数。
我尝试做一些研究,发现以下链接 http://j2ee-performance.blogspot.com/ http://www.ibm.com/developerworks/websphere/library/techarticles/0506_johnsen/0506_johnsen.html
“当应用程序关闭一个可共享的连接时,该连接并没有真正关闭,也没有返回到空闲池中。相反,它保留在共享连接池中,准备好在同一 LTC 中为连接到同一资源的另一个请求做好准备。”
根据上面的评论,如果我的 web.xml 资源引用范围设置为可共享,当应用程序端关闭连接时,它确实保留在共享连接池中,因此 numconnused 总是这么高?
connection-pooling - 如何找出连接泄漏?
我们有一个部署在 sun 应用程序服务器上的 struts Web 应用程序,尽管在开发环境中进行了负载测试/系统集成测试。没有连接泄漏的情况。
但是在生产环境中。随着使用的连接不断增加,可以看到连接泄漏。
除了应用程序代码,还有哪些场景会导致连接泄漏?
mysql - Django 连接池和时间字段
有没有人使用 Django、SQLAlchemy 和 MySQL 进行连接池?
我使用了本教程(http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/),效果很好,但我遇到的问题是我带回了一个时间字段,它正在转换为 timedelta,因为没有使用 Django 特定的转换。
来自 django/db/backends/mysql/base.py 的转换代码
})
文章中的连接代码:
.net - Web 服务、ADO.NET 连接池、超时错误
如果我有一个只公开一个调用的 .asmx Web 服务。一种需要一些参数并将这些值作为记录插入 SQL Server 2005 表中的方法。该方法应该看起来如何与 ADO.NET 连接池尽可能“友好”?如果它可能每秒被调用 10 次(分散)到多个客户端,它应该是什么样子。我应该调整任何其他设置吗?
目前我收到错误:
System.Web.Services.Protocols.SoapException:
服务器无法处理请求--> System.Data.SqlClient.SqlException:超时已过期。操作前超时时间已过或服务器未响应。
如果连接池是问题,错误会有所不同吗?如何判断这是连接池问题、SOAP 限制,还是我的数据库太忙以至于调用真的超时了?
tomcat - tomcat 连接池
我有一个在 Tomcat 中运行的简单 servlet。因为 servlet 连接到数据库,所以我需要使用连接池。但是,互联网上的所有示例都假定(开发人员)永远不会更改 servlet 连接到的数据库。
例如,这里是一个示例 context.xml 文件。
就我而言,我有一个测试服务器(postgresql)和一个生产服务器(ms sql),所以所有假设我可以在 context.xml 中硬编码设置的教程都行不通。
我有 2 个用于数据库 url、身份验证等的不同属性文件,一个用于测试服务器,一个用于生产服务器,效果很好,但是现在如果我想使用连接池,我将如何将其集成到我的小服务程序?
我希望能够在 Netbeans 6.5 中点击“构建”,将战争放在 dist 目录中,并将其放入任一服务器的 tomcat 应用程序目录中,而不必在新战争部署后四处更改 xml 文件。servlet 知道在每个系统上从何处获取属性文件,因此如果我可以将属性文件与连接池属性集成在一起,我就准备好了。
有任何想法吗... ?
delphi - 如何在 Delphi 7 应用程序中启用 OLEDB 资源池
在 Delphi 7 应用程序中启用池需要做什么?我的连接字符串是:
提供程序=SQLOLEDB.1;初始目录=%s;数据源=%s;密码=%s;用户 ID=%s;OLE Db 服务=-1
我可以通过查看 SQLServer:GeneralStatistics UserConnections 性能计数器来判断连接池没有实现——当我的应用程序运行时它会剧烈波动。通过连接池,我希望它能够达到稳定状态。此外,我看到 Logins/sec 和 Logouts/sec 计数器都非常高 - 如果使用连接池,Logouts/sec 将为零或接近零。
在搜索中,我发现了这篇关于资源池的文章:
http://www.ddj.com/database/184416942
它建议“如果您使用 ATL 在 OLEDB SDK(或 COM)级别工作,则必须编写更多代码”(除了将 OLE Db Services=-1 添加到连接字符串)以获得连接池:
CDataSource 数据库;CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_USERID, "MyName); dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "MyServer); dbinit.AddProperty(DBPROP_INIT_CATALOG, "MyDb); dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033); dbinit.AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL); HRESULT hr = db .OpenWithServiceComponents(_T("sqloledb"), &dbinit);
不幸的是,该代码对我来说是希腊语,我不确定如何将其翻译为 Delphi(或者是否有必要)。
我也小心不要更改连接字符串。关于我可能需要做些什么来启用资源池的任何建议?
c# - 跨静态类共享数据库连接的正确设计?
我有带有许多静态实用程序类的 ac# dll。他们都需要数据库访问,目前每个类都有自己的连接。这变得很麻烦,我想要一个连接的“提供者”,所以一个类可以做类似 ConnProvider.Query(...) 的事情,其中 ConnProvider 是一个所有实用程序类都可以访问的静态类。我想 ConnProvider 必须管理某种连接池,但我不完全确定这是否是实现此功能的正确方法,如果是,内部结构会如何。我在正确的轨道上吗?这不是基于网络的,线程安全不是必需的(但对未来来说会很好),并且只有少数应用程序/机器将使用这个 dll,如果这有助于简化它的话。
spring - 弹簧连接池
有人可以告诉我或指向我解释如何在 Spring 中使用连接池的文档/教程吗?