Accelerate 常見問題
我什麼時候應該為 Prisma Accelerate 啟用靜態 IP?
當您的安全設定需要 IP 白名單,或您正在實作僅允許來自受信任 IP 位址存取的防火牆時,請為 Accelerate 啟用靜態 IP,以確保資料庫連線受到控制且安全。

進一步了解如何在 Platform Console 中為 Accelerate 啟用靜態 IP。
什麼是靜態 IP?
靜態 IP 位址是一個固定的 IPv4 或 IPv6 位址。與可能隨時變動的動態 IP 位址不同,來自靜態 IP 位址的流量可以被輕易識別。

ℹ️ 若要在現有或新的專案環境中啟用 Accelerate 的靜態 IP 支援,您的工作區(Workspace)需採用我們的 Pro 或 Business 方案。請參閱定價頁面以了解更多資訊。
為什麼有時會看到異常的快取行為?
當 Accelerate 處理較高的專案負載時,快取效能表現最佳。許多快取操作(例如將資料提交到快取和重新整理過期的資料)都是以非同步方式進行的。在對 Accelerate 進行基準測試時,建議使用迴圈或負載測試方法。這能更準確地模擬高負載情境,並減少因低頻操作而產生的離群值。
Prisma 操作是透過 HTTP 發送到 Accelerate 的。因此,對 Accelerate 的第一個請求必須建立 HTTP 交握(Handshake),這可能會導致額外的延遲。我們正在探索未來減少此初始請求延遲的方法。
Accelerate 的定價為何?
您可以在我們的Accelerate 定價頁面找到更多詳細資訊。
VS Code 無法識別 $extends 方法
如果您將 Accelerate 的 Prisma Client 擴充功能新增至目前在 VS Code 中開啟的現有專案,編輯器可能無法立即識別 $extends 方法。
這可能是因為 TypeScript 伺服器尚未識別重新產生的 Prisma Client。若要解決此問題,您需要重新啟動 TypeScript。
- 在 VS Code 中,開啟指令面板(Command Palette)。您可以按 F1 或選擇 View > Command Palette 來執行。
- 輸入
typescript並選擇並執行 TypeScript: Restart TS server 指令。
VS Code 現在應該可以識別 $extends 方法了。
Accelerate 的快取節點在哪些區域可用?
Accelerate 運行於 Cloudflare 網路,快取命中(Cache hits)由 Cloudflare 全球 300 多個節點提供服務。您可以在此處查看 Accelerate 快取節點可用的區域:https://www.cloudflare.com/network/。
Accelerate 的連線池在哪些區域可用?
當未指定快取策略,或發生快取未命中(Cache miss)的情況下,Prisma Client 查詢會透過 Accelerate 的連線池路由。目前,查詢可以透過 16 個可用位置中的任何選定區域進行路由。
目前可用的區域清單如下:
- 亞太地區,孟買 (
ap-south-1) - 亞太地區,首爾 (
ap-northeast-2) - 亞太地區,新加坡 (
ap-southeast-1) - 亞太地區,雪梨 (
ap-southeast-2) - 亞太地區,東京 (
ap-northeast-1) - 加拿大,中部 (
ca-central-1) - 歐洲,法蘭克福 (
eu-central-1) - 歐洲,愛爾蘭 (
eu-west-1) - 歐洲,倫敦 (
eu-west-2) - 歐洲,巴黎 (
eu-west-3) - 歐洲,斯德哥爾摩 (
eu-north-1) - 南美洲,聖保羅 (
sa-east-1) - 美國東部,北維吉尼亞 (
us-east-1) - 美國東部,俄亥俄 (
us-east-2) - 美國西部,北加州 (
us-west-1) - 美國西部,奧勒岡 (
us-west-2)
您也可以在準備設定 Accelerate 時,或透過存取 Prisma Cloud Platform 儀表板 中的 Accelerate Settings 分頁下的 Region 區塊,查看可用區域。
Accelerate 如何知道從哪個區域取得快取?
在底層,Accelerate 使用 Cloudflare,該服務使用 Anycast 進行網路定址與路由。傳入的請求將被路由至網路上最靠近且有能力高效處理該請求的資料中心或「節點」。若要進一步了解其運作方式,我們建議查閱關於 Anycast 的資訊。
我該如何使 Accelerate 上的快取失效?
如果您使用付費方案,您可以透過 $accelerate.invalidate API 按需使快取失效;或者,您每天最多可以在專案層級使整個快取失效五次。此限制取決於您的方案。您可以透過 Accelerate 設定頁面管理此項設定。
Accelerate 的一致性模型為何?
Accelerate 沒有一致性模型。它不是一個需要節點達成共識的分散式系統(因為資料僅儲存在最靠近使用者的快取節點中)。然而,儲存在 Accelerate 快取節點中的資料不會傳播到其他節點,因此 Accelerate 在設計上不需要一致性模型。
Accelerate 實作了讀取穿透(read-through)快取策略,特別適合讀取密集的作業負載。
快取服務提供的資料新鮮度取決於您在查詢中定義的快取策略。請參閱此章節以獲取有關為您的查詢選擇正確快取策略的更多資訊。
Accelerate 與其他快取工具(如 Redis)有何不同?
- Accelerate 是一種「專用型」快取,允許您透過快取策略在程式碼查詢層級最佳化資料存取。另一方面,Redis 和 Memcached 等工具則是設計用於高度適應與靈活性的「通用型」快取。
- Accelerate 是一項託管服務,可減少建構與維護快取服務所需的時間、風險與工程工作量。
- 預設情況下,Accelerate 是全球分散式的,這能降低您的查詢延遲。其他快取工具則需要額外的設定才能在全球範圍內使用。
什麼時候不應該使用 Accelerate 的快取功能?
Accelerate 是一個全域資料快取與連線池,允許您在程式碼的查詢層級最佳化資料存取。雖然使用 Accelerate 快取可以大幅提升應用程式的效能,但它並不總是適合所有使用場景。
如果符合以下情況,Accelerate 的全域快取功能可能不適合您的應用:
-
您的應用程式僅在特定區域內使用,且應用程式伺服器與資料庫皆位於同一個網路的同一區域中。例如,如果您的應用程式伺服器與資料庫在同一區域與網路中,直接執行資料庫查詢的速度通常會快得多。然而,如果您的應用程式伺服器與資料庫位於不同區域或網路,Accelerate 將能加速您的查詢,因為資料將被快取在離您應用程式最近的資料中心。
-
您「僅」需要通用型快取。Accelerate 是一個連線池與「專用型快取」,僅在程式碼中快取您的資料庫查詢回應。通用型快取(例如 Redis)允許您快取來自多個來源的資料(例如外部 API),而這是目前 Accelerate 所不支援的。如果您對通用型快取感興趣,請透過我們的 Discord 與我們分享您的回饋。
-
您的應用程式資料在檢索時「始終」需要保持最新,這使得難以制定合理的快取策略。
即使不使用 Accelerate 的全域快取,您仍可透過其連線池功能獲益匪淺,特別是在難以管理與擴展資料庫連線的無伺服器(Serverless)或 Edge 函式環境中。您可以在此處了解更多關於無伺服器挑戰的資訊。
我可以使用 Accelerate 搭配其他 ORM、查詢產生器或驅動程式嗎?
不能。我們目前沒有計畫支援其他 ORM、查詢產生器或驅動程式。不過,如果您希望我們支援其他函式庫,請隨時前往我們的 Discord 社群的 #help-and-questions 頻道告訴我們。
設定 cacheStrategy 時,ttl 參數允許的最大值是多少?
存活時間 (ttl) 參數最多可設定為「一年」。然而請注意,如果快取項目不常被存取,它們可能會被系統移除(Evicted)。
根據我們的實驗觀察,快取項目約可保留 18 小時左右。雖然如果項目被頻繁存取,它們可能會在快取中停留較長時間,但我們無法保證。
注意:即使是經常被存取的項目,也有可能偶爾從快取中被移除。無論其活動程度如何,項目存活超過一個月的可能性極低。
為什麼在服務中斷期間,Accelerate 不會切換回直接連線字串?
在極少數的服務中斷情況下,切換至直接連線會繞過連線池。這可能會耗盡資料庫的可用連線,並在資料庫層級導致其他問題。
如果發生服務中斷,建議檢查狀態頁面。您也可以聯繫 Prisma 的支援管道尋求協助。
注意:此外值得注意的是,某些 Edge 函式運行環境可能不支援 Prisma ORM 的直接連線。詳情請參考我們的 Edge 函式文件。
互動式交易中的每一項查詢都是分開計費的嗎?
是的,互動式交易是根據交易內的個別操作來計費的。交易本身的開始、提交或復原不會產生費用。例如,在下方的查詢中,有兩個可計費的查詢。
await prisma.$transaction(async (tx) => {
await tx.user.deleteMany({ where: { name: "John Doe" } });
await tx.user.createMany({ data });
});
然而,當使用 用於順序客戶端操作的 $transaction API 時,無論陣列中有多少查詢,它都僅算作一筆可計費查詢。例如:
await prisma.$transaction([
prisma.user.deleteMany({ where: { name: "John Doe" } }),
prisma.user.createMany({ data }),
]);
如果您不需要互動式交易,可以透過使用順序操作交易來節省成本並提升效能。順序操作交易在 Accelerate 上效能更好,因為它們在執行時僅需與資料庫進行一次往返,而互動式交易則需要分別為開始、提交以及每個個別操作進行多次往返。
我可以提高 Accelerate 的查詢持續時間與回應大小限制嗎?
可以,您可以根據訂閱方案提高 Accelerate 的限制。以下是可設定的限制:
| 限制 | 免費版 | 入門版 | Pro 方案 | Business 方案 |
|---|---|---|---|---|
| 查詢逾時 | 最長 10 秒 | 最長 10 秒 | 最多 20 秒 | 最多 60 秒 |
| 互動式交易逾時 | 最長 15 秒 | 最長 15 秒 | 最多 30 秒 | 最多 90 秒 |
| 回應大小 | 最多 5 MB | 最多 5 MB | 最多 10 MB | 最多 20 MB |
請查看定價頁面以取得可用方案及其對應限制的更多詳細資訊。
雖然您可以根據訂閱方案提高這些限制,但仍建議您最佳化資料庫操作。在我們的疑難排解指南中了解更多。
使快取查詢結果失效需要多長時間?
由於快取需要進行全域清除,因此難以給出具體的時間範圍。不過,快取資料是最終一致(eventually consistent)的,通常會在幾秒鐘內傳播到所有的 PoP(存取點)。在極少數情況下,可能需要較長時間。
這裡有一個 演示應用程式,供您測試使快取查詢結果失效所需的時間。
Invalidate (失效) 與 Revalidate (再驗證) 有什麼區別?
Invalidate:快取項目會被刪除,並在下一個請求時重新取得新資料,這會導致快取未命中(cache miss)。這能移除過期資料,但在快取重新填入前,可能會導致回應速度較慢。
Revalidate:快取項目會被主動更新,確保下一個請求直接使用快取中的最新資料。這能保持快取的有效性,並透過避免快取未命中來維持較快的回應速度。
什麼是按需快取失效(on-demand cache invalidation)?
按需快取失效允許應用程式在資料變更時立即更新特定快取資料,而無需等待常規的快取重新整理週期。這能確保資料對於使用者而言是準確且即時的。
我應該什麼時候使用快取失效 API?
當資料一致性無法等待快取的標準過期或重新驗證時,快取失效 API 就顯得至關重要。主要使用場景包括:
- 內容更新:當發生關鍵變更(如已發佈文章的編輯、產品更新或個人資料修改)且需要立即對外顯示時。
- 庫存管理:在即時應用程式中(如庫存或預訂系統),庫存水準、可用性或預訂狀態必須反映最新資訊時。
- 高優先級資料:對於時間敏感的資料(如突發新聞或緊急通知),確保使用者能立即看到最新資訊至關重要時。
在這些情境中使用按需快取失效,有助於僅重新整理必要的資料,在維持系統效能的同時,確保使用者獲得準確且最新的資訊。
Accelerate 如何計算查詢費用?
Accelerate 在 Prisma Client 調用層級進行查詢計數。單一 Prisma 查詢在底層可能轉換為多個 SQL 語句,但基於計費目的,它僅算作一筆查詢。這確保了直接且可預測的計費方式,反映的是 Prisma Client 的使用量,而非底層 SQL 操作的複雜度。
無論查詢是從快取還是資料庫中取得,都會進行計數。即使是從快取中檢索的查詢,也會計入您的查詢配額。
我該如何從 GitHub 登入切換為電子郵件與密碼登入?
如果您先前使用 GitHub 註冊並希望切換為電子郵件與密碼登入,請依照下列步驟操作:
1. 驗證您的 GitHub 電子郵件地址
- 檢查與您的 GitHub 帳號關聯的主要電子郵件地址(例如從 GitHub 個人資料或通知設定中查看)。
2. 建立一個新的電子郵件/密碼帳號
- 前往電子郵件/密碼註冊頁面。
- 使用與您 GitHub 帳號連結的相同電子郵件地址來建立新帳號。
- 我們的系統會自動將您的新電子郵件/密碼帳號與現有資料進行連結。
3. 測試您的登入
- 登出並嘗試使用您的電子郵件與剛建立的密碼進行登入。
注意:如果您遇到任何問題,請聯繫我們的支援團隊協助連結您的帳號。