診斷問題

這個頁面列出使用 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),它更能抵抗資料表毀損。

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

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 可避免在建立備用資源和容錯移轉期間遺失資料,並讓複製作業更健全。不過,GTID 受到 MySQL 的限制,如 MySQL 手冊所述。下列交易不安全的作業無法與支援 GTID 的 MySQL 伺服器搭配使用:

  • 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 KMS 金鑰版本 (用於在 Cloud SQL 執行個體中加密使用者資料) 不存在、金鑰存取權遭到撤銷,或是金鑰遭到停用或刪除,如需更多資訊,請參閱「使用客戶管理的加密金鑰 (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 金鑰版本已停用或銷毀、IAM 權限不足以存取 Cloud KMS 金鑰版本,或是 Cloud KMS 金鑰版本位於與 Cloud SQL 執行個體不同的區域。請參考下列疑難排解表格,診斷及解決常見問題。

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

    針對這項錯誤... 問題可能出在... 試試這個...
    找不到個別產品和專案的服務帳戶 服務帳戶名稱有誤。 請確認您為正確的使用者專案建立服務帳戶。

    前往「Service Accounts」(服務帳戶) 頁面

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

    前往「IAM Accounts」(IAM 帳戶) 頁面

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

    前往「Cryptographic Keys」(加密編譯金鑰) 頁面

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

    前往「IAM Accounts」(IAM 帳戶) 頁面


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

    重新加密疑難排解表

    針對這項錯誤... 問題可能出在... 試試這個...
    無法存取 Cloud KMS 金鑰,因此 CMEK 資源重新加密作業失敗。請確認已啟用主鍵版本,且已正確授予權限。 金鑰版本已停用或未授予適當權限。

    重新啟用 Cloud KMS 金鑰版本:

    前往「Crypto Keys」(加密編譯金鑰) 頁面

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

    前往「IAM Accounts」(IAM 帳戶) 頁面

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