連線池
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 |
| 企業版 | 聯絡我們 |