我有一个API运行在AWS Lambda和AWS Gateway使用Up。我的API在启动时创建一个数据库连接,因此Lambda在第一次触发该函数时会这样做。我的API是用node写的,使用Express和pg-promise来连接和查询数据库。
问题是Lambda在它认为合适的情况下创建函数的新实例,有时看起来好像一次有多个实例。
由于我的 Lambda 函数占用了太多数据库句柄,我的数据库连接数不断用完。如果我登录Postgres并查看pg_stat_activity表,我可以看到很多与数据库的连接。
解决此问题的建议模式是什么?可以限制Lambda中函数同时实例的数量吗?你能在一个函数的实例之间共享一个连接池吗。
AWS现在提供了一个名为RDS Proxy的产品,它是一个托管连接池解决方案,可以解决这个问题:https://aws.amazon.com/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/
您有两个选项来解决此问题:
> < li>
您可以调整Postgres以断开那些空闲连接。这是最好的方法,但可能需要一些反复试验。
您必须确保连接到处理程序中的数据库,并在函数返回或退出之前断开连接。在快速
中,您必须在路由处理程序中连接/断开连接。
有几种方法可能会耗尽数据库连接:
您可以通过控制数据库服务器上可用连接的数量(PostgreSQL上的max_connections
设置)和并发Lambda函数调用的最大数量(如本文所述)来解决1。当然,这只是一个问题换另一个问题,因为当Lambda达到极限时,它将返回429个错误。
寻址2更棘手。处理数据库连接耗尽的传统而正确的方法是使用连接池。但是使用Lambda你不能在客户端做到这一点,而使用RDS你不能选择在服务器端做到这一点。您可以设置一个中间的持久连接池,但是这使得设置更加复杂。
在没有池的情况下,一种选择是在每次函数调用时创建和销毁数据库连接。不幸的是,这会给你的请求增加相当多的开销和延迟。
另一种选择是仔细控制您的客户端和服务器端连接参数。这个想法是首先让数据库在相对较短的空闲时间后关闭连接(在PostgreSQL上,这是由tcp_keepalives_*
设置控制的)。然后,为了确保客户端永远不会尝试使用关闭的连接,您在客户端设置了一个比该值短的连接超时(如何这样做将取决于框架)。
我希望AWS能在某个时候给我们一个解决方案(比如服务器端RDS连接池)。你可以在AWS论坛的帖子中看到各种建议的解决方案。
问题内容: 我将文件的属性(大小,更新时间…)存储在数据库中。因此,问题在于如何管理数据库和文件的事务。 在Java EE环境中,JTA只能管理数据库事务。万一数据库更新成功但文件操作失败,是否应该为此编写文件回滚方法?此外,EJB容器中的文件操作违反了EJB规范。 你怎么看? 问题答案: 理想情况下,对外部资源(例如文件系统)的访问应通过 JCA连接器进行 。尽管围绕此讨论的文章很多,但我从未找
我有两个spring boot应用程序(客户端)和一个spring boot管理员。我想在客户端应用程序中管理环境变量,但默认情况下,spring boot admin starter客户端和spring boot admin starter server不支持此功能(v1.5.2)。 在我的SBA中,我看到了除环境管理之外的日志、指标等。我试过spring cloud commons和eurek
13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET语法 13.5.4. SHOW语法 13.5.5. 其它管理语句 13.5.1. 账户管理语句 13.5.1.1. CREATE USER语法 13.5.1.2. DROP USER语法 13.5.1.3. GRANT和REVOKE语法 13.5.1.4. RENAME USER语法 13.5.1.5. SET PAS
问题内容: 我的源表和目标表存在于不同的服务器上。我 用来编写合并语句以使其同步。 谁能解释我如何引用存在于我内部不同服务器上的两个不同数据库 ? 问题答案: 可能的方法: 我建议采用以下方法,而不是尝试在两个数据库服务器之间使用 语句 。 方法1: 为每个SQL Server实例创建两个。例如,如果您有两个数据库SourceDB和DestinationDB,则可以创建两个名为 和的连接管理器 。
然后 但是当我执行命令时,我出现了这个错误知道我的数据库已有表。我做错了吗?
我想在DB环境是动态的服务器上使用jooq。 我想在SpringBoot2Gradle环境中使用jooq。但有一个问题。建造。gradle文件需要硬编码的数据库信息,但可用。我可以只在QueryDSL中创建类似QClass的JClass吗? 我在服务器的外部环境中创建动态数据源,如类名、用户名、密码和URL。无法使用硬编码的jooq。 =========== jdbc连接信息应该如图所示进行硬编码