連線池 (Connection pooling)
Prisma Postgres 提供內建的連線池 (connection pooling),您無需進行任何設定。這種高效的資料庫連線管理方式,讓資料庫能在不耗盡可用連線的情況下處理更多查詢,從而提升應用程式的擴充性。
Prisma Postgres 中的連線池
對於 Prisma Postgres,連線限制取決於您所訂閱的方案。
| 免費版 | 入門版 | 專業版 | 商業版 | |
|---|---|---|---|---|
| 連線限制(池化) | 10 | 100 | 500 | 1000 |
您可以在 Prisma 定價頁面上比較各個方案。
設定連線池大小
如果您不是使用 Prisma Postgres,則可以在連線字串中指定連線池大小來設定 Prisma ORM 的連線池。
對於 Prisma Postgres,連線限制目前固定為 10,且無法更改。
如果您將 Prisma Accelerate 與您自己的資料庫搭配使用,可以透過 Accelerate 設定頁面中專案的「連線限制」(Connection limit) 設定來調整連線池大小。
連線池逾時
連線池逾時是指查詢在等待 Prisma Postgres 內部連線池分配連線時,所能阻塞的最長秒數。若並發請求數超過連線限制,便會發生此情況,導致額外的請求被放入佇列,直到有空閒連線釋出為止。若在池逾時限制內仍未取得可用連線,則會拋出異常。將數值設為 0 可停用連線池逾時功能。
例如
postgresql://user:password@localhost:5432/db?connection_limit=10&pool_timeout=20
pool_timeout 的預設值為 10 秒。
設定查詢限制
當使用 Prisma Accelerate 時,您可以在 Prisma Postgres 專案環境的設定 (Settings) 頁籤中,配置最小與最大查詢回應大小、查詢持續時間以及交易限制。
查詢逾時限制
Prisma Postgres 對每個查詢有 10s 的預設全域逾時設定。根據您的訂閱方案,可以使用標記為查詢持續時間 (Query duration) 的滑桿進行調整。
| 方案 | 免費版 | 入門版 | 專業版 | 商業版 |
|---|---|---|---|---|
| 查詢逾時 | 最高 10 秒 | 最高 10 秒 | 最高 20 秒 | 最高 60 秒 |
雖然您可以增加查詢逾時時間,但如果資料庫查詢耗時超過 10 秒,建議您檢查並最佳化這些查詢。這有助於減輕底層資料庫的壓力,因為執行時間過長的查詢通常代表需要進行最佳化。詳情請參閱錯誤參考資料。
互動式交易查詢逾時限制
Prisma Postgres 對每個互動式交易 (interactive transaction) 有 15s 的預設全域逾時設定。根據您的訂閱方案,可以使用標記為交易持續時間 (Transaction duration) 的滑桿進行調整。
| 方案 | 免費版 | 入門版 | 專業版 | 商業版 |
|---|---|---|---|---|
| 互動式交易限制 | 最高 15 秒 | 最高 15 秒 | 最高 30 秒 | 最高 90 秒 |
當您在 Prisma Console 中設定較長的互動式交易逾時時間時,必須同時在程式碼中的互動式交易查詢裡,透過交易選項 (transaction option) 指定相符的 timeout 值。否則,交易仍會依照較低的預設值逾時(例如未指定 timeout 值時為 5 秒)。以下是如何在程式碼中設定 30 秒逾時的範例:
await prisma.$transaction(
async (tx) => {
// Your queries go here
},
{
timeout: 30000, // 30s
}
);
雖然您可以增加互動式交易的逾時限制,但如果資料庫交易耗時超過 15 秒,建議您檢查並最佳化這些交易。執行時間過長的交易會對效能產生負面影響,通常也代表需要進行最佳化。詳情請參閱錯誤參考資料,並查看我們文件中關於互動式交易章節中的警告。
回應大小限制
Prisma Postgres 的預設全域回應大小限制為 5MB,根據您的訂閱方案,可以使用標記為回應大小 (Response size) 的滑桿進行調整。
| 方案 | 免費版 | 入門版 | 專業版 | 商業版 |
|---|---|---|---|---|
| 查詢大小 | 最高 5MB | 最高 5MB | 最高 10MB | 最高 20MB |
雖然您可以增加查詢回應大小,但建議您僅擷取實際所需的資料。這能改善資料庫效能、降低資料庫壓力,並使前端應用程式回應更迅速。查詢大小超過 5 MB 通常表示需要進行最佳化。詳情請參閱錯誤參考資料。
自動擴展 (Autoscaling) (僅限 Accelerate + 您自己的資料庫)
自動擴展功能目前僅在將 Prisma Accelerate 與您自己的資料庫搭配使用時才可用。它能根據應用程式的流量需求進行動態資源配置。隨著使用量接近定義的連線限制,Prisma 將開始佈建額外的資源以處理負載。若流量持續增長,系統會進一步擴充;當流量減少時,系統會自動縮減,確保資源的高效利用。
運作原理
自動擴展由連線池管理器 (connection pooler) 提供支援,它透過將總可用連線分配到多個查詢引擎實例 (Query Engine instances) 來實現環境的水平擴展。
以下是其實際運作方式:
- 假設您環境的連線限制設定為
1000。 - Prisma Accelerate 將擴展至多個查詢引擎實例(例如 100 個實例)。
- 每個實例會獲分配總量的一部分——在此範例中為每個實例 10 個連線。
- 這就是為什麼每個查詢引擎實例都會回報連線限制為 10,即使整個環境實際上支援 1000 個並發連線。
這種分散式模型允許您的應用程式透過增加查詢引擎實例數量來處理成長的流量,同時能有效管理連線使用。
啟用自動擴展
當您的 Accelerate 連線限制設定超過預設值 (10) 時,自動擴展功能會自動啟用。此功能不適用於免費方案 (Free plan) 或入門方案 (Starter plan)。
您環境的最大連線限制取決於您的 Prisma Data Platform 方案。
| 方案 | 最大連線限制 |
|---|---|
| 免費版 | 10 |
| 入門版 | 10 |
| 專業版 | 100 |
| 商業版 | 1000 |
| 企業版 | 聯絡我們 |