排解 Cloud SQL 問題

本頁提供疑難排解提示,協助您解決支援的資料庫引擎的 Cloud SQL 問題。其中有些提示僅適用於特定資料庫引擎,有些則適用於所有引擎。

如需特定資料庫引擎的疑難排解提示,請參閱個別頁面:

請先查看下列頁面,確認問題是否已有解決方法:

本頁面涵蓋的主題包括:

備份與還原

問題 疑難排解
無法查看目前作業的狀態。 作業完成時, Google Cloud 控制台只會回報成功或失敗。這款模型不會顯示警告或其他最新資訊。

執行 gcloud sql operations list 指令,列出指定 Cloud SQL 執行個體的所有作業。

您想找出是誰發起了隨選備份作業。 使用者介面不會顯示啟動作業的使用者。

查看記錄,然後依文字篩選,找出使用者。您可能需要使用稽核記錄來取得私人資訊。相關記錄檔包括:

  • 如果啟用 Cloud 稽核記錄,且您具備查看記錄的必要權限,則可能也會顯示 cloudaudit.googleapis.com/activity
執行個體刪除後,您就無法備份該執行個體。

如果您刪除執行個體時沒有最終備份資料,就無法復原資料。不過,如果您還原執行個體,Cloud SQL 也會還原備份。如要進一步瞭解如何復原已刪除的執行個體,請參閱「刪除執行個體後保留備份」。

如果您已執行匯出作業,請建立新的執行個體,然後執行匯入作業來重建資料庫。匯出作業會將資料寫入 Cloud Storage,匯入作業則會從 Cloud Storage 讀取資料。

自動備份作業已停滯數小時,且無法取消。 備份作業可能需要較長時間,視資料庫大小而定。

如果真的需要取消作業,可以請 客戶服務force restart執行個體。

如果 SQL dump 檔案中有一或多位參照的使用者不存在,還原作業就會失敗。 還原 SQL 傾印檔之前,如果資料庫使用者擁有傾印資料庫中的物件,或已取得傾印資料庫中的物件存取權,這類使用者都必須存在於目標資料庫中。如果沒有,還原作業就無法以原始擁有權或權限重新建立物件。

還原 SQL 傾印檔前,請先建立資料庫使用者

您想將自動備份的保留天數從 7 天延長至 30 天以上。 您可以 設定要保留的自動備份數量。系統會根據設定的保留值,定期修剪自動備份。很抱歉,這表示目前顯示的備份是唯一可供還原的自動備份。

如要無限期保留備份,可以建立隨選備份,因為這類備份不會像自動備份一樣遭到刪除。隨選備份會無限期保留。也就是說,這些備份會一直存在,直到您刪除備份或刪除所屬執行個體為止。這類備份不會自動刪除,因此可能會影響帳單。

自動備份失敗,且您未收到電子郵件通知。 如要讓 Cloud SQL 通知您備份狀態,請設定以記錄為準的快訊
執行個體在失敗和備份還原狀態之間循環,因此反覆失敗。還原後,嘗試連線及使用資料庫會失敗。
  • 開放連線可能過多。如果連線中途發生錯誤,且沒有 autovacuum 設定可清除無效連線,就可能導致連線過多。
  • 如果任何自訂程式碼使用重試邏輯,且在幾次失敗後不會停止,就可能發生循環。
  • 網路流量可能過大。使用連線集區和其他連線最佳做法

建議做法:

  1. 確認資料庫已 設為 autovacuum
  2. 檢查自訂程式碼中是否已設定任何連線重試邏輯。
  3. 調降流量,直到資料庫復原為止,然後再慢慢調高流量。
執行備份/還原作業時,發現資料遺失。 資料表是以未記錄的形式建立。例如:

CREATE UNLOGGED TABLE ...

從備份還原時,不會還原下列資料表:

  • 在 HA 執行個體上,未記錄的資料表內容不會在容錯移轉後保留。
  • 未記錄的資料表在 PostgreSQL 發生當機時會遺失。
  • 系統不會將未記錄的資料表複製到唯讀副本。
  • 備份還原期間,系統會自動清除未記錄的資料表。

解決方法是避免使用未記錄的資料表,以免無法透過備份還原這些資料表。如果從已含有未記錄資料表的資料庫還原,您可以將資料庫傾印至檔案,並在修改傾印檔案,將這些資料表上的 ALTER TABLE 改為 SET LOGGED 後,重新載入資料。

如果您選擇在刪除執行個體時建立最終備份,就無法刪除執行個體。 刪除執行個體時,系統會要求您確認是否要在刪除前建立最終備份。如果您使用 final-backup 執行個體設定啟用最終備份,則刪除執行個體時所做的選取項目,必須與啟用執行個體最終備份時設定的最終備份執行個體設定相符。如要解決這個問題,請採取下列任一做法:
  • 將最終備份值設為與執行個體的現有備份設定相符。
  • 刪除執行個體時,請將最終備份欄位留空。如果將這個欄位留空,Cloud SQL 會採用執行個體設定中設定的最終備份設定,進行最終備份並定義保留期限。
如要查看執行個體的最終備份執行個體設定,請參閱「查看執行個體資訊」。
成功使用最終備份設定建立主要執行個體後,無法建立副本執行個體。 如果您建立新執行個體時啟用最終備份執行個體設定,則必須更新最終備份機構政策,只將備份設定套用至主要執行個體。備用執行個體不支援最終備份。
詳情請參閱 Cloud SQL 組織政策

複製

問題 疑難排解
複製作業失敗,並顯示 constraints/sql.restrictAuthorizedNetworks 錯誤。 Authorized Networks 設定會封鎖複製作業。 Authorized Networks 是在 Google Cloud 控制台的「連線」部分中,針對公開 IP 位址設定,且基於安全考量,不允許複製。

盡可能從 Cloud SQL 執行個體中移除所有 Authorized Networks 項目。否則,請建立副本,但不要包含任何 Authorized Networks 項目。

錯誤訊息:Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

您嘗試使用 Google Cloud 控制台複製具有私人 IP 位址的執行個體,但未指定要使用的已分配 IP 範圍,且來源執行個體並非使用指定範圍建立。因此,複製的執行個體會建立在隨機範圍內。

使用 gcloud 複製執行個體,並為
--allocated-ip-range-name 參數提供值。詳情請參閱複製具有私人 IP 的執行個體

連結

問題 疑難排解
Aborted connection 可能的問題如下:
  • 網路不穩定。
  • 對 TCP keep-alive 命令沒有回應 (用戶端或伺服器沒有回應,可能已過載)
  • 資料庫引擎連線生命週期已超過,伺服器會終止連線。

應用程式必須能容許網路故障,並遵循最佳做法,例如連線集區和重試。連線集區器大多會盡可能偵測到這些錯誤。否則應用程式必須重試或優雅地失敗。

如要重試連線,建議使用下列方法:

  1. 指數輪詢。每次重試之間的間隔時間會呈指數增加。
  2. 同時新增隨機退避。

結合使用這些方法有助於減少節流。

錯誤訊息:Login failed for user "" Microsoft Entra ID 驗證期間,您可能會遇到這個登入錯誤。如要解決這個問題,請確認這個 Microsoft Entra ID 使用者有 SQL Server 登入資訊。
私人 IP 執行個體的網路連線問題 整合設定期間,你可能會遇到下列問題:
  • 建立 Microsoft Entra ID 登入作業的速度緩慢
  • 無法建立 Microsoft Entra ID 登入
  • 無法使用 Microsoft Entra ID 驗證連線至執行個體

如要進一步瞭解如何解決這些問題,請參閱「排解 Microsoft Entra ID 整合問題」。

FATAL: database 'user' does not exist gcloud sql connect --user 僅適用於預設 postgres 使用者。

連線至預設使用者,然後變更使用者。

你想知道是誰連線。 登入資料庫並執行下列指令:

SELECT datname,
usename,
application_name as appname,
client_addr,
state,
now() - backend_start as conn_age,
now() - state_change as last_activity_age
FROM pg_stat_activity
WHERE backend_type = 'client backend'
ORDER BY 6 DESC
LIMIT 20
   

建立執行個體

問題 疑難排解
錯誤訊息:The zone or region does not have sufficient resources to handle the request at the moment.

在執行個體建立要求時,所選區域缺少要求的資源或 VM 類型容量。要求提出時,該特定區域位置可能同時有大量作業需求。

如要解決這個問題,請嘗試在其他區域建立執行個體,或在一天中的其他時間,嘗試在收到錯誤的相同區域建立執行個體。

錯誤訊息:Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider 分配的 IP 範圍內沒有其他可用位址。可能的情況如下:
  • 分配給私人服務連線的 IP 範圍小於 /24。
  • 為私人服務連線分配的 IP 範圍大小,不足以容納 Cloud SQL 執行個體數量。
  • 如果執行個體是在多個區域中建立,則分配的 IP 範圍大小需求會更大。請參閱已分配的範圍大小

如要解決這個問題,您可以擴展現有的分配 IP 範圍,或為私人服務連線分配額外的 IP 範圍。詳情請參閱分配 IP 位址範圍

如果您在建立 Cloud SQL 執行個體時使用了 --allocated-ip-range-name 旗標,則只能擴充指定的 IP 範圍。

如要分配新範圍,請注意分配範圍不得與現有分配範圍重疊。

建立新的 IP 範圍後,請執行下列指令更新 VPC 對等互連:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
    

如果擴展現有分配範圍,請務必只增加分配範圍,不要縮小。舉例來說,如果原始分配範圍為 10.0.10.0/24,則新的分配範圍至少應為 10.0.10.0/23。

一般來說,如果從 /24 分配開始,每項條件 (額外執行個體類型群組、額外區域) 將 /mask 遞減 1,就是不錯的經驗法則。舉例來說,如果嘗試在相同配置上建立兩個執行個體類型群組,從 /24 變更為 /23 就足夠。

擴充現有 IP 範圍後,請使用下列指令更新 VPC 對等互連:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID
    
錯誤訊息:Failed to create subnetwork. Router status is temporarily unavailable. Please try again later. Help Token: [token-ID] 請嘗試再次建立 Cloud SQL 執行個體。
錯誤訊息:HTTPError 400: Invalid request: Incorrect Service Networking config for instance: PROJECT_ID:INSTANCE_NAME:SERVICE_NETWORKING_NOT_ENABLED.

使用下列指令啟用 Service Networking API,然後再次嘗試建立 Cloud SQL 執行個體。

gcloud services enable servicenetworking.googleapis.com \
--project=PROJECT_ID
    
錯誤訊息:Failed to create subnetwork. Required 'compute.projects.get' permission for PROJECT_ID 使用私人 IP 位址建立執行個體時,系統會使用 Service Networking API 即時建立服務帳戶。如果您最近才啟用 Service Networking API,系統可能尚未建立服務帳戶,導致執行個體建立作業失敗。在這種情況下,您必須等待服務帳戶在整個系統中傳播,或是手動新增服務帳戶並授予必要權限。
錯誤訊息:More than 3 subject alternative names are not allowed. 您嘗試使用自訂 SAN,將三個以上的 DNS 名稱新增至 Cloud SQL 執行個體的伺服器憑證。執行個體最多只能新增三個 DNS 名稱。
錯誤訊息:Subject alternative names %s is too long. The maximum length is 253 characters. 請確認要新增至 Cloud SQL 執行個體伺服器憑證的 DNS 名稱,長度不超過 253 個字元。
錯誤訊息:Subject alternative name %s is invalid.

確認要新增至 Cloud SQL 執行個體伺服器憑證的 DNS 名稱符合下列條件:

  • 不含萬用字元。
  • 不含結尾點。
  • 符合 RFC 1034 規格。

匯出

問題 疑難排解
HTTP Error 409: Operation failed because another operation was already in progress. 您的執行個體已有待處理的作業。系統一次只能執行一項作業。請待目前的作業完成後再提出要求。
HTTP Error 403: The service account does not have the required permissions for the bucket. 請確認值區存在,且 Cloud SQL 執行個體 (執行匯出作業) 的服務帳戶具備 Storage Object Creator 角色 (roles/storage.objectCreator),以便將匯出內容載入值區。請參閱「Cloud Storage 的 IAM 角色」。
CSV 匯出作業成功,但 SQL 匯出作業失敗。 CSV 和 SQL 格式的匯出方式不同。SQL 格式會匯出整個資料庫,因此可能需要較長時間才能完成。CSV 格式可讓您定義要匯出資料庫中的哪些元素。

使用 CSV 匯出功能,只匯出所需內容。

匯出時間過長。 Cloud SQL 不支援並行同步作業。

使用 匯出卸載。從高層次來看,在卸載匯出作業時,Cloud SQL 會啟動卸載執行個體來執行匯出作業,而不是在來源執行個體上發出匯出作業。卸載匯出作業有許多優點,包括提升來源執行個體的效能,以及在匯出作業執行期間解除管理作業的封鎖。使用匯出卸載功能時,總延遲時間可能會增加,因為系統需要時間啟動卸載執行個體。一般來說,只要匯出檔案大小合理,延遲時間就不會太長。不過,如果匯出作業的資料量不大,延遲時間可能會增加。

建立擴充功能時發生錯誤。 傾印檔案包含不支援的擴充功能參照。

編輯 dump 檔案,移除參照

使用「pg_dumpall」時發生錯誤。 使用 pg_dumpall 公用程式搭配 --global 旗標需要超級使用者角色,但 Cloud SQL 不支援這個角色。如要避免在執行包含使用者名稱的匯出作業時發生錯誤,請一併使用 --no-role-passwords 旗標。
匯出作業在匯出任何內容前逾時,且您看到錯誤訊息 Could not receive data from client: Connection reset by peer. 如果 Cloud Storage 在特定時間範圍內 (通常約為七分鐘) 未收到任何資料,連線就會重設。可能是初始匯出查詢執行時間過長。

使用 pg_dump 工具手動匯出

您希望系統自動匯出資料。 Cloud SQL 不提供自動匯出功能。

您可以 Google Cloud運用 Cloud Scheduler、Pub/Sub 和 Cloud Run 函式等產品,自行建構自動匯出系統,類似於這篇 自動備份文章。

外部主要

問題 疑難排解
Lost connection to MySQL server during query when dumping table 來源可能已無法使用,或傾印包含過大的封包。

確認外部主要裝置可供連線。 您也可以修改來源執行個體上的 net_read_timeoutnet_write_timeout 旗標值,停止錯誤。如要進一步瞭解這些旗標的允許值,請參閱「設定資料庫旗標」。

如要進一步瞭解如何使用 mysqldump 標記進行受管理匯入遷移作業,請參閱「 允許和預設的初始同步標記」一文。

初始傾印作業失敗,並出現逾時或連線中斷錯誤 (例如 Dump timeoutLost connection to MySQL server)。 如果一或多個 DDL 陳述式與平行傾印程序互動,導致程序無限期等待,就可能發生這個錯誤。

解決方法:在初始傾印階段,請勿對來源資料庫執行 DDL 陳述式。執行任何 DDL 陳述式前,請先重新啟動遷移作業,並等待初始傾印階段完成。

初始資料遷移作業已順利完成,但系統未複製任何資料。

其中一個可能的原因是來源資料庫已定義複製標記,導致部分或所有資料庫變更未複製過來。

請確認複製旗標 (例如 binlog-do-dbbinlog-ignore-dbreplicate-do-dbreplicate-ignore-db) 未以衝突的方式設定。

在主要執行個體上執行 show master status 指令,即可查看目前的設定。

初始資料移轉作業成功,但資料複製作業在一段時間後停止運作。

建議做法:

  • 在 Google Cloud 控制台的 Cloud Monitoring 專區中,查看副本執行個體的 複寫指標
  • MySQL IO 執行緒或 SQL 執行緒的錯誤會顯示在 Cloud Loggingmysql.err 記錄檔中。
  • 連線至副本執行個體時,也可能會發現這個錯誤。 執行 SHOW REPLICA STATUS 指令,並檢查輸出內容中是否有下列欄位:
    • Replica_IO_Running
    • Replica_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error

如果看到 Unknown database DATABASE_NAME on query. Error_code: MY-001049 錯誤,表示複製的 SQL 陳述式嘗試參照未選取遷移的資料庫,導致複製失敗。如要復原複寫,請根據訊息判斷錯誤是否是由下列其中一個物件的 DDL 所造成:

  • 活動或日常安排。您可以在副本上執行 CALL mysql.skipReplicationError(),防止複製事件或常式,並繼續複製。
  • 外鍵限制或檢視畫面。判斷陳述式修改的物件位於哪個資料庫後,您有兩種復原方式。您可以從要遷移的資料庫中移除資料庫,也可以在副本上執行 CALL mysql.skipReplicationError(),繼續進行複製作業,同時略過限制條件或將檢視區塊傳播至副本。
mysqld check failed: data disk is full 備用執行個體的資料磁碟已滿。

增加副本執行個體的磁碟大小。您可以手動增加磁碟大小,也可以啟用儲存空間自動增加功能。

外部副本

問題 疑難排解
錯誤訊息:The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires 主要 Cloud SQL 執行個體已啟用自動備份、二進位記錄檔和時間點復原功能,因此應該有足夠的記錄檔,可供副本趕上進度。不過,在這種情況下,雖然有二進位記錄檔,但副本不知道要從哪一列開始讀取。

使用正確的旗標設定建立新的傾印檔案,並使用該檔案設定外部副本

  1. 透過 Compute Engine 執行個體連線至 mysql 用戶端。
  2. 執行 mysqldump,並使用 --master-data=1--flush-privileges 旗標。

    重要事項:請勿加入 --set-gtid-purged=OFF 旗標

    瞭解詳情

  3. 確認剛建立的 dump 檔案包含 SET @@GLOBAL.GTID_PURGED='...' 行。
  4. 將傾印檔案上傳至 Cloud Storage 值區,並 使用傾印檔案設定副本

旗標

問題 疑難排解

高可用性

問題 疑難排解
您找不到手動容錯移轉的指標。 只有自動容錯移轉會計入指標。
Cloud SQL 執行個體資源 (CPU 和 RAM) 的使用率接近 100%,導致高可用性執行個體停止運作。 執行個體機器大小太小,無法負荷負載。

編輯執行個體,升級為更大的機器大小,取得更多 CPU 和記憶體。

匯入

問題 疑難排解
HTTP Error 409: Operation failed because another operation was already in progress 您的執行個體已有待處理的作業。系統一次只能執行一項作業。請待目前的作業完成後再提出要求。
匯入作業時間過長。 有效連線數量過多可能會干擾匯入作業。

關閉未使用的作業。檢查 Cloud SQL 執行個體的 CPU 和記憶體用量,確保有充足的可用資源。如要確保匯入作業有最多資源可用,最好的方法就是在開始作業前重新啟動執行個體。

重新啟動:

  • 關閉所有連線。
  • 終止可能消耗資源的任何工作。
如果傾印檔案中有一或多位參照的使用者不存在,匯入作業就會失敗。 匯入 dump 檔案前,如果資料庫使用者擁有傾印資料庫中的物件,或已取得傾印資料庫中的物件存取權,這類使用者都必須存在於目標資料庫中。否則匯入作業無法以原始擁有權或權限重新建立物件。

匯入前請先建立資料庫使用者

匯入作業失敗,並顯示資料表不存在的錯誤。 資料表可能會參照其他資料表的外鍵,而且其中一或多個資料表在匯入作業期間可能仍不存在 (取決於匯入順序)。

建議做法:

在傾印檔案開頭加上以下這一行:

SET FOREIGN_KEY_CHECKS=0;
  

此外,請在傾印檔案結尾處加上以下這行:

SET FOREIGN_KEY_CHECKS=1;
  

這些設定會在匯入作業進行期間停用資料完整性檢查,並在資料載入完成後重新啟用。這不會影響資料庫中的資料完整性,因為資料在建立 dump 檔案時已通過驗證。

與 Vertex AI 整合

問題 疑難排解
錯誤訊息:Google ML Integration API is not supported on shared core instance. Please upsize your machine type. 如果您為執行個體的機型選取共用核心,就無法在 Cloud SQL 中啟用 Vertex AI 整合功能。將機器類型升級為專用核心。詳情請參閱「機器類型」。
錯誤訊息:Google ML Integration is unsupported for this maintenance version. Please follow https://cloud.google.com/sql/docs/mysql/self-service-maintenance to update the maintenance version of the instance. 如要在 Cloud SQL 中啟用 Vertex AI 整合功能,執行個體的維護版本必須為 R20240130 以上。如要將執行個體升級至這個版本,請參閱「自助式維護」。
錯誤訊息:Cannot invoke ml_predict_row if 'cloudsql.enable_google_ml_integration' is off. cloudsql.enable_google_ml_integration 資料庫旗標已關閉。Cloud SQL 無法與 Vertex AI 整合。

如要開啟這個旗標,請使用 gcloud sql instances patch 指令:

gcloud sql instances patch INSTANCE_NAME --database-flags cloudsql.enable_google_ml_integration=on

INSTANCE_NAME 替換為主要 Cloud SQL 執行個體的名稱。
錯誤訊息:Failed to connect to remote host: Connection refused. Cloud SQL 與 Vertex AI 之間的整合功能未啟用。如要啟用這項整合功能,請使用 gcloud sql instances patch 指令:

gcloud sql instances patch INSTANCE_NAME
--enable-google-ml-integration


INSTANCE_NAME 替換為主要 Cloud SQL 執行個體的名稱。
錯誤訊息:Vertex AI API has not been used in project PROJECT_ID before or it is disabled. Enable it by visiting /apis/api/aiplatform.googleapis.com/overview?project=PROJECT_ID then retry. Vertex AI API 未啟用。如要進一步瞭解如何啟用這項 API,請參閱「啟用資料庫與 Vertex AI 的整合功能」。
錯誤訊息:Permission 'aiplatform.endpoints.predict' denied on resource. 未將 Vertex AI 權限新增至 Cloud SQL 執行個體所在專案的 Cloud SQL 服務帳戶。如要進一步瞭解如何將這些權限新增至服務帳戶,請參閱「授予 Cloud SQL 服務帳戶 Identity and Access Management (IAM) 權限,以便存取 Vertex AI」。
錯誤訊息:Publisher Model `projects/PROJECT_ID/locations/REGION_NAME/publishers/google/models/MODEL_NAME` not found. 機器學習模型或 LLM 不存在於 Vertex AI。
錯誤訊息:Resource exhausted: grpc: received message larger than max. Cloud SQL 傳遞至 Vertex AI 的要求大小超過 gRPC 限制 (每個要求 4 MB)。
錯誤訊息:Cloud SQL attempts to send a request to Vertex AI. However, the instance is in the %s region, but the Vertex AI endpoint is in the %s region. Make sure the instance and endpoint are in the same region. Cloud SQL 會嘗試向 Vertex AI 傳送要求。不過,執行個體位於某個區域,但 Vertex AI 端點位於不同區域。如要解決這個問題,執行個體和端點必須位於相同區域。
錯誤訊息:The Vertex AI endpoint isn't formatted properly. Vertex AI 端點格式不正確。詳情請參閱「使用私人端點進行線上預測」。
錯誤訊息:Quota exceeded for aiplatform.googleapis.com/online_prediction_requests_per_base_model with base model: textembedding-gecko. Cloud SQL 傳遞至 Vertex AI 的要求數,超過每個專案每個模型每個地區每分鐘 1,500 個要求的上限。

連結的伺服器

問題 疑難排解
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
DataAccess」選項已停用。執行下列指令,啟用資料存取權:
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

LINKED_SERVER_NAME 替換為連結伺服器的名稱。

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) 如果您在建立加密連線時遇到這個問題,請嘗試以其他方式提供使用者 ID,存取已連結的伺服器。如要進行這項操作,請執行下列指令:
EXEC master.dbo.sp_addlinkedserver
   @server = N'LINKED_SERVER_NAME',
   @srvproduct= N'',
   @provider= N'MSOLEDBSQL',
   @datasrc= N'TARGET_SERVER_ID',
   @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID'

取代下列項目:

  • LINKED_SERVER_NAME 替換為連結伺服器的名稱。
  • TARGET_SERVER_ID,並提供目標伺服器的名稱,或目標伺服器的 IP 位址和連接埠號碼。
  • USER_ID 使用者登入。
非預期行為 如果發生非預期的行為,請確認你使用的是支援的供應商。詳情請參閱 Microsoft 說明文件

記錄

問題 疑難排解
找不到稽核記錄。 只有在作業是經過驗證的使用者驅動 API 呼叫,且會建立、修改或讀取使用者建立的資料,或是作業會存取資源的設定檔或中繼資料時,系統才會寫入資料存取記錄。
記錄中找不到作業資訊。 想進一步瞭解某項作業。

舉例來說,使用者遭到刪除,但您無法找出刪除者。 記錄會顯示作業已啟動,但不會提供任何其他資訊。您必須啟用稽核記錄,才能記錄這類詳細的個人識別資訊 (PII)。

系統會從 SQL Server 適用的 Cloud SQL 執行個體的 error.log 記錄檔中篩除部分記錄。 篩選後的記錄包括: 沒有時間戳記的 AD 記錄,包括: Login failed for user 'x'. Reason: Token-based server access validation failed with an infrastructure error. Login lacks connect endpoint permission. [CLIENT: 127.0.0.1]。系統會篩除這些記錄,因為這些記錄可能會造成混淆。
記錄檔占用大量磁碟空間。 有三種記錄檔會使用磁碟空間:重做記錄、一般記錄和二進位記錄。

連線至資料庫,並執行下列指令,查看各類型的詳細資料:

SHOW VARIABLES LIKE 'innodb_log_file%';

SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2),2)
AS GB from mysql.general_log;

SHOW BINARY LOGS;
    
記錄檔難以解讀。 您偏好以 JSON 或文字格式查看記錄。您可以使用 gcloud logging read 指令和 Linux 後續處理指令下載記錄。

如要以 JSON 格式下載記錄,請按照下列步驟操作:

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d" \
> downloaded-log.json
    

如要以 TEXT 格式下載記錄,請按照下列步驟操作:

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d"| jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) \
| .textPayload' \
--order=asc
> downloaded-log.txt
   
PostgreSQL 記錄中找不到查詢記錄。 您需要啟用 pgaudit 旗標。
  1. 從終端機連線至資料庫:
    gcloud sql connect INSTANCE_NAME
          
  2. 執行下列指令來建立擴充功能:
    CREATE EXTENSION pgaudit;
          
  3. 退出資料庫,然後在終端機執行下列指令:
    gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.enable_pgaudit=on,pgaudit.log=all
         

管理執行個體

問題 疑難排解
重新啟動 MySQL 後效能變慢。 Cloud SQL 允許在 InnoDB 緩衝區集區中快取資料。 不過,重新啟動後,這個快取一律會是空的,所有讀取作業都需要往返後端才能取得資料。因此,在填滿快取之前,查詢速度可能會比預期慢。
當機復原速度緩慢。 可能已累積大量 general_log。 您可以避免大量general_log累積,藉此縮短當機復原時間。如果已開啟 general_log,請截斷資料表,並只在短時間內啟用 general_log

如要瞭解一般記錄的大小,請連線至資料庫並執行下列查詢:

SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2)),2) from mysql.general_log;
您想瞭解哪些項目占用了儲存空間。 舉例來說,您發現資料庫只用了 3 GB,但儲存空間顯示用量為 14 GB。資料表未使用的空間大多會用於二進位記錄和/或暫存檔案。

建議做法:

  • 您可以在 MySQL 指令列介面中,使用下列指令檢查二進位檔記錄占用的儲存空間: SHOW BINARY LOGS;
  • 臨時表也可能占用大量儲存空間。如要檢查暫時空間用量,請使用下列指令: SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G
  • 您可以使用下列指令檢查重做日誌檔大小: SHOW VARIABLES LIKE 'innodb_log_file%';
  • 如要檢查 general_log 的大小 (如果已啟用),請使用下列指令: SELECT ROUND(SUM(LENGTH(argument)/POW(1024,2)),2) AS GB from mysql.general_log;
  • 如有需要,您可以使用 API 截斷記錄檔資料表。詳情請參閱instances.truncateLog 參考資料頁面
  • 進一步瞭解如何設定 設定慢速查詢記錄。
查詢遭到封鎖。 查詢可能會鎖定 MySQL 資料庫,導致後續所有查詢遭到封鎖/逾時。

連線至資料庫並執行下列查詢:

SHOW PROCESSLIST

清單中的第一個項目可能持有鎖定,後續項目則會等待該項目釋放鎖定。

SHOW INNODB STATUS查詢也可能有所幫助。

您無法手動刪除二進位記錄檔。 二進位記錄無法手動刪除。二進位記錄檔會與相關聯的自動備份一起自動刪除,通常會在七天後刪除。
想瞭解暫存檔案的相關資訊。 名為 ibtmp1 的檔案用於儲存暫時資料。資料庫重新啟動後,系統會重設這個檔案。如要瞭解暫存檔案用量,請連線至資料庫並執行下列查詢:

SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G

您想瞭解資料表大小。 這項資訊會顯示在資料庫中。

連線至資料庫並執行下列查詢:

SELECT TABLE_SCHEMA, TABLE_NAME, sum(DATA_LENGTH+INDEX_LENGTH)/pow(1024,2) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA NOT IN ('PERFORMANCE_SCHEMA','INFORMATION_SCHEMA','SYS','MYSQL') GROUP BY TABLE_SCHEMA, TABLE_NAME;

mysqld got a signal 11. 請嘗試重構查詢,避免建立過多連線。如果仍無法解決問題,請與客戶服務團隊聯絡。 訊號 11 通常代表 MySQL 軟體問題。

InnoDB: page_cleaner: 1000ms intended loop took 5215ms. The settings might not be optimal. 頁面清除器無法跟上執行個體上的變更速度。 頁面清除器每秒會掃描緩衝區集區,找出要從緩衝區集區排清至磁碟的髒頁面。您看到的警告表示有大量待清除的髒頁面,且清除一批髒頁面到磁碟的時間超過一秒。

對執行個體執行資料分割 (如有可能)。請盡量使用多個小型 Cloud SQL 執行個體,效果會比使用單個大型的執行個體更好。

您想瞭解目前正在執行的查詢。 連線至資料庫並執行下列查詢:

SELECT datname, username, application_name as appname, client_addr, state, now() - backend_start as conn_age, now() - xact_start as xact_age, now() - query_start as query_age, now() - state_change as last_activity_age, wait_event_type, wait_event, query FROM pg_stat_activity WHERE state <> 'idle' ORDER BY 8 DESC LIMIT 20;

您想瞭解特定欄位使用的單位。 連線至資料庫並執行下列查詢 (使用您自己的 FIELD_NAME):

SELECT name, setting, unit FROM pg_settings WHERE name = 'FIELD_NAME'

您想找出資料庫設定的目前值。 連線至資料庫並執行下列查詢 (使用您自己的 SETTING_NAME):

SHOW SETTING_NAME;

執行 SHOW ALL; 即可查看所有設定。

您想停止遭封鎖的背景程序。 使用者必須具備 pg_signal_backend 角色。

執行下列指令:

  1.       GRANT pg_signal_backend TO USERNAME;
          
  2. 找出遭封鎖或停滯程序的程序 ID:
          SELECT pid, username, state, query FROM pg_stat_activity;
          
  3. 使用下列指令停止執行中或閒置的程序: