本頁面提供最佳做法,有助您實現 Cloud SQL 的最佳效能、耐用性和可用性。
如果 Cloud SQL 執行個體發生問題,請在疑難排解期間查看下列事項:
執行個體設定與管理
最佳做法 | 更多資訊 |
---|---|
請詳讀並遵守操作指南,確保您的執行個體在 Cloud SQL 服務水準協議的涵蓋範圍內。 | |
設定主要執行個體的維護期間,以便控制發生中斷型更新的時間。 | 請參閱維護期間。 |
如果是需要讀取大量資料的工作負載,請新增唯讀備用資源,以分擔主要執行個體的流量。 | 您也可以選擇使用 HAProxy 等負載平衡器來管理流往備用資源的流量。 |
如果您會定期刪除和重新建立執行個體,請使用執行個體 ID 中的時間戳記來提高新執行個體 ID 可用的可能性。 | |
前一項作業完成之前,請勿開始進行管理作業。 |
Cloud SQL 執行個體要待到完成前一項作業後,才能接受新的作業要求。如果試圖提前啟動新作業,作業要求會失敗。重新啟動執行個體也包含在內。
Google Cloud 主控台中的執行個體狀態無法反映作業是否正在執行。綠色勾號只代表執行個體的狀態為 |
設定儲存空間,以便進行重要資料庫維護作業。 |
如果啟用自動增加儲存空間的執行個體設定已停用,或是已啟用自動增加儲存空間限制,請務必至少保留 20% 的可用空間,以便 Cloud SQL 執行任何重要的資料庫維護作業。 如要接收可用磁碟空間低於 20% 的警報,請為「磁碟使用率」指標建立以指標為基礎的警報政策,並將「門檻位置」設為「高於門檻」,值為 .8。詳情請參閱「建立以指標為基礎的警告政策」。 |
避免 CPU 使用率超載。 |
您可以在 Google Cloud 控制台的執行個體詳細資料頁面中,查看執行個體使用的可用 CPU 百分比。詳情請參閱「指標」一文。您也可以建立指標門檻快訊政策,監控 CPU 用量,並在達到指定門檻時收到快訊通知。 為避免 CPU 使用率過高,您可以增加執行個體的 CPU 數量。變更 CPU 需要重新啟動執行個體。如果執行個體已達 CPU 數量上限,您必須將資料庫分割成多個執行個體。 |
避免記憶體耗盡。 |
如要查看記憶體耗盡的跡象,請主要使用「用量」指標。為避免記憶體不足錯誤,建議您將這個指標保持在 90% 以下。 您也可以使用 total_usage 指標,查看 Cloud SQL 執行個體使用的可用記憶體百分比,包括資料庫容器使用的記憶體,以及作業系統快取所分配的記憶體。 觀察這兩項指標的差異,即可瞭解程序與作業系統快取使用了多少記憶體。您可以重新利用此快取中的記憶體。 如要預測記憶體不足的問題,請同時查看並解讀這些指標。如果指標顯示過高,表示執行個體的記憶體可能不足。這可能是因為自訂設定、執行個體不敷工作負載需求,或是上述因素的組合所致。 調整 Cloud SQL 執行個體,以增加記憶體容量。 變更執行個體的記憶體大小時,必須重新啟動執行個體。如果執行個體已達到記憶體大小上限,您必須將資料庫分割成多個執行個體。如要進一步瞭解如何在 Google Cloud 控制台中監控這兩項指標,請參閱「指標」一文。 |
請確認您的執行個體具有最佳交易 ID。 |
您可以將 調整及監控資料庫執行個體,有助於減少或避免與真空相關的問題。監控執行個體的交易 ID 用量,並根據執行個體的工作負載啟用及調整 |
安全性
最佳做法 | 更多資訊 |
---|---|
偏好使用私人 IP | 除非需要公開 IP 存取權,否則建議使用私人 IP。這有助於盡量減少資料庫的未經授權網路連線。 |
避免在授權網路中使用 0.0.0.0/0 | 請勿將 0.0.0.0/0 納入「已授權的網路」,因為這會允許來自全球網際網路的存取權,且不受任何限制。 |
避免使用過大的授權網路 | 請勿在授權網路中使用較小的 CIDR 前置字串,因為這會允許來自可能過多主機的存取權。建議 CIDR 前置詞不得小於 /16,最好大於 /19。 |
啟用密碼政策 | 使用執行個體密碼政策,為資料庫執行個體指定適當的密碼政策,避免設定低強度密碼、設定到期時間,以及在登入失敗時設定帳戶鎖定。如果您要設定公開 IP 的執行個體,這點就特別重要。 |
資料架構
最佳做法 | 更多資訊 |
---|---|
盡可能將大型執行個體分割為較小的執行個體。 | 請盡量使用多個小型 Cloud SQL 執行個體,效果會比使用單個大型的執行個體更好。大型的單體式執行個體在管理上會比多個小型執行個體更困難。 |
請勿使用過多的資料庫資料表。 |
請將執行個體的表格數量控制在 10,000 以下。資料庫資料表過多可能會影響資料庫升級時間。 |
應用程式實作
最佳做法 | 更多資訊 |
---|---|
使用適合的連線管理做法,例如連線集區和指數輪詢。 | 使用這些技術可改善應用程式的資源運用,也有助於遵守 Cloud SQL 連線限制。如需詳細資訊和程式碼範例,請參閱「管理資料庫連線」一文。 |
測試應用程式對維護更新的回應,更新在維護期間隨時可能會發生。 | 請嘗試使用自助式維護功能模擬維護更新。在維護期間,執行個體會在短時間內無法使用,且現有的連線會中斷。測試維護功能的推出作業,有助您進一步瞭解應用程式如何處理預定維護作業,以及系統復原的速度。 |
測試應用程式對容錯移轉的回應,容錯移轉隨時可能發生。 | 您可以使用 Google Cloud 控制台、gcloud CLI 或 API 手動啟動容錯移轉。請參閱「啟動容錯移轉」。 |
避免進行大量交易。 | 盡量維持小型簡短交易。如果需要更新大型資料庫,請分成多項小型交易進行,而非進行單次的大型交易。 |
如果使用的是 Cloud SQL 驗證 Proxy,請務必使用最新版本。 | 請參閱保持 Cloud SQL 驗證 Proxy 為最新版本。 |
資料匯入與匯出
最佳做法 | 更多資訊 |
---|---|
使用無伺服器匯出功能。 | 無伺服器匯出功能會將匯出作業卸載至臨時執行個體,讓主要執行個體可繼續提供查詢服務,並以平常的效能執行作業。資料匯出作業完成後,系統會自動刪除暫時性執行個體。 |
加速匯入小型執行個體。 | 針對較小的執行個體,您可以暫時增加執行個體的 CPU 和 RAM,以改善匯入大型資料集時的效能。 |
如果您要匯出資料以匯入至 Cloud SQL,請務必採用正確程序。 | 請參閱 從外部代管的資料庫伺服器匯出資料一文。 |
備份與還原
最佳做法 | 更多資訊 |
---|---|
使用合適的 Cloud SQL 功能保護您的資料。 |
備份、時間點復原和匯出是提供資料備援和資料保護的三種方式。這兩種方式可在不同情境下各自提供保護,在健全的資料保護策略中下,兩者相輔相成。 建立備份既輕鬆又快速,能夠將執行個體上的資料還原至你在備份時的狀態。不過備份有一些限制。如果刪除執行個體,也會一併刪除備份。您無法備份單一資料庫或資料表。而且如果執行個體所在的地區無法使用,即使您身在可用的地區,也無法透過備份還原執行個體。 時間點復原可協助您將執行個體復原至特定時間點的狀態。舉例來說,如果因錯誤導致資料遺失,您可以將資料庫復原為發生錯誤之前的狀態。時間點復原功能一律會建立新的執行個體;您無法對現有執行個體執行時間點復原。 匯出所需的時間較長,因為會在 Cloud Storage 建立外部檔案,讓您用來重新建立資料。即使刪除執行個體,也不會影響到匯出的資料。此外,您只能匯出單一資料庫或資料表,視您選擇的匯出格式而定。 |
計算交易 (二進位) 記錄保留空間的大小。 | 資料庫的寫入活動量高,可能會產生大量交易 (二進位) 記錄,進而耗用大量磁碟空間,並導致啟用自動增加儲存空間功能的執行個體磁碟空間增加。建議您將執行個體儲存空間的大小設為交易記錄保留量。 |
避免意外刪除執行個體和備份。 | 您在 Google Cloud 控制台或透過 Terraform 建立的 Cloud SQL 執行個體,預設會啟用防止意外刪除功能。 使用 Cloud SQL 中的匯出功能,匯出資料以便進一步保護。搭配使用 Cloud Scheduler 和 REST API,自動管理匯出作業。如要處理更進階的情況,請使用 Cloud Scheduler 搭配 Cloud Run 函式進行自動化。 |
調整及監控
調整及監控資料庫執行個體,有助於減少或避免與真空相關的問題。
VACUUM
作業有不同變化版本,鎖定層級也不同:標準 VACUUM
和 VACUUM FULL
。VACUUM FULL
選項可回收更多磁碟空間,但會鎖定表格並導致執行速度變慢。請改用 VACUUM
的標準表單,這樣就能與實際工作環境資料庫作業並行執行。使用 VACUUM
作業時,SELECT, INSERT, UPDATE, and DELETE
等指令仍會照常運作。在進行資料清除作業時,您無法使用 ALTER TABLE
等指令修改資料表定義。
以下提供一些建議,或許有助於縮短完成 VACUUM
作業所需的時間:
- 增加系統記憶體和
maintenance_work_mem
。這樣一來,系統就能在每次迭代中批次更多元組,並盡可能快速完成工作。請注意,當 autovacuum 執行時,系統最多可能會分配autovacuum_max_workers
倍的記憶體,因此請勿將預設值設得太高。 VACUUM
作業會產生大量預寫記錄 (WAL) 記錄。如果可以減少 WAL 記錄的數量 (例如,不為這個例項設定任何備援資源),作業就會更快完成。- 如果資料表已達到兩十億筆交易 ID 上限,因為沒有任何元組已凍結,請嘗試減少單一使用者模式中的工作量。其中一個可能的選項是設定
vacuum_freeze_min_age=1,000,000,000
(允許的最大值,比預設值 50,000,000 還要高)。這個新值可將凍結的元組數量減少至兩次。 - PostgreSQL 12.0 以上版本支援清理和
VACUUM
作業,但不清理索引項目。這點非常重要,因為清理索引需要完整的索引掃描作業,如果有多個索引,則總時間取決於索引大小。 - 較大的索引會耗費大量時間進行索引掃描,因此建議使用
INDEX_CLEANUP OFF
快速清理及凍結表格資料。12.0 之前的 PostgreSQL 版本需要調整索引數量。也就是說,如果有非必要的索引,建議您刪除NON-CRITICAL
索引,以便加快真空操作。