本頁面提供最佳做法,有助您實現 Cloud SQL 的最佳效能、耐用性和可用性。
如果 Cloud SQL 執行個體發生問題,請在排解問題時查看下列項目:
執行個體設定與管理
最佳做法 | 更多資訊 |
---|---|
請詳讀並遵守操作指南,以確保您的執行個體在 Cloud SQL 服務水準協議的涵蓋範圍內。 | |
設定主要執行個體的維護期間,以便控制發生中斷型更新的時間。 | 請參閱維護期間。 |
如果您會定期刪除和重新建立執行個體,請使用執行個體 ID 中的時間戳記來提高新執行個體 ID 可用的可能性。 | |
前一項作業完成之前,請勿開始進行管理作業。 |
Cloud SQL 執行個體要待到完成前一項作業後,才能接受新的作業要求。如果試圖提前啟動新作業,作業要求會失敗。重新啟動執行個體也包含在內。
Google Cloud 主控台中的執行個體狀態不會顯示作業是否正在執行。綠色勾號只代表執行個體的狀態為 |
設定儲存空間,以因應重要的資料庫維護作業。 |
如果停用「enable automatic storage increases」(啟用自動增加儲存空間) 執行個體設定,或啟用「automatic storage increase limit」(自動增加儲存空間上限),請確保至少有 20% 的可用空間,以便容納 Cloud SQL 可能執行的任何重要資料庫維護作業。 如要在可用磁碟空間低於 20% 時收到警告,請為「磁碟使用率」指標建立以指標為基礎的警告政策,並將「高於門檻」位置的值設為「0.8」。詳情請參閱「建立以指標為基礎的快訊政策」。 |
避免 CPU 使用率過高。 |
您可以在 Google Cloud 控制台的執行個體詳細資料頁面,查看執行個體使用的可用 CPU 百分比。詳情請參閱「指標」。您也可以使用「建立指標門檻快訊政策」監控 CPU 使用率,並在達到指定門檻時接收快訊。 為避免過度使用,您可以增加執行個體的 CPU 數量。變更 CPU 需要重新啟動執行個體。如果執行個體已達 CPU 數量上限,則必須將資料庫分片至多個執行個體。 |
避免記憶體耗盡。 |
如要尋找記憶體耗盡的跡象,主要應使用「用量」指標。為避免記憶體不足錯誤,建議這個指標維持在 90% 以下。 您也可以使用 total_usage 指標,觀察 Cloud SQL 執行個體使用的可用記憶體百分比,包括資料庫容器使用的記憶體,以及作業系統快取分配的記憶體。 觀察這兩項指標的差異,即可判斷程序使用的記憶體量,以及作業系統快取使用的記憶體量。您可以在這個快取中重新利用記憶體。 如要預測記憶體不足問題,請同時檢查這兩項指標並一起解讀。如果指標顯示高值,執行個體可能記憶體不足。這可能是因為自訂設定、執行個體大小不符工作負載,或這些因素的組合所致。 調度 Cloud SQL 執行個體資源,增加記憶體大小。 變更執行個體的記憶體大小需要重新啟動執行個體。 如果執行個體已達記憶體大小上限,您必須將資料庫分片到多個執行個體。如要進一步瞭解如何在 Google Cloud 控制台中監控這兩項指標,請參閱「指標」一文。 |
設定 SQL Server,確保在 Cloud SQL 中發揮最佳效能。 | 請參閱 SQL Server 設定。 |
針對測試執行程序,以最佳方式調整執行個體。 | 下表列出適合測試執行的設定值。
|
部署 SQL Server 前,請先判斷 I/O 子系統的容量。 | 測試各種 I/O 類型和大小。從 SQL Server 發送至永久磁碟儲存空間的 I/O 大小,會影響 IOPS 和總處理量。SQL Server 工作負載達到 IOPS 上限或輸送量上限時,就會受到節流。Cloud SQL 使用的儲存空間類型為永久磁碟 SSD,適合用於高效能的企業級工作負載。 請按照下列步驟自訂 VM,盡可能提升效能:
|
避免索引過於分散和缺少索引。 | 視資料變更頻率而定,重新整理索引或設定排程來重建索引。此外,請設定適當的填滿因數,以減少片段化。監控 SQL Server 是否有缺少的索引,這些索引可能有助於提升效能。 |
定期更新統計資料。 | 如果統計資料過時,SQL 查詢最佳化工具可能會產生次佳的查詢計畫。 更新統計資料,尤其是在大量資料變更後。使用查詢存放區監控及排解 SQL Server 的問題,這類伺服器有查詢計畫不盡理想的情況。 |
避免資料庫檔案變得過大。 |
以 MB 為單位設定 此外,請務必啟用 Cloud SQL 的「啟用自動增加儲存空間」功能,這樣一來,如果資料庫和執行個體空間不足,Cloud SQL 就能增加儲存空間。 |
每週至少執行一次
DBCC CHECKDB
,偵測資料庫完整性問題。
|
DBCC CHECKDB 會檢查資料庫中所有物件的完整性。
每週執行 DBCC CHECKDB ,確保資料庫沒有損毀。
DBCC CHECKDB 是耗用大量資源的作業,可能會影響執行個體的效能。請勿在正式伺服器上執行 DBCC CHECKDB 。建議您改用下列任一選項,不要在正式伺服器上執行 DBCC CHECKDB :
使用下列程式碼片段在資料庫上執行
|
發揮最大效能
如要確保資料安全無虞,並讓應用程式透過記憶體內 OLTP 資料表順暢運作,請考慮採用下列最佳做法:
最佳做法 | 更多資訊 |
---|---|
遵循記憶體最佳化資料表的 Microsoft 最佳做法 |
如要進一步瞭解限制,請參閱不支援的 SQL Server 記憶體內 OLTP 功能。 |
安全性
最佳做法 | 更多資訊 |
---|---|
偏好使用私人 IP | 除非需要公開 IP 存取權,否則建議使用私人 IP。這有助於盡量減少未經授權的網路連線連至資料庫。 |
避免在授權網路中使用 0.0.0.0/0 | 請避免在「已授權的網路」中加入 0.0.0.0/0,因為這樣會允許從全球網際網路無限制地存取。 |
避免授權網路過大 | 請避免在「授權網路」中使用小型 CIDR 前置字串,因為這可能會允許過多的主機存取。建議使用不小於 /16 的 CIDR 前置字元,最好大於 /19。 |
資料架構
最佳做法 | 更多資訊 |
---|---|
盡可能將大型執行個體分割為較小的執行個體。 | 請盡量使用多個小型 Cloud SQL 執行個體,效果會比使用單個大型的執行個體更好。大型單體式執行個體在管理上會比多個小型執行個體更困難。 |
請勿使用過多的資料庫資料表。 |
請將執行個體的表格數量控制在 10,000 個以下。資料庫資料表過多,會影響資料庫升級時間。 |
資料庫定序 |
無論是安裝新的 SQL Server 執行個體、還原資料庫備份,還是將伺服器連線至用戶端資料庫,瞭解所用資料的語言環境需求、排序順序,以及大小寫和重音符號的區分方式,都非常重要。為伺服器、資料庫、資料欄或運算式選取定序時,您會為資料指派特定特徵。這些特徵會影響資料庫中許多作業的結果。舉例來說,當您使用 ORDER BY 建構查詢時,結果集的排序順序可能取決於套用至資料庫的對照順序,或查詢運算式層級的 COLLATE 子句中指定的對照順序。進一步瞭解資料庫排序規則和 Unicode 支援。 |
查詢設計 | 為獲得最佳資料庫或查詢效能,請確保您未在同一個查詢中使用大量資料表 (十六個以上)。 |
查詢監控 |
查詢品質可能會隨時間下降。請務必持續監控應用程式和查詢效能。造成這類效能下降的原因之一是雜湊值脫逃。 遞迴雜湊聯結或雜湊救援會導致伺服器效能降低。如果追蹤記錄中出現許多雜湊警告事件,請更新要聯結的資料欄統計資料。進一步瞭解雜湊救援。 |
應用程式實作
最佳做法 | 更多資訊 |
---|---|
使用適合的連線管理做法,例如連線集區和指數輪詢。 | 使用這些技術可改善應用程式的資源運用,也有助於遵守 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 functions 進行自動化。 |
SQL Server 設定
建議您為 Cloud SQL 採用部分 SQL Server 設定。下列主題說明一些建議。
全域設定
設定 | 建議 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
max worker threads
|
保留預設值 0。這項設定會根據 CPU 數量,定義 SQL Server 可用的執行緒數量。這個值會在啟動時由 SQL Server 引擎自動計算。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
max server memory (mb)
|
這個標記會限制 Cloud SQL 可為內部集區分配的記憶體量。 建議您讓 Cloud SQL 管理這個旗標的值。如果必須手動管理這個值,請使用本節稍後說明的公式。 如果您未設定這個旗標的值,Cloud SQL 會根據執行個體的 RAM 大小自動管理值。如果您未設定旗標值,且調整執行個體大小,Cloud SQL 會自動調整旗標值,以符合新執行個體大小的建議。這項調整大小作業也會移除此標記的所有手動設定值。這有助於資料庫更有效率地運用資源,避免過度分配資源、減少因記憶體不足而當機的可能性,以及避免執行個體效能下滑。 如要管理這個旗標的值,請手動設定。因此,Cloud SQL 會停用自動管理功能。如果調整執行個體大小,系統會捨棄手動輸入的值。調整執行個體大小會重新啟用自動標記管理功能。如果要在調整大小後手動控制旗標值,請輸入新值來重新啟用手動控制。建議您重新調整值,以符合新尺寸的建議值。 如果必須手動管理旗標的值,建議使用下列公式設定
舉例來說,如果執行個體的 RAM 為 104 GB
在本例中,您必須保留 16.4 GB 的記憶體。因此,請為這個標記指定 下表列出一些熱門虛擬機器 (VM) 層級的建議值和總 RAM 百分比:
如要監控執行個體的記憶體用量,請使用下列指標:
詳情請參閱「監控 Cloud SQL 執行個體」。 |
要修改的資料庫設定
為確保 SQL Server 資料庫效能最佳化,請按照下列建議設定 SQL Server 設定。
設定 | 建議 |
---|---|
cost threshold for parallelism |
這是 SQL 最佳化工具使用平行處理執行查詢的門檻。 如果 |
max degree of parallelism (MAXDOP) |
如要減少因平行處理而導致的資料庫等待時間,請根據有關可用邏輯處理器數量的特定建議調整這個值。如果將這個選項設為 1,請仔細評估成效。 |
optimize for ad hoc workloads |
避免方案快取中出現大量一次性方案。
如要提升含有許多一次性臨時批次作業的工作負載的方案快取效率,請將這個選項設為 |
tempdb |
預先設定
如果處理器數量小於或等於 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 查詢最佳化工具會使用目前查詢執行的過時統計資料,同時非同步更新統計資料,以利日後的工作負載。
不過,如果您預期經常執行的查詢會有可預測的回應時間,或應用程式在等待統計資料更新時,經常發生用戶端要求逾時的情況,請考慮啟用這個選項並停用 |
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 ,除非您需要頻繁備份,例如 TLOG 備份。
|
3625
|
No 。由於根帳戶沒有系統管理員存取權,可能無法查看所有錯誤訊息。
|
4199
|
No 。這會影響基數估算器,並導致查詢回歸。
|
4616
|
No 。這項限制會降低應用程式角色的安全性。必須根據應用程式需求進行驗證。
|
7806
|
Yes 。如果資料庫伺服器沒有回應,專屬的管理員連線 (DAC) 可能就是唯一能建立連線以進行診斷的方式。
|