MySQL 適用的 Cloud SQL 效能擷取功能可協助您診斷及解決 MySQL 資料庫中,因系統需求變化而導致的複雜和暫時性效能問題。隨著應用程式工作負載擴充,周邊基礎架構也日益複雜,資料庫會面臨越來越多無法預測的需求。這些外部系統壓力可能會導致資料庫速度變慢或停滯。
資料庫效能降低時,標準指標可能不足以識別大型基礎架構環境中的根本原因。效能擷取功能會在偵測到問題時,擷取資料庫的詳細時間點快照,解決這個問題。發生暫時性問題時,您可以使用可設定的觸發條件,擷取系統範圍的快照。觸發程序也能偵測長時間執行的交易,這可能是效能問題的根本原因。您可以設定觸發條件,自動結束長時間執行的交易。
應用實例
本節列出啟用例項的效能擷取功能後,可使用的用途範例。
| 用途 | 觸發條件 | 診斷洞察 |
|---|---|---|
| 由於復原記錄累積,導致系統全面變慢 | 記錄清單長度 | 如果讀取作業耗時過長,或資料操縱語言 (DML) 作業規模過大,導致 InnoDB 清除程序落後,系統就會發出警示。延遲可能會導致儲存空間壓力增加,並降低效能。 |
| 資料庫停滯 是由 內部引擎 爭用所致 | 信號燈等待 < | 有助於診斷無回應的資料庫。這個觸發條件可以偵測 InnoDB 儲存引擎中的互斥鎖或讀寫鎖爭用情形,例如自動調整雜湊索引 (AHI) 或緩衝區集區爭用。 |
| 應用程式層級的鎖定爭用或未建立索引的查詢 | 交易鎖定等待 | 當大量交易處於 LOCK WAIT 狀態時觸發,表示有列層級的爭用或長時間閒置的交易。 |
| 執行個體 因複雜排序或 彙整而過載 | CPU 使用率過高 | 擷取高容器 CPU 使用率期間的狀態,通常是由效率不彰的查詢或大量並行尖峰所導致。 |
| 因記憶體不足 (OOM) 而重新啟動的風險 | 記憶體用量偏高 | 協助您診斷問題,例如過大的每個執行緒緩衝區或記憶體洩漏,避免導致執行個體當機。 |
| 流量突然暴增或用戶端應用程式出現瓶頸 | 執行中的執行緒 | 執行個體負載的一般指標,有助於找出並行有效連線的突然激增情況。 |
| 由於寫入工作負載量大,副本上的資料過時 | 落後來源的秒數 | 監控唯讀副本的複製延遲時間,協助診斷從主要執行個體同步處理資料時的延遲問題。 |
| 長時間執行的查詢會封鎖清除作業 | 長時間執行的交易 | 識別開啟時間過長,可能持有重要鎖定的交易。此外,您也可以自動結束長時間執行的交易。 |
成效資料的擷取方式
效能擷取功能是代理程式型服務,可監控執行個體。啟用效能擷取功能後,Cloud SQL 執行個體會執行下列動作來擷取效能資料:
代理程式會探查執行個體設定,讀取您定義的門檻觸發條件。然後,代理程式會以可設定的間隔
probingIntervalSeconds探查執行個體的指標 (預設為 30 秒)。如果系統偵測到問題,且觸發條件的門檻已超過,代理程式會繼續將執行個體的即時狀態與規則進行比較。為避免因暫時性尖峰而觸發誤報,代理程式會擷取完整效能。只有在連續探測設定的
probeThreshold(預設為3) 時符合條件,才會觸發擷取作業。這個連續門檻可防止因暫時尖峰而擷取資料。舉例來說,如果代理程式連續三次偵測到執行緒數量偏高,就可能會觸發效能擷取作業。
如果設定多個觸發條件,只要符合任何一個條件,Cloud SQL 就會啟動擷取作業。
觸發擷取作業後,效能擷取功能會連線至資料庫,並執行一系列診斷指令來擷取詳細快照。
擷取的資訊會格式化為記錄檔項目,並直接傳送至專案的 Cloud Logging,供特定記錄檔串流 (名為
mysql-performance-capture.log) 下的 Cloud SQL 執行個體使用。
等待期和自動退避期
為避免記錄過多資料和系統負荷過重,效能擷取功能會在擷取後實作冷卻期。
標準冷卻時間
成功擷取後,效能擷取功能會啟動 30 分鐘的標準等待期。在這段期間,即使執行個體處於問題延長狀態,代理程式也不會觸發新的擷取作業。
自動調整冷卻和退避
如果執行個體針對同一違規事項重複觸發擷取作業,效能擷取作業就會使用自動調整冷卻時間退避機制。這個機制有助於限制記錄量,並降低設定錯誤的門檻所造成的成本。
這項機制會:
- 等待期會延長至 24 小時。
- 效能擷取會進入睡眠模式,暫停所有觸發檢查和診斷擷取作業。
- 每個執行個體每天只能擷取一次效能。
效能擷取觸發條件
本節列出可用於擷取 MySQL 效能的觸發條件。除非另有註明,否則表格中列出的所有觸發條件都會使用探針設定值 probingIntervalSeconds 和 probeThreshold,驗證持續觸發條件。
| 觸發條件 條件 名稱 | API 名稱 | 說明 | 預設 值 | 設定 範圍 |
|---|---|---|---|---|
| 高 CPU 使用率 |
cpuUtilizationThresholdPercent
|
當資料庫執行個體的整體 CPU 使用率持續超過這個百分比時,就會觸發擷取作業。這有助於偵測執行個體過載,通常是由於查詢效率不彰 (大量排序和彙整)、索引不足或並行程度過高所致。如要避免在小幅尖峰時段擷取資料,請將執行個體的預設值設為較高的百分比範圍。 | 0 (已停用)
|
0或 10-99 (%)
|
| 高記憶體用量 |
memoryUsageThresholdPercent
|
當資料庫容器的記憶體用量持續超過執行個體所分配記憶體的百分比時,就會觸發擷取作業。這項觸發程序有助於診斷潛在的記憶體不足問題、記憶體流失或記憶體設定效率不彰。為避免擷取微小的尖峰,請將執行個體的預設值設為範圍的較高值。 | 0 (已停用)
|
0或 10 - 99 (%)
|
| 暫存檔案用量過高 |
無法設定。系統會自動為 MySQL 8.0 以上版本啟用這項觸發程序。 | 當 MySQL 程序建立的暫時檔案導致磁碟用量大幅增加時,系統會自動觸發擷取作業。通常暫存檔案會遭到刪除,但仍由 MySQL 程序保持開啟狀態。 這個觸發條件的門檻採用差異門檻的漸進式升級模式。一開始為 100 GB,每次冷卻後會依序加倍,變成 200 GB、400 GB,最高可達 1.6 TB。使用漸進式升級模型時,只有在暫存檔用量差異大幅增加時,才會擷取效能。 |
已啟用 <0x | 不適用 <0x |
| 歷史記錄清單 長度 |
historyListLengthThresholdCount
|
當 InnoDB 歷記錄清單長度 (HLL) 超過設定值時,就會觸發擷取作業。如果 HLL 持續偏高,表示 InnoDB 清除程序無法跟上,且未清除的交易數量不斷增加,通常是因為交易執行時間過長。如果數量過多,可能會導致儲存空間用量增加,並造成效能問題。 這個門檻取決於工作負載。即使 HLL 持續偏高,部分執行個體仍可正常運作。不過,您仍可使用這項觸發條件,醒目顯示潛在問題,例如長時間執行的讀取作業、大型資料操縱語言 (DML) 陳述式,或清除執行緒瓶頸。 |
0 (已停用)
|
0或 10000-10000000
|
| 長時間執行的交易 |
transactionDurationThreshold
|
如果交易的執行時間超過設定的秒數,系統就會記錄交易。這項觸發條件有助於找出可能長時間持有鎖定或耗用過多資源的作業。 超過 transactionDurationThreshold的交易會在probingIntervalSeconds設定中指定的每個間隔後評估 (預設為 30 秒)。不過,為管理記錄量,系統最多每隔 cooldown period (30 分鐘) 會將最多 10 筆這類長時間執行的交易詳細資料傳送至 Cloud Logging。每個前 10 大交易的記錄項目中,都會包含最多 1024 位元組的完整查詢文字 (來自 INFORMATION_SCHEMA.INNODB_TRX)。 |
3600 (秒)
<0 |
60 以上
<0x |
| 副本 SQL/IO 執行緒錯誤 |
無法設定。 這項觸發條件預設會在所有副本執行個體上自動啟用,且無法停用。 | 如果備用資源執行個體上的複製 SQL 執行緒或 IO 執行緒發生任何錯誤並停止,系統會立即觸發擷取作業。這個觸發程序對於維護副本完整性及找出複製失敗情形至關重要。 這個觸發條件不會使用任何探查 設定,例如 probingIntervalseconds 或
probeThreshold,來驗證效能擷取條件。 |
已啟用 <0x | 不適用 <0x |
| 執行中的執行緒 < | runningThreadsThreshold
|
當根據 threads_running 狀態變數執行的有效執行緒數量超過指定值時,就會觸發擷取作業。舉例來說,如果運作中的執行緒數量超過 100,您可能會設定門檻來執行效能擷取作業。如要擷取效能,必須使用這個觸發條件。如未明確設定此觸發條件,系統會根據執行個體所屬的 vCPU 數量計算預設值。 |
MIN(600,
cpuCount * 20)
|
10 以上
|
| 落後來源的秒數 |
secondsBehindSourceThreshold
|
當唯讀副本執行個體的複製延遲時間 (以秒為單位) 超過指定值時,就會觸發擷取作業。您可以使用這個觸發程序,監控及診斷複寫作業的延遲情形。系統會自動為副本執行個體啟用這項觸發條件。如未明確設定觸發條件,預設值為 900 秒。建議您將值設為較高,以免系統過度擷取畫面,導致冷卻時間過長。 | 900 (秒)
|
1 以上
|
| 信號燈等待 < | semaphoreWaitThresholdCount
|
當等待內部 InnoDB 號誌的執行緒數量超過此觸發條件的設定值時,就會觸發擷取作業。這項進階指標會指出 InnoDB 儲存引擎本身的爭用情形,無論是使用互斥鎖或讀寫鎖都適用。常見的爭用情形包括自動調整雜湊索引 (AHI) 爭用、緩衝區集區爭用和磁碟 IO 爭用。 如果任何單一信號的等待時間超過 200 秒,即使觸發條件的設定值不符,系統也會觸發擷取作業。 |
0 (已停用)
|
0或 10-10000
|
| 交易 鎖定等待 |
transactionLockWaitThresholdCount
|
當處於 LOCK WAIT 狀態的交易數量超過設定的數量時,就會觸發擷取作業。在繁忙的系統中,少數交易處於鎖定等待狀態是正常的,但如果鎖定等待的交易數量持續偏高,則強烈表示應用程式層級的鎖定爭用、未建立索引的 DML、長時間閒置的交易,以及高並行列爭用,可能會嚴重降低效能和處理量。 |
0 (已停用)
|
0或 10-10000
|
定價
所有 Cloud SQL 地區都提供效能擷取功能,不需額外付費。標準費用只適用於基礎資料庫資源。效能擷取功能會將記錄儲存在 Cloud Logging 中,因此可能會產生額外的 Cloud Logging 儲存空間費用。
如要進一步瞭解在 Cloud Logging 中儲存記錄的定價,請參閱「定價」一文。
限制
- 您必須啟用查詢洞察,才能使用效能擷取功能。停用查詢洞察後,系統也會停用成效擷取功能。
- 效能擷取功能僅適用於 MySQL 5.7 以上版本的 Cloud SQL。