診斷問題

這個頁面包含使用 Cloud SQL 執行個體時可能遇到的最常見問題清單,以及解決這些問題可採取的步驟。此外,請參閱「已知問題」、「疑難排解」和「支援頁面」。

查看記錄

如要查看最近作業的相關資訊,您可以查看 Cloud SQL 執行個體作業記錄MySQL 錯誤記錄

執行個體沒有回應

如果執行個體停止回應連線或效能降低,請確定其符合操作指南。如果不符合這些準則,則不適用 Cloud SQL 服務水準協議

連線問題

如需連線問題的相關說明,請參閱「偵錯連線問題」頁面,或疑難排解頁面的「 連線」部分。

執行個體問題

備份

為確保備份作業發揮最佳效能,請將資料表數量控制在合理範圍內。

如要瞭解其他備份問題,請參閱疑難排解頁面的「備份」一節。

匯入及匯出

Cloud SQL 的匯入和匯出作業與使用 mysqldump 公用程式相同,但 Cloud SQL 匯入/匯出功能會使用 Cloud Storage 值區傳輸資料。

視處理的資料大小而定,匯入 Cloud SQL 和從 Cloud SQL 匯出資料可能需要很長時間才能完成。這可能會造成下列影響:

  • 您無法停止長時間執行的 Cloud SQL 執行個體作業。
  • 每個執行個體一次只能執行一項匯入或匯出作業,而且長時間執行的匯入或匯出作業會封鎖其他作業,例如每日自動備份。無伺服器匯出作業可讓您執行其他作業,包括編輯執行個體、匯入、容錯移轉,以及解除封鎖每日自動備份。

如要縮短完成各項作業所需的時間,請使用 Cloud SQL 匯入或匯出功能,但請用於小批資料。

如要匯出資料,您可以從唯讀副本執行匯出作業,或使用無伺服器匯出功能,盡量減少對資料庫效能的影響,並在匯出作業執行期間,讓執行個體執行其他作業。

匯入時應記住的其他重點:

  • 如果匯入作業當機,可能是因為記憶體不足 (OOM) 錯誤所致。 如果是這種情況,您可以嘗試直接使用 MySQL 指令新增 --extended-insert=FALSE --complete-insert 參數。這些參數會降低匯入速度,但也會減少匯入所需的記憶體量。

如要瞭解其他匯入和匯出問題,請參閱疑難排解頁面的「 匯入和匯出」一節。

磁碟空間

如果您的執行個體達到允許的儲存量上限,則會導致寫入至資料庫失敗。如果您透過例如捨棄表格的方式刪除資料,釋放的空間不會在執行個體的已報告「Storage Used」(已使用的儲存空間) 中反映出來。如要瞭解這種行為,請參閱「如何回收已捨棄表格的空間?」常見問題。

達到儲存空間上限也可能導致執行個體卡在重新啟動程序中。

避免資料損毀

避免產生的資料欄

由於 MySQL 的問題,使用產生的資料欄可能會導致資料毀損。詳情請參閱 MySQL 錯誤編號 82736 一文。

乾淨關機

Cloud SQL 關閉執行個體時 (例如進行維護),系統不會將新連線傳送至執行個體,並會終止現有連線。mysqld 必要的關機時間量限制為 1 分鐘。 如果關機程序未在該時間內完成,系統會強制停止 mysqld 程序。這可能會導致半途取消磁碟寫入。

資料庫引擎

InnoDB 是 MySQL 執行個體唯一支援的儲存引擎,因為相較於其他 MySQL 儲存引擎 (例如 MyISAM),InnoDB 更能抵抗資料表損毀。

根據預設,Cloud SQL 資料庫表格使用 InnoDB 儲存引擎建立。如果 CREATE TABLE 語法包含指定 InnoDB 以外儲存引擎的選項 (例如 ENGINE = MyISAM),系統就不會建立資料表,並顯示類似下列範例的錯誤訊息:ENGINE

ERROR 3161 (HY000): Storage engine MyISAM is disabled (Table creation is disallowed).

如要避免這個錯誤,請從 CREATE TABLE 指令中移除 ENGINE = MyISAM 選項。這樣做會使用 InnoDB 儲存引擎建立資料表。

變更系統表格

MySQL 系統資料表使用 MyISAM 儲存引擎,包括 mysql 資料庫中的所有資料表,例如 mysql.usermysql.db。這些表格對於未正常關機存有安全漏洞;在變更這些表格之後,請發出 FLUSH CHANGES 指令。如果真的發生 MyISAM 損毀情形,CHECK TABLEREPAIR TABLE 可協助您恢復正常狀態 (但不會儲存資料)。

通用交易識別碼 (GTID)

所有 MySQL 執行個體都會自動啟用 GTID。啟用 GTID 可避免在建立備用資源和容錯移轉期間遺失資料,並提升複製作業的穩定性。不過,MySQL 對 GTID 設有一些限制,詳情請參閱 MySQL 手冊。如果 MySQL 伺服器已啟用 GTID,就無法使用下列交易不安全的操作:

  • CREATE TABLE ... SELECT 陳述式;
  • 交易內的 CREATE TEMPORARY TABLE 陳述式;
  • 會同時影響到交易型與非交易型表格的交易或陳述式。

如果您使用交易不安全的交易,系統會顯示類似下列範例的錯誤訊息:

 Exception: SQLSTATE[HY000]: General error: 1786
 CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.

使用觸發條件與預存函式

如果執行個體已啟用二進位記錄,且您需要使用觸發程序或預存函式,請確認執行個體已將 log_bin_trust_function_creators 旗標設為 on

停權狀態

Cloud SQL 可能會因為各種原因暫停執行個體,包括:

  • 帳單問題

    例如,如果專案帳單帳戶的信用卡已過期,則執行個體可能會遭到暫停。如要查看專案的帳單資訊,請前往 Google Cloud 控制台的帳單頁面,選取專案,然後查看用於專案的帳單帳戶資訊。帳單問題解決之後,執行個體會在幾小時內恢復為可執行狀態。

  • Cloud Key Management Service 的主要問題

    舉例來說,如果用來加密 Cloud SQL 執行個體中使用者資料的 Cloud KMS 金鑰版本不存在、金鑰存取權遭到撤銷,或是金鑰已停用或刪除,詳情請參閱「使用客戶自行管理的加密金鑰 (CMEK)」。

  • 法律問題

    舉例來說,違反Google Cloud 使用限制政策可能會導致執行個體遭到暫停。詳情請參閱《Google Cloud 服務條款》的「暫停和移除」一節。

  • 操作問題

    舉例來說,如果執行個體陷入當機迴圈 (在啟動時或啟動後不久當機),Cloud SQL 可能會暫停執行個體。

如果停權是因帳單問題所觸發的,在執行個體暫停時,您可以繼續查看執行個體的相關資訊,也可以將其刪除。

白金級、爍金級或白銀級支援方案的 Cloud SQL 使用者,可就暫停的執行個體直接與支援小組聯絡。所有使用者都可以參考先前的指引和 google-cloud-sql 論壇。

成效

總覽

Cloud SQL 支援需要大量效能的工作負載,每秒最多可處理 6 萬次輸入/輸出作業,且無需額外輸入/輸出作業費用。IOPS 和總處理量效能取決於磁碟大小、執行個體 vCPU 數量和 I/O 區塊大小等因素。

執行個體的效能也取決於您選擇的儲存空間類型和工作負載。

進一步瞭解:

啟用查詢記錄

如要調整查詢效能,請新增資料庫旗標 --log_output='FILE'--slow_query_log=on 至執行個體,設定 Cloud SQL 記錄慢查詢。這會讓使用者能夠透過 Google Cloud 控制台中的記錄檢視器使用記錄輸出。請注意,這會產生 Google Cloud Observability 記錄費用

請勿將 log_output 設定為 TABLE。這麼做可能會導致發生連線問題,如使用標記的提示一節所述。

如要使用 Cloud Logging 和 Monitoring 記錄及監控 MySQL 適用的 Cloud SQL 慢查詢,請參閱這篇教學課程的操作說明。

啟用鎖定監控

InnoDB 監視器提供有關 InnoDB 儲存引擎內部狀態的資訊,您可以在效能調整時使用這些資訊。

使用 MySQL 用戶端存取執行個體並取得隨選監控輸出:

SHOW ENGINE INNODB STATUS\G

如需監控輸出區段的說明,請參閱 InnoDB 標準監視器與鎖定監控輸出

您可以啟用 InnoDB 監視器,以將效能降低的輸出定期產生到檔案或表格中。如需詳細資訊,請參閱啟用 InnoDB 監視器

使用效能結構定義

MySQL 效能結構定義是一項功能,可監控 MySQL 伺服器執行作業的低階狀態。如要以最簡單的方式使用 performance_schema 產生的統計資料,請透過 MySQL Workbench 效能報表功能。

保持合理的資料庫表格數目

資料庫表格會耗用系統資源。數量過大會影響執行個體的效能和可用性,並導致執行個體喪失服務水準協議保障。瞭解詳情

一般效能提示

。 如果資料庫插入、更新或刪除作業速度緩慢,請考慮採取下列行動:
  • 請檢查寫入者與資料庫的位置;將資料傳送很遠的距離會導致延遲發生。

針對較慢的資料庫選取作業,請考慮下列因素:

  • 快取對於讀取效能非常重要。比較資料集大小與執行個體的 RAM 大小。在理想情況下,完整資料集應可納入執行個體 70% 的 RAM 中,在此情況下,查詢將不受 IO 效能限制。如果不是,請考慮增加執行個體的 RAM 大小。
  • 如果工作負載包含大量耗用 CPU 的查詢 (排序、規則運算式、其他複雜函式),執行個體可能會受到節流;請增加 vCPU。
  • 檢查讀取器和資料庫的位置,延遲時間對讀取效能的影響,甚至比寫入效能更大。
  • 探索非 Cloud SQL 特定的效能強化方式,例如新增適當索引、減少掃描資料,以及避免額外的往返次數。
  • 如果您發現執行查詢時效能不彰,請使用 EXPLAIN。EXPLAIN 是您加到其他陳述式 (例如 SELECT) 的陳述式,會傳回 MySQL 執行陳述式的方式相關資訊。適用於 SELECT、DELETE、INSERT、REPLACE 和 UPDATE。例如:EXPLAIN SELECT * FROM myTable;

    使用 EXPLAIN 找出可執行下列操作的位置:

    • 將索引新增至表格以改善查詢效能。例如,確保您做為彙整鍵使用的每個欄位,在兩個資料表上都有索引。

    • 提升ORDER BY營運效率。如果 EXPLAIN 在輸出的「Extra」(額外) 資料欄中顯示「Using temporary; Using filesort」(使用暫存;使用檔案排序),則會將中繼結果儲存在後續排序的檔案中,而這通常會導致效能不彰。在此情況下,請採取以下其中一個步驟:

      • 如果可行,請使用索引而不要使用排序。如需詳細資訊,請參閱 ORDER BY 最佳化

      • 為查詢工作階段增加 sort_buffer_size 變數的大小。

      • 只將資料欄宣告為剛好需要的大小,使每個資料列能夠使用較少的 RAM。

    疑難排解

    如要瞭解其他 Cloud SQL 問題,請參閱 疑難排解頁面。

    錯誤訊息

    如需特定 API 錯誤訊息,請參閱「錯誤訊息」參考頁面。

    排解客戶自行管理的加密金鑰 (CMEK) 問題

    Cloud KMS 發生錯誤,以及缺少角色或權限,都可能導致 Cloud SQL 管理員作業 (例如建立、複製或更新) 失敗。常見的失敗原因包括缺少 Cloud KMS 金鑰版本、Cloud KMS 金鑰版本已停用或銷毀、存取 Cloud KMS 金鑰版本的 IAM 權限不足,或是 Cloud KMS 金鑰版本與 Cloud SQL 執行個體位於不同區域。請使用下表排解常見問題。

    客戶管理的加密金鑰疑難排解表

    如果發生這個錯誤... 可能原因如下: 請嘗試以下做法:
    找不到每個產品和專案的服務帳戶 服務帳戶名稱有誤。 請確認您已為正確的使用者專案建立服務帳戶。

    前往「SERVICE ACCOUNTS」(服務帳戶) 頁面

    無法授予服務帳戶存取權 使用者帳戶沒有授權存取這個金鑰版本的權限。 將「機構管理員」角色新增至使用者或服務帳戶。

    前往 IAM 帳戶頁面

    Cloud KMS 金鑰版本已銷毀 金鑰版本已刪除。 如果金鑰版本已刪除,您就無法使用該版本加密或解密資料。
    Cloud KMS 金鑰版本已停用 金鑰版本已停用。 重新啟用 Cloud KMS 金鑰版本。

    前往「加密金鑰」頁面

    使用 Cloud KMS 金鑰的權限不足 您用來在 Cloud SQL 執行個體上執行作業的使用者或服務帳戶缺少 cloudkms.cryptoKeyEncrypterDecrypter 角色,或是 Cloud KMS 金鑰版本不存在。 在主機金鑰的 Google Cloud 專案中,將cloudkms.cryptoKeyEncrypterDecrypter角色新增至使用者或服務帳戶。

    前往 IAM 帳戶頁面


    如果帳戶已獲授角色,請參閱「建立金鑰」,瞭解如何建立新的金鑰版本。請參閱附註。
    找不到 Cloud KMS 金鑰 金鑰版本不存在。 建立新的金鑰版本。請參閱「建立金鑰」。 請參閱附註。
    Cloud SQL 執行個體和 Cloud KMS 金鑰版本位於不同區域 Cloud KMS 金鑰版本和 Cloud SQL 執行個體必須位於相同區域。如果 Cloud KMS 金鑰版本位於全域或多區域,則無法使用。 在要建立執行個體的相同區域中,建立金鑰版本。請參閱「建立金鑰」。請參閱附註。
    Cloud KMS 金鑰版本已還原,但執行個體仍處於暫停狀態 金鑰版本已停用或未授予適當權限。 重新啟用金鑰版本,並在金鑰所在的專案中,將 cloudkms.cryptoKeyEncrypterDecrypter 角色授予使用者或服務帳戶。 Google Cloud

    重新加密疑難排解表

    如果發生這個錯誤... 可能原因如下: 請嘗試以下做法:
    無法存取 Cloud KMS 金鑰,因此 CMEK 資源重新加密失敗。 請確認主要金鑰版本已啟用,且已正確授予權限。 金鑰版本已停用或未授予適當權限。

    重新啟用 Cloud KMS 金鑰版本:

    前往「加密金鑰」頁面

    在金鑰所屬的 Google Cloud 專案中,確認已將 cloudkms.cryptoKeyEncrypterDecrypter角色授予使用者或服務帳戶:

    前往 IAM 帳戶頁面

    由於伺服器發生內部錯誤,CMEK 資源重新加密作業失敗。請稍後再試 發生伺服器內部錯誤。 請重試重新加密。詳情請參閱「重新加密現有啟用 CMEK 的執行個體或副本」一文。