在中等负载下,我们偶尔会在某个数据库上收到以下错误。
我已经梳理了代码,我们正在像我们应该的那样关闭finally块中的连接,除了我们已经建立的少数情况下很少被调用。我们将在下一个版本中修复这些代码,但为了解决当前的生产问题,我建议将最大池大小增加到 300。我们当前遇到的最大并发用户数约为 110,这显然超过了默认池大小( 100)。
我还建议确保特定 SQL Server 实例的所有连接字符串都相同,以避免创建不必要的多个连接池。我希望当我们需要在单个 SQL Server 实例中切换数据库时,我们可以在实际的 SQL 查询之前使用USE [Database]语句。
你们有什么想法、指示、建议或陷阱需要我们注意吗?
我在 C# 和 PostgreSQL 中出现错误“Too Many Clients Already”,我做错了什么吗?
这是我的主要代码
public class NationalService
{
private NpgsqlConnection conn;
protected string query;
public NationalService()
{
this.conn = ConnectionService.GetConnection();
}
public string GetNamaWilayah(string kodePropinsi, string kodeKabupaten)
{
this.query = "select namakabupaten from dim_gab_wilayah where kodepropinsi='" + kodePropinsi + "' and kodekabupaten='" + kodeKabupaten + "' group by namakabupaten";
string namaKabupaten;
using (NpgsqlCommand command = new NpgsqlCommand(this.query, this.conn))
{
using (NpgsqlDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
namaKabupaten = dr["namakabupaten"].ToString();
return namaKabupaten;
}
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 Sidekiq 在 AWS 服务器上创建 PDF 文档,以便在后台处理此作业。
在创建 PDF 文件的过程中,[Rails] 应用程序正在汇集数据库以检查是否创建了 PDF 文件(间隔:2 秒)。
今天早上我在 Sidekiq 端收到了这个错误信息:
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
Run Code Online (Sandbox Code Playgroud)
我正在使用带有 MySQL 的 Amazon RDS。
作为临时解决方案,我将pool参数从10增加到30in database.yml,但是我意识到这只是一个临时补丁。
如何正确修复?
谢谢
我正在尝试比较一些 java 连接池库,但到目前为止我还没有找到任何令人满意的答案。现在 C3P0 正在我的应用程序中使用,但我想建议其他连接池库,但我没有任何可靠的信息可以迁移到任何其他连接池机制。我读到 Oracle 的 UCP 正在使用连接收集机制,但我不知道它有多大用处,是否还有其他提供者也提供收集机制。可以包括哪些点来比较各种连接池机制。谁能建议我在 Oracle UCP、C3P0 和 HikariCP 中哪个更好?还有比以上 3 更好的其他机制吗?
我无法理解如何在 NodeJS 中连接 PostgreSQL 池并正确执行。我在路由器上使用 Express,所有处理程序都放在不同的文件中。每个人都建议使用数据库连接制作一个单独的文件,然后在每个源代码文件中“要求”它。是否可以通过 app.use 或其他方式连接此池?对于每个用户请求,我的所有处理程序始终使用数据库连接。
假设我正在存储Person(id, country_id, name). 假设用户刚刚发送了 id 和 country_id,然后我们发回了名称。
现在我有一个 db 和 2 个网络服务器,每个网络服务器都有一个 20 个连接的连接池(例如 c3p0)。
这意味着 db 维护 40 个连接,每个 web 服务器维护 20 个连接。
分析上面的系统我们可以看到我们使用连接池是因为人们说“创建数据库连接很昂贵”
这一切都说得通
现在假设我将表数据分片country_id,所以现在可能有 200 db,还假设我们的应用程序现在很流行并且我们需要有 50 个网络服务器。
现在,上面的连接池策略失败了,就好像每个网络服务器在池中为每个数据库保持 20 个连接一样。
这意味着每个网络服务器将有 20*200 db = 4000 个连接
,每个 db 将有 50 个网络服务器 *20 = 1000 个连接。
这听起来不太好,所以我有一个问题,为什么使用连接池,每个 Web 请求创建 1 个连接的开销是多少?
所以我运行了一个测试,我看到DriverManager.getConnection()在本地主机上平均需要 20 毫秒。
每个请求多出 20 毫秒并不是游戏杀手
问题 1:每个 Web 请求使用 1 个连接还有其他缺点吗?
问题2:互联网上的人们都说“数据库连接很贵”。有什么不同的费用?
PS:我也看到 pinterest 做同样的事情https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f
一段时间以来,我的应用程序开始出现非常大的 CPU 消耗。一段时间以来,我的应用程序开始出现非常大的 CPU 消耗。我安装了JProfiler,据我了解,hibernate的c3p0有问题。我使用hibernate 4.3,jsf2.2.10 + primefaces 5.2,tomcat 8.5,也使用ehcache。
这是我打印的一些结果。
我对 NodeJS 相当陌生(来自 PHP 背景)。与 PHP 的阻塞性质相比,我对 NodeJS 的异步性质有基本的了解。我创建了一些连接到 mysql 的应用程序节点并让它们正常工作。
我目前对在 Node 中执行查询的最佳方式的理解是:
我处于需要迭代大量项目并将每个项目插入数据库的情况。执行上述操作无效。我的想法是,由于每个查询都是并行执行的,列表中的下一项正在尝试获取连接,但由于之前的查询可能尚未完成,因此没有可用的。没有抛出任何错误,只是似乎没有放入项目。通过日志记录,我发现它从未达到运行 pool.getConnection() 回调的程度。
所以我想我可以修改连接流程:
问题是,我怎么知道 .release() 我的连接什么时候是安全的?我不能只在我的 .query() 回调中执行此操作,因为之后可能会有更多查询。但我也不能在查询回调中执行此操作,因为我知道我需要等待所有查询完成。我是否负责创建自己的逻辑来确定所有查询(以及所有可能的未来查询,即使它们尚未启动)何时完成?或者这只是没有完成的事情?
在 PHP 中,这将是微不足道的,因为它具有阻塞性质。我选择在这个应用程序中使用 NodeJS,因为它有时确实需要异步。但它在我的应用程序不需要的地方强制我使用异步(在某些情况下不应该使用它)。
我不愿发布我的代码,因为它有点复杂,所以我不想分散这个特定主题的注意力。
我有一个 Scala 应用程序,它使用 Finagle HTTP 客户端每秒向代理后面的 10 个外部 HTTP API 发出多达 2k 个请求。
我已将每个外部主机的连接池大小配置为 2000*10(10 秒是请求超时),但我不确定这是否是有效的配置。
我没有深入的 TCP/IP 知识,但我想知道 JVM 应用程序可以与一台远程主机建立多少个 HTTP 连接以及它可以建立多少个总体传出连接是否有最大限制?限制背后的因素是什么?我有一个模糊的记忆,它可能与可用的 TCP 端口有关,但不太确定。
我有一个很长的时间multiprocessing python code,其中涉及Oracle database在运行期间与多次交互。该代码应该是一个独立的应用程序,它将 24*7 运行并从数据库中获取数据,使用多处理执行它,将结果写回数据库,然后再次轮询数据库以获取新数据并不断重复此循环。我如何创建一个 connection pool (or session pool(我不知道 2, new in python 和 coding )之间的区别来提高代码的性能?需要使用cx_oracle. 任何帮助将不胜感激。提前谢谢了!!