常見的最佳做法

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

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

執行個體設定與管理

最佳做法 更多資訊
請詳讀並遵守操作指南,確保您的執行個體在 Cloud SQL 服務水準協議的涵蓋範圍內。
設定主要執行個體的維護期間,以便控制發生中斷型更新的時間。 請參閱維護期間
如果您會定期刪除和重新建立執行個體,請使用執行個體 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 控制台中監控這兩項指標,請參閱「指標」一文。

設定 SQL Server 設定,讓其與 Cloud SQL 搭配使用時發揮最佳效能。 請參閱「SQL Server 設定」。
針對測試執行作業進行最佳調整。 下表列出適合測試執行的設定值。
  • vCPU:40
  • 記憶體:262144 MB
  • MAXDOP:8
  • 平行處理費用門檻:120
  • tempdb 檔案:8。預先設定大小,以免自動成長。
  • 使用者資料庫檔案:Autogrow 設定為 64-128 MB。預先設定大小,以免發生自動成長情形。
  • 儲存空間:>= 4TB 可提供最佳 IOPS
在部署 SQL Server 前,請先判斷 I/O 子系統的容量。

測試各種 I/O 類型和大小。從 SQL Server 發送至永久磁碟儲存空間的 I/O 大小會影響 IOPS 和處理量。當 SQL Server 工作負載達到 IOPS 上限或吞吐量上限時,系統會降低工作負載。Cloud SQL 使用的儲存類型為 SSD 永久磁碟,適合高效能企業級工作負載。

如要自訂 VM 以盡可能提升效能,請按照下列步驟操作:

  • 磁碟大小為 4 TB 以上可提供更高的總處理量和 IOPS。
  • 越高的 vCPU 可提供更多 IOPS 和總處理量。使用較多 vCPU 時,請監控資料庫等待並行處理的情況,因為這可能也會增加。
  • 為獲得最佳效能,請並行發出 I/O,以達到更高的 I/O 佇列深度。
避免索引過於分散或缺少索引。 視資料變更頻率而定,重新整理索引或設定排程來重建索引。此外,請設定適當的填充因子,以減少碎片化。監控 SQL Server,找出可能有助於提升效能的缺少索引
定期更新統計資料。 如果統計資料過時,SQL 查詢最佳化工具可能會產生不理想的查詢計畫。 更新統計資料,尤其是在大量資料變更後。使用查詢儲存庫監控及排解 SQL Server 的查詢計畫不佳問題。
避免資料庫檔案不必要地變大。

請以 MB 為單位設定 autogrow,而非以百分比為單位,並使用符合需求的增量值。此外,請在自動成長功能啟用前主動管理成長。

此外,請確認已啟用 Cloud SQL 的「啟用自動增加儲存空間」功能,以便在資料庫和執行個體的儲存空間用盡時,Cloud SQL 可增加儲存空間。

每週至少執行一次 DBCC CHECKDB,以便偵測資料庫完整性問題。 DBCC CHECKDB 會檢查資料庫中所有物件的完整性。每週執行 DBCC CHECKDB,可確保資料庫不會毀損。DBCC CHECKDB 是會占用大量資源的作業,可能會影響執行個體的效能。
請勿在正式伺服器上執行 DBCC CHECKDB
建議您使用下列其中一個選項,不要在正式版伺服器上執行 DBCC CHECKDB
  • 複製資料庫,並在複製資料庫上執行 DBCC CHECKDB
  • 將備份還原至其他執行個體,然後在已還原的執行個體資料庫上執行 DBCC CHECKDB。如要進一步瞭解如何還原執行個體,請參閱「還原執行個體」。

使用下列程式碼片段,在資料庫上執行 DBCC CHECKDB

  • (建議做法) 使用 EXTENDED_LOGICAL_CHECKS 執行 DBCC CHECKDB。這是一項全面但耗用資源較多的檢查。
          USE DATABASE_NAME
          DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS,
          DATA_PURITY,NO_INFOMSGS, ALL_ERRORMSGS
          
  • 使用 PHYSICAL_ONLY 執行 DBCC CHECKDB
          USE DATABASE_NAME
          DBCC CHECKDB WITH PHYSICAL_ONLY,
          NO_INFOMSGS, ALL_ERRORMSGS
          

安全性

最佳做法 更多資訊
偏好使用私人 IP 除非需要公開 IP 存取權,否則建議使用私人 IP。這有助於盡量減少資料庫的未經授權網路連線。
避免在授權網路中使用 0.0.0.0/0 請勿將 0.0.0.0/0 納入「已授權的網路」,因為這會允許來自全球網際網路的存取權,且不受任何限制。
避免使用過大的授權網路 請勿在授權網路中使用較小的 CIDR 前置字串,因為這會允許來自可能過多主機的存取權。建議 CIDR 前置詞不得小於 /16,最好大於 /19。

資料架構

最佳做法 更多資訊
盡可能將大型執行個體分割為較小的執行個體。 請盡量使用多個小型 Cloud SQL 執行個體,效果會比使用單個大型的執行個體更好。大型的單體式執行個體在管理上會比多個小型執行個體更困難。
請勿使用過多的資料庫資料表。

請將執行個體的表格數量控制在 10,000 以下。資料庫資料表過多可能會影響資料庫升級時間。

資料庫拼字檢查 無論您是要安裝新的 SQL Server 例項、還原資料庫備份,還是將伺服器連結至用戶端資料庫,都必須瞭解所用資料的語言代碼需求、排序順序,以及大小寫和重音符號的敏感度。為伺服器、資料庫、資料欄或運算式選取對照項目時,您會為資料指派特定特性。這些特性會影響資料庫中許多作業的結果。舉例來說,當您使用 ORDER BY 建構查詢時,結果集的排序順序可能會取決於套用至資料庫的排序或查詢運算式層級的 COLLATE 子句所指定的排序。進一步瞭解資料庫排序和萬國碼支援
查詢設計 為獲得最佳資料庫或查詢效能,請確保在同一個查詢中不使用大量的資料表 (十六個以上)。
查詢監控 查詢的效能可能會隨時間下降。請務必持續監控應用程式和查詢效能。造成這種降級情形的原因之一是雜湊退出
遞迴雜湊彙整或雜湊退出會導致伺服器效能降低。如果在追蹤記錄中看到許多 hash 警告事件,請更新要彙整的資料欄統計資料。進一步瞭解雜湊退出

應用程式實作

最佳做法 更多資訊
使用適合的連線管理做法,例如連線集區和指數輪詢。 使用這些技術可改善應用程式的資源運用,也有助於遵守 Cloud SQL 連線限制。如需詳細資訊和程式碼範例,請參閱「管理資料庫連線」一文。
測試應用程式對維護更新的回應,更新在維護期間隨時可能會發生。 請嘗試使用自助式維護功能模擬維護更新。在維護期間,執行個體會在短時間內無法使用,且現有的連線會中斷。測試維護功能的推出作業,有助您進一步瞭解應用程式如何處理預定維護作業,以及系統復原的速度。
測試應用程式對容錯移轉的回應,容錯移轉隨時可能發生。 您可以使用 Google Cloud 控制台、gcloud CLI 或 API 手動啟動容錯移轉。請參閱「啟動容錯移轉」。
避免進行大量交易。 盡量維持小型簡短交易。如果需要更新大型資料庫,請分成多項小型交易進行,而非進行單次的大型交易。
如果使用的是 Cloud SQL 驗證 Proxy,請務必使用最新版本。 請參閱保持 Cloud SQL 驗證 Proxy 為最新版本

資料匯入與匯出

最佳做法 更多資訊
加速匯入小型執行個體。 針對較小的執行個體,您可以暫時增加執行個體的 CPU 和 RAM,以改善匯入大型資料集時的效能。
如果您要匯出資料以匯入至 Cloud SQL,請務必採用正確程序。 請參閱 從外部代管的資料庫伺服器匯出資料一文。

備份與還原

最佳做法 更多資訊
使用合適的 Cloud SQL 功能保護您的資料。

備份和匯出是提供資料備援和資料保護的兩種方式。這兩種方式可在不同情境下各自提供保護,在健全的資料保護策略中下,兩者相輔相成。

建立備份既輕鬆又快速,能夠將執行個體上的資料還原至你在備份時的狀態。不過備份有一些限制。如果刪除執行個體,也會一併刪除備份。您無法備份單一資料庫或資料表。而且如果執行個體所在的地區無法使用,即使您身在可用的地區,也無法透過備份還原執行個體。

匯出所需的時間較長,因為會在 Cloud Storage 建立外部檔案,讓您用來重新建立資料。即使刪除執行個體,也不會影響到匯出的資料。此外,您只能匯出單一資料庫或資料表,視您選擇的匯出格式而定。

在 Enterprise 或 Standard SQL Server 執行個體上使用匯出備份功能時,請勿建立 GZ 封存檔,因為這會嘗試壓縮 SQL Server 已原生壓縮的備份。

避免意外刪除執行個體和備份。

您在 Google Cloud 控制台或透過 Terraform 建立的 Cloud SQL 執行個體,預設會啟用防止意外刪除功能。

使用 Cloud SQL 中的匯出功能,匯出資料以便進一步保護。搭配使用 Cloud Scheduler 和 REST API,自動管理匯出作業。如要處理更進階的情況,請使用 Cloud Scheduler 搭配 Cloud Run 函式進行自動化。

SQL Server 設定

建議在 Cloud SQL 中使用部分 SQL Server 設定。下列主題說明一些建議。

全域設定

設定 建議
max worker threads 保留預設值 0。這項設定會根據 CPU 數量,定義 SQL Server 可用的執行緒數量。這個值會在 SQL Server 引擎啟動時自動計算。
max server memory (MB)

這個標記會限制 Cloud SQL 可為其內部集區分配的記憶體量。

如果您未為此標記設定值,Cloud SQL 會根據執行個體的 RAM 大小自動管理這個值。此外,如果您調整執行個體大小,Cloud SQL 會自動調整標記的值,以符合我們建議的新執行個體大小。

強烈建議您不要為執行個體指定這項旗標的值。如果您將值設為大於 80%,可能會因為記憶體不足而導致不穩定、效能降低和資料庫當機。

如果您想自行管理這個標記的值,請手動設定。因此,Cloud SQL 會停用自動管理功能。如果您要調整執行個體大小,請考慮重新檢查值,以便符合新大小的建議值。

建議您使用下列公式設定
max server memory 資料庫標記:

  • 為作業系統和代理程式保留 1.4 GB 記憶體。
  • 如果伺服器的 RAM 小於或等於 16 GB,請為每 4 GB RAM 保留 1 GB 的記憶體。
  • 如果伺服器的 RAM 大於 16 GB,請保留 4 GB 記憶體,並為每 8 GB 的 RAM (大於 16 GB) 保留 1 GB 記憶體。

舉例來說,如果執行個體的 RAM 為 104 GB
(106496 MB),請預留:

  • 系統和代理程式需要1.4 GB 的記憶體
  • 4 GB 記憶體,因為 104 GB 大於 16 GB
  • 11 GB 記憶體,因為 104 GB 的 RAM 大於 16 GB (104-16=88),而 88 除以 8 等於 11

在這個範例中,您必須保留 16.4 GB 的記憶體。因此,請針對此旗標的值指定 89702 MB
[(104-16.4) * 1024 = 89702]。

下表列出幾種熱門虛擬機器 (VM) 等級的建議值和總 RAM 百分比:

執行個體級別 (MB) 伺服器記憶體用量上限 (MB) % (總計)
3840 1440 37
4096 1632 39
5792 2912 50
8192 4704 57
11584 7248 62
16384 10848 66
23168 16800 72
32768 25200 76
46336 37072 80
65568 53888 82
92704 77648 83
131136 111248 84
185440 158784 85
262272 226000 86
370880 321056 86
524544 455488 86
741792 645600 87

如要監控執行個體的記憶體用量,請使用下列指標

  • database/memory/usage
  • database/sqlserver/memory/buffer_cache_hit_ratio
  • database/sqlserver/memory/memory_grants_pending
  • database/sqlserver/memory/page_life_expectancy

詳情請參閱「監控 Cloud SQL 執行個體」。

要修改的資料庫設定

為確保 SQL Server 資料庫的最佳效能,請按照下列建議設定下列 SQL Server 設定

設定 建議
cost threshold for parallelism

這是 SQL 最佳化工具使用並行處理方式執行查詢的門檻。5 的預設值可能會導致並行執行的查詢過多,進而增加並行執行緒的資料庫等待時間。如要減少這類爭用情形,請提高該值。

maxdop 設為 1 時,系統會忽略這個值。

max degree of parallelism (MAXDOP)

如要減少因並行處理而造成的資料庫等待時間,請根據可用的邏輯處理器數量,調整這個值的建議值。如果將這個選項設為 1,請務必謹慎評估成效。

optimize for ad hoc workloads

避免在方案快取中放入大量一次性方案。如要針對含有許多一次性臨時批次作業的工作負載,提升其方案快取效率,請將這個選項設為 1

tempdb

預先設定 tempdb 的大小,這樣就不需要自動調整大小。tempdb 中的所有檔案應具有相同的大小,且具有相同的檔案成長集。

tempdb 爭用情況的資料庫等待類型會顯示為 PAGELATCH_UP。如要減少競爭,請新增更多檔案。

如果處理器數量小於或等於 8,請使用與邏輯處理器相同數量的檔案。如果處理器數量超過 8,請使用 8 個資料檔案。如果爭用情形持續發生,請以 4 的倍數增加檔案數量,直到爭用情形消除為止。

視工作負載而定,您可能也需要修改下列設定。

設定 建議
Close Cursor on Commit Enabled 預設值為 off,表示在您提交交易時,系統不會自動關閉游標。
Default Cursor 這個選項會控制在 T-SQL 程式碼中使用的游標範圍。如果您變更這項設定,請評估應用程式程式碼是否有任何不良影響。
Page Verify 這個選項可讓 SQL Server 在將資料庫頁面寫入磁碟前,計算該頁面的總和檢查碼,並將總和檢查碼儲存在頁面標頭中。再次讀取頁面時,系統會重新計算總和檢查碼,以驗證頁面的完整性。建議值為 checksum
Parameterization 預設值為 simple。簡易參數化可讓 SQL Server 使用參數取代查詢中的常值。Microsoft 提供指南,說明如何變更這個值,並搭配規劃指南使用。

要保留的資料庫設定

為確保 SQL Server 資料庫的最佳效能,請保留下列 SQL Server 設定的預設值。

設定 要保留的預設值
Auto Close False。開啟這項設定後,系統會開啟及關閉連線,並在每次連線後刷新程序。這可能會導致經常存取的資料庫效能降低。
Auto Shrink False。啟用後可能會導致資料庫和索引分割及其他效能問題,其中部分問題已在 這篇 SQL Server 網誌文章中討論。
Date Correlation Optimization Enabled False。啟用這項功能後,最佳化工具就能在兩個相關資料表之間找出日期之間的關係,並進行最佳化。在 SQL Server 中追蹤這項資訊會產生一些效能額外負荷。
Legacy Cardinality Estimation False。在某些情況下,啟用這項設定後,SQL Server 無法準確計算基數。
Parameter Sniffing ON:從資料庫表格嗅探參數,有助於建立可重複使用的執行計畫。如果資料表的資料分布不均,產生的執行計畫可能會導致效能問題。針對這類資料,請使用 查詢儲存庫中的其他選項,而非修改這項設定。
Query Optimizer Fixes False。啟用後,可能會影響 SQL Server 基數估算器的效能。如果您選擇啟用,請進行測試,確保不會發生查詢回歸。
Auto Create Statistics True。這個選項可讓 SQL Server 建立單欄統計資料,進而改善查詢計畫的基數預估值。
Auto Update Statistics True。這個選項可讓 SQL Server 使用以表卡度為依據的重新編譯閾值,更新過時的統計資料。
Auto Update Statistics Asynchronously False。啟用此選項後,SQL 查詢最佳化工具會使用目前查詢執行作業的過時統計資料,同時以非同步方式更新統計資料,以利日後的工作負載。

不過,如果您希望經常執行的查詢有可預測的回應時間,或是應用程式在等待統計資料更新時經常發生用戶端要求逾時的情形,建議您啟用這個選項並停用 Auto Update Statistics

Target Recovery Time (Seconds) 60。這項設定會根據緩衝區集區,將髒頁刷到磁碟的頻率,為資料庫的復原時間建立上限。對於交易量高的作業負載,如果這個設定的值較低,且儲存空間 IOPS 接近最大值,就可能導致效能瓶頸。

追蹤記錄旗標設定

SQL Server 中的追蹤記錄旗標可用於設定特定特性、變更 SQL Server 資料庫的行為,或偵錯 SQL Server 中的問題。

Cloud SQL 支援部分 SQL Server 追蹤記錄旗標,可使用資料庫旗標設定。建議設定如下。

追蹤標記 建議
1204 Yes,但工作負載密集的伺服器會產生許多死結。

傳回參與死結的資源和鎖定類型,以及目前受影響的指令。
1222 Yes,但工作負載密集的伺服器會產生許多死結。
1224 No。這可能會導致記憶體用量增加,並對資料庫造成記憶體壓力。
2528 No. 物件的平行檢查是預設值,也是建議的做法。資料庫引擎會自動計算平行處理程度。
3205 No。備份用的磁帶機為 SQL Server 適用的 Cloud SQL 功能。
3226 No,除非您需要頻繁備份 (例如備份記錄檔)。
3625 No。由於根帳戶沒有系統管理員存取權,因此可能無法顯示所有錯誤訊息。
4199 No。這會影響基數估算器,並可能導致查詢回歸。
4616 No。這項限制會降低應用程式角色的安全性。需要根據應用程式需求進行驗證。
7806 Yes. 如果資料庫伺服器停止回應,專屬管理員連線 (DAC) 可能是唯一可用於進行診斷連線的方式。