连接池
Prisma Postgres 默认提供内置连接池,由 Prisma Accelerate 启用。通过使用 Prisma Postgres,您可以获得连接池的优势,而无需进行任何配置。数据库连接的有效管理使得数据库能够处理更多查询,而不会耗尽可用的数据库连接,从而使您的应用程序更具可伸缩性。
然而,在某些情况下,进一步配置连接池可能有助于优化应用程序的性能。
本文档重点介绍 Prisma Postgres 的连接池功能。有关 Prisma ORM 内部连接池的更多信息,请参阅我们的ORM 连接池文档。
Prisma Postgres 中的连接池
目前,每个 Prisma Schema 的 Prisma Postgres 最多允许 10 个并发数据库连接。由于 Prisma Postgres 高效的 unikernel 架构,最大限度地减少了对大型连接池的需求,因此此限制通常是足够的。
如果您将自己的数据库与 Prisma Accelerate 结合使用,连接限制会有所不同
- Starter 套餐:最多
10
个连接。这通常足以满足大多数工作负载,但如果您预计流量很大或计算密集型操作,您可能需要增加此限制。 - Pro 套餐:支持最多
100
个并发连接。 - Business 套餐:支持最多
1000
个并发连接。
您可以在 Prisma 定价页面上比较套餐。
配置连接池大小
如果您未使用 Prisma Postgres,则可以通过在连接字符串中指定来配置 Prisma ORM 的连接池大小。
对于 Prisma Postgres,连接限制目前固定为 10
,无法更改。
如果您将 Prisma Accelerate 与自己的数据库结合使用,您可以在Accelerate 设置页面上的项目中通过“连接限制
”设置来配置连接池大小。
配置连接池超时
连接池超时是指查询在等待 Prisma Postgres 内部连接池中的连接时将被阻塞的最长秒数。如果并发请求数超过连接限制,就会发生这种情况,导致额外的请求排队,直到有空闲连接可用。如果在池超时时间内没有空闲连接可用,则会抛出异常。通过将值设置为 0 可以禁用连接池超时。
与连接池大小类似,您也可以通过数据库连接字符串配置连接池超时。要调整此值,您可以将 pool_timeout
参数添加到数据库连接字符串中。
例如
postgresql://user:password@localhost:5432/db?connection_limit=10&pool_timeout=20
pool_timeout
的默认值为 10
秒。
配置查询限制
在使用 Prisma Accelerate 时,您可以在 Prisma Postgres 项目环境的设置选项卡中配置最小和最大查询响应大小、查询持续时间以及事务限制。
查询超时限制
Prisma Postgres 对每个查询都有一个默认的全局超时时间 10s
,您可以根据您的订阅套餐使用标有“查询持续时间”的滑块进行配置
套餐 | Starter | Pro | Business |
---|---|---|---|
查询超时 | 最多 10 秒 | 最多 20 秒 | 最多 60 秒 |
虽然您可以增加查询超时时间,但如果数据库查询时间超过 10
秒,建议您检查并优化它们。这有助于减轻底层数据库的压力,因为长时间运行的查询通常表明需要优化。在错误参考中了解更多信息。
交互式事务查询超时限制
Prisma Postgres 对每个交互式事务都有一个默认的全局超时时间 15s
,您可以根据您的订阅套餐使用标有“事务持续时间”的滑块进行配置
套餐 | Starter | Pro | Business |
---|---|---|---|
交互式事务限制 | 最多 15 秒 | 最多 30 秒 | 最多 90 秒 |
当您在 Prisma 控制台中设置更高的交互式事务超时时,您还必须通过超时事务选项在交互式事务查询中指定匹配的 timeout
值。否则,事务仍将以较低的默认值(例如,未指定超时值时的 5 秒限制)超时。以下是如何在代码中设置 30
秒超时的示例
await prisma.$transaction(
async (tx) => {
// Your queries go here
},
{
timeout: 30000, // 30s
}
);
响应大小限制
Prisma Postgres 的默认全局响应大小限制为 5MB
,您可以根据您的订阅套餐使用标有“响应大小”的滑块进行配置
套餐 | Starter | Pro | Business |
---|---|---|---|
查询大小 | 最多 5MB | 最多 10MB | 最多 20MB |
虽然您可以增加查询响应大小,但建议您将数据检索限制在实际需要的数据量。这可以提高数据库性能,减轻数据库压力,并使您的前端应用程序响应更快。大小超过 5
MB 的查询通常表明需要优化。在错误参考中了解更多信息。
自动扩缩 (仅限 Accelerate + 您自己的数据库)
自动扩缩目前仅在使用 Prisma Accelerate 和您自己的数据库时可用。它根据应用程序的流量实现动态资源分配。当使用量接近定义的连接限制时,Prisma 将开始预置额外资源来处理负载。如果流量继续增长,系统将进一步横向扩展。当流量减少时,它会缩减,确保资源的高效利用。
工作原理
自动扩缩由一个连接池器提供支持,它通过将总可用连接分配到多个查询引擎实例来横向扩缩您的环境。
以下是实际工作原理
- 假设您的环境连接限制设置为
1000
。 - Prisma Accelerate 将扩展到多个查询引擎实例(例如,100 个实例)。
- 每个实例分配总连接数的一部分——在此示例中,每个实例分配 10 个连接。
- 这就是为什么每个查询引擎实例都报告 10 个限制的原因,尽管整个环境支持 1000 个并发连接。
这种分布式模型允许您的应用程序通过启动更多查询引擎实例来处理增加的流量,同时高效地管理连接使用。
启用自动扩缩
当您的 Accelerate 连接限制设置高于默认值 (10) 时,自动扩缩会自动启用。此功能在 Starter 套餐中不可用。
您环境的最大连接限制取决于您的 Prisma Data Platform 套餐
套餐 | 最大连接限制 |
---|---|
Starter | 10 |
Pro | 100 |
Business | 1000 |
企业版 | 联系我们 |