常見的最佳做法

本頁面提供最佳做法,有助您實現 Cloud SQL 的最佳效能、耐用性和可用性。

如果 Cloud SQL 執行個體發生問題,請在疑難排解期間查看下列事項:

執行個體設定與管理

最佳做法 更多資訊
請詳讀並遵守操作指南,確保您的執行個體在 Cloud SQL 服務水準協議的涵蓋範圍內。
設定主要執行個體的維護期間,以便控制發生中斷型更新的時間。 請參閱維護期間
如果是需要讀取大量資料的工作負載,請新增唯讀備用資源,以分擔主要執行個體的流量。 您也可以選擇使用 HAProxy 等負載平衡器來管理流往備用資源的流量。
如果您會定期刪除和重新建立執行個體,請使用執行個體 ID 中的時間戳記來提高新執行個體 ID 可用的可能性。
前一項作業完成之前,請勿開始進行管理作業。

Cloud SQL 執行個體要待到完成前一項作業後,才能接受新的作業要求。如果試圖提前啟動新作業,作業要求會失敗。重新啟動執行個體也包含在內。

Google Cloud 主控台中的執行個體狀態無法反映作業是否正在執行。綠色勾號只代表執行個體的狀態為 RUNNABLE。如要查看是否正在執行作業,請前往「Operations」(作業)分頁查看最新的作業狀態。

設定儲存空間,以便進行重要資料庫維護作業。

如果啟用自動增加儲存空間的執行個體設定已停用,或是已啟用自動增加儲存空間限制,請務必至少保留 20% 的可用空間,以便 Cloud SQL 執行任何重要的資料庫維護作業。

如要接收可用磁碟空間低於 20% 的警報,請為「磁碟使用率」指標建立以指標為基礎的警報政策,並將「門檻位置」設為「高於門檻」,值為 .8。詳情請參閱「建立以指標為基礎的警告政策」。

避免 CPU 使用率超載。

您可以在 Google Cloud 控制台的執行個體詳細資料頁面中,查看執行個體使用的可用 CPU 百分比。詳情請參閱「指標」一文。您也可以建立指標門檻快訊政策,監控 CPU 用量,並在達到指定門檻時收到快訊通知。

為避免 CPU 使用率過高,您可以增加執行個體的 CPU 數量。變更 CPU 需要重新啟動執行個體。如果執行個體已達 CPU 數量上限,您必須將資料庫分割成多個執行個體。

避免記憶體耗盡。

如要查看記憶體耗盡的跡象,請主要使用「用量」指標。為避免記憶體不足錯誤,建議您將這個指標保持在 90% 以下。

您也可以使用 total_usage 指標,查看 Cloud SQL 執行個體使用的可用記憶體百分比,包括資料庫容器使用的記憶體,以及作業系統快取所分配的記憶體。

觀察這兩項指標的差異,即可瞭解程序與作業系統快取使用了多少記憶體。您可以重新利用此快取中的記憶體。

如要預測記憶體不足的問題,請同時查看並解讀這些指標。如果指標顯示過高,表示執行個體的記憶體可能不足。這可能是因為自訂設定、執行個體不敷工作負載需求,或是上述因素的組合所致。

調整 Cloud SQL 執行個體,以增加記憶體容量。 變更執行個體的記憶體大小時,必須重新啟動執行個體。如果執行個體已達到記憶體大小上限,您必須將資料庫分割成多個執行個體。如要進一步瞭解如何在 Google Cloud 控制台中監控這兩項指標,請參閱「指標」一文。

請確認您的執行個體具有最佳交易 ID。

您可以將 Resource Type 設為 Cloud SQL Database,並將 Metric 設為 Percentage of instance's transaction IDs consumed,在 Google Cloud 主控台的「Metrics Explorer」頁面中查看執行個體的交易 ID 用量。詳情請參閱「使用 Metrics Explorer 建立圖表」。

調整及監控資料庫執行個體,有助於減少或避免與真空相關的問題。監控執行個體的交易 ID 用量,並根據執行個體的工作負載啟用及調整 autovacuum 參數。詳情請參閱「克服交易 ID (TXID) 環繞 (wraparound) 防護錯誤」。

安全性

最佳做法 更多資訊
偏好使用私人 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 作業有不同變化版本,鎖定層級也不同:標準 VACUUMVACUUM FULLVACUUM 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 索引,以便加快真空操作。