疑難排解

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

本頁面涵蓋的主題包括:

備份與還原

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

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

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

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

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

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

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

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

如果真的需要取消作業,可以請 客戶支援團隊force restart執行個體。

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

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

您想將自動備份的保留天數從 7 天延長至 30 天以上。 您可以 設定要保留的自動備份數量,範圍為 1 到 365。系統會根據設定的保留值,定期修剪自動備份。很抱歉,這表示您只能從目前顯示的自動備份還原資料。

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

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

建議做法:

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

CREATE UNLOGGED TABLE ...

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

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

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

取消匯入和匯出作業

問題 疑難排解
錯誤訊息:You can't cancel operation [operation-ID] because this operation isn't in progress.

您嘗試取消的匯入或匯出作業已完成、失敗或取消。如果作業正在執行,可以取消作業。

錯誤訊息:You can't cancel operation [operation-ID] because Cloud SQL doesn't support the cancellation of an [operation-type] operation.

Cloud SQL 不支援取消作業,因為作業的作業類型不是 IMPORTEXPORT

錯誤訊息:The [operation-type] operation isn't cancelled. Wait and retry in a few seconds.

Cloud SQL 目前無法取消匯入或匯出作業。 請稍後再試。如果問題仍未解決,請與Google Cloud 支援團隊聯絡。

複製

問題 疑難排解
複製作業失敗,並顯示 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 存留信號指令沒有回應 (用戶端或伺服器沒有回應,可能已過載)
  • 資料庫引擎連線生命週期已超過,伺服器會結束連線。

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

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

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

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

Certificate verify failed

用戶端憑證已過期,或憑證路徑不正確。

重新建立憑證,即可重新產生憑證。

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
   

Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames

主機位址與伺服器憑證替代名稱中的位址不符。

如果您使用 Node.js 搭配 verify-full 或同等項目,請使用 servername 參數的 DNS 名稱。您可以使用 openssl 在伺服器憑證中找到 DNS 名稱。例如:openssl x509 -in server-cert.pem -noout -text |grep 'DNS:'

 ssl: {
  rejectUnauthorized: true,
  ca: fs.readFileSync("/path/to/server/CA"),
  servername: 'N-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx.us-central1.sql.goog'
}

建立執行個體

問題 疑難排解
錯誤訊息: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 會啟動卸載執行個體來執行匯出作業,而不是在來源執行個體上發出匯出作業。卸載匯出作業有幾項優點,包括提升來源執行個體的效能,以及在匯出作業執行期間解除管理作業的封鎖。使用匯出卸載功能時,總延遲時間可能會增加,增加的時間量取決於啟動卸載執行個體所需的時間。一般來說,只要匯出檔案大小合理,延遲時間就不會太長。不過,如果匯出內容夠小,延遲時間可能會增加。

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

編輯傾印檔案,移除參照

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

使用 pg_dump 工具手動匯出。

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

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

旗標

問題 疑難排解
您為工作階段設定的時區會在登出時失效。

連線至資料庫,並將資料庫時區設為所需時區 (可依使用者或資料庫設定)。

在 PostgreSQL 適用的 Cloud SQL 中,您可以指定下列項目。 工作階段關閉後,這些設定仍會保留,模擬 .conf 設定:

ALTER DATABASE dbname SET TIMEZONE TO 'timezone';
ALTER USER username SET TIMEZONE TO 'timezone';

這些設定只會套用至資料庫的新連線。如要查看時區變更,請中斷與執行個體的連線,然後重新連線。

高可用性

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

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

匯入

問題 疑難排解
錯誤訊息:permission denied for schema public 如果是 PostgreSQL 15 以上版本,且目標資料庫是透過 template0 建立,則匯入資料可能會失敗。如要解決這個問題,請執行 GRANT ALL ON SCHEMA public TO cloudsqlsuperuser SQL 指令,將公開結構定義權限授予 cloudsqlsuperuser 使用者。
HTTP Error 409: Operation failed because another operation was already in progress 您的執行個體已有待處理的作業。系統一次只能執行一項作業。請待目前的作業完成後再提出要求。
匯入作業耗時過長。 有效連線過多可能會干擾匯入作業。

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

重新啟動:

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

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

匯入資料後,資料磁碟用量大幅增加。

匯入資料後,磁碟用量可能會超出預期。這可能是因為您使用了時間點復原功能。

如要解決這個問題,請在匯入資料後停用時間點復原功能,刪除記錄並復原儲存空間。請注意,減少使用的儲存空間不會縮減為執行個體佈建的儲存空間大小。

錯誤訊息:GRANT stderr: ERROR: must be member of role ROLE_NAME

如果您嘗試將上傳至 Cloud Storage 的 SQL 傾印檔案匯入 Cloud SQL 資料庫,且匯入工作已執行約四天,就會看到這則錯誤訊息。

ROLE_NAME 是在來源 PostgreSQL 資料庫中定義的自訂資料庫角色。預設 cloudsqlsuperuser 使用者會匯入 SQL 傾印檔案。但這位使用者可能不屬於 ROLE_NAME 角色。

如要解決這個問題,請完成下列步驟:

  1. 在要匯入 SQL 傾印檔案的目的地資料庫中,建立 ROLE_NAME 角色。
  2. 請勿使用 cloudsqlsuperuser 使用者匯入檔案。請改為在目的地資料庫中,指定 ROLE_NAME 角色的成員。如要指定使用者,請執行下列指令:

    gcloud sql import sql INSTANCE URI [--async]
    [--database=DATABASE, -d DATABASE] [--user=USER] [GCLOUD_WIDE_FLAG …]

與 Vertex AI 整合

問題 疑難排解
錯誤訊息:Google ML integration API is supported only on Postgres version 12 or above. 如要在 Cloud SQL 中啟用 Vertex AI 整合功能,您必須擁有 PostgreSQL 適用的 Cloud SQL 資料庫,且版本為 12 以上。如要將資料庫升級至這個版本,請參閱「就地升級資料庫主要版本」。
錯誤訊息: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/postgres/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 服務帳戶。如要進一步瞭解如何將這些權限新增至服務帳戶,請參閱「啟用資料庫與 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 個要求。

記錄

問題 疑難排解
記錄檔會大量使用 Cloud SQL 執行個體的 CPU 和記憶體。 記錄檔需要調整。

log_statement 旗標可以設為「none」,logging_collector 旗標可以設為「off」。如果系統仍會記錄,可能還有其他與記錄相關的旗標可以調整。您可以 編輯執行個體來修改這些標記。

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

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

記錄檔難以解讀。 您希望以 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
    

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

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
         

管理執行個體

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

SELECT datname, usename, 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, usename, state, query FROM pg_stat_activity;
          
  3. 使用下列指令停止執行中或閒置的程序:
          SELECT pg_cancel_backend(pid)
                FROM pg_stat_activity
                WHERE usename = 'USERNAME';
          
          
          SELECT pg_terminate_backend(pid)
                FROM pg_stat_activity
                WHERE usename = 'USERNAME';
          
          
執行個體的交易 ID 使用率接近 100%。 內部監控系統發出警告,指出執行個體的交易 ID 使用率即將達到 100%。您想避免交易迴繞,這可能會阻礙寫入作業。

自動清除垃圾作業可能遭到封鎖,或無法以足夠快的速度回收交易 ID,以因應工作負載。

為避免交易環繞問題導致服務中斷,請參閱這些自助式提示,瞭解如何處理交易 ID 環繞問題。

如需一般調整建議,請參閱「 最佳化、監控 PostgreSQL 的 VACUUM 作業並進行疑難排解」。

臨時儲存空間會自動增加儲存空間。 已啟用自動儲存功能。

重新啟動會刪除暫存檔,但不會減少儲存空間。只有 客戶支援團隊可以重設執行個體大小。

系統正在自動刪除資料。 您的環境中很可能正在執行指令碼。

查看刪除時間前後的記錄,確認是否有來自資訊主頁或其他自動化程序的惡意指令碼正在執行。

無法刪除執行個體。 您可能會看到 ERROR: (gcloud.sql.instances.delete) HTTP Error 409: The instance or operation is not in an appropriate state to handle the request 錯誤訊息,或執行個體可能具有 INSTANCE_RISKY_FLAG_CONFIG 標記狀態。

可能原因包括:

  • 正在處理另一項作業。Cloud SQL 作業不會同時執行。等待其他作業完成。
  • 只要使用至少一個 beta 旗標,就會觸發 INSTANCE_RISKY_FLAG_CONFIG 警告。移除有風險的旗標設定,然後重新啟動執行個體
臨時資料量過大,導致執行個體停滯。 系統可以一次建立多個臨時資料表,視查詢和負載而定。

很抱歉,除了重新啟動服務,您無法透過任何方法縮減 ibtmp1 檔案。

其中一個解決方法是使用 ROW_FORMAT=COMPRESSED 建立臨時資料表,這樣資料表就會儲存在臨時檔案目錄中,以每個資料表一個檔案的形式儲存。不過,為每個臨時資料表建立及移除每個資料表檔案的表空間,會產生效能成本。

升級時發生嚴重錯誤。 記錄檔可能會顯示更多資訊,但無論如何,可能都需要客戶服務強制重新建立執行個體。
磁碟空間不足後,執行個體無法重新啟動。 自動增加儲存空間功能未啟用。

如果執行個體的儲存空間不足,且未啟用自動增加儲存空間功能,執行個體就會離線。如要避免這個問題,請 編輯執行個體,啟用自動增加儲存空間功能。

內部部署的主要執行個體停滯。 Google Cloud 無法協助處理不在 Cloud SQL 中的執行個體。
重新啟動時關機速度緩慢。 執行個體關機時,如果任何未完成的連線未在 60 秒內結束,就會導致關機程序不乾淨。

只要連線時間少於 60 秒,就能避免大多數不乾淨的關機,包括來自資料庫命令提示字元的連線。如果長時間 (數小時或數天) 開啟這些連線,關機時可能會發生不乾淨的關機程序。

無法刪除使用者。 使用者可能在資料庫中擁有依附於該物件的物件。您必須捨棄這些物件,或將其重新指派給其他使用者。

找出依附於該使用者的物件,然後捨棄或重新指派給其他使用者。

這篇 Stack Exchange 討論串說明如何找出使用者擁有的物件。
特定查詢的執行速度緩慢。 查詢速度緩慢的原因有很多,大多與特定資料庫層面有關。其中一個可能涉及 Cloud SQL 的原因是網路延遲,也就是來源 (寫入者或讀取者) 資源和目的地 (Cloud SQL) 資源位於不同區域時,

請特別參閱 一般效能提示

如果資料庫插入、更新或刪除作業速度緩慢,請考慮採取下列行動:

  • 檢查寫入者與資料庫的位置;長距離傳送資料會導致延遲發生。
  • 檢查讀取器和資料庫的位置;延遲對讀取效能的影響,甚至比寫入效能更大

為減少延遲,建議您將來源和目的地資源都放在相同區域。

系統指出記憶體不足,但監控圖表並未顯示此情況。 執行個體可能會失敗並回報 Out of memory,但 Google Cloud 控制台或 Cloud Monitoring 圖表似乎仍顯示有剩餘記憶體。

除了工作負載,其他因素也可能影響記憶體用量,例如有效連線數和內部額外負荷程序。這些內容不一定會反映在監控圖表中。

請確保執行個體有足夠的額外負荷,可因應工作負載,以及一些額外負荷。

復原已刪除的執行個體。 刪除執行個體後,會永久失去該執行個體上的所有資料,包括備份在內。

如要保存資料,請先 將資料匯出至 Cloud Storage,再 刪除執行個體

Cloud SQL 管理員角色具備刪除執行個體的權限。為避免誤刪,請只在必要時授予這個角色。

您想重新命名現有的 Cloud SQL 執行個體。 系統不支援重新命名現有執行個體。

您也可以建立新執行個體,達成相同目標。

  • 您可以複製要重新命名的執行個體,並為複製的執行個體設定新名稱。這樣一來,您就能建立新執行個體,不必手動匯入資料。如同建立新執行個體時,複製的執行個體會有新的 IP 位址。
  • 您可以從執行個體匯出資料至 Cloud Storage bucket,然後使用所需的新名稱建立新執行個體,再將資料匯入新執行個體。

在這兩種情況下,作業完成後,您都可以刪除舊執行個體。建議您選擇複製,因為這不會影響效能,也不需要重新設定任何執行個體設定,例如標記、機器類型、儲存空間大小和記憶體。

刪除執行個體時發生錯誤。 如果執行個體已啟用防刪除功能,請確認您打算刪除該執行個體。然後停用防刪除功能,再刪除執行個體。

Private Service Connect

問題 疑難排解
執行個體的服務附件不接受 Private Service Connect 端點。
  1. 檢查端點的狀態。

    gcloud

    如要查看狀態,請使用
    gcloud compute forwarding-rules describe 指令。

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    | grep pscConnectionStatus

    請將下列項目改為對應的值:

    • ENDPOINT_NAME:端點名稱
    • PROJECT_ID:包含端點的 Google Cloud 專案 ID 或專案編號
    • REGION_NAME:端點的區域名稱

    REST

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:包含 Private Service Connect 端點的專案 ID 或專案編號 Google Cloud
    • REGION_NAME:區域名稱
    • ENDPOINT_NAME:端點名稱

    HTTP 方法和網址:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    {
      "kind": "compute#forwardingRule",
      "id": "ENDPOINT_ID",
      "creationTimestamp": "2024-05-09T12:03:21.383-07:00",
      "name": "ENDPOINT_NAME",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "IPAddress": "IP_ADDRESS",
      "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
      "serviceDirectoryRegistrations": [
        {
          "namespace": "goog-psc-default"
        }
      ],
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "fingerprint": "FINGERPRINT_ID",
      "pscConnectionId": "CONNECTION_ID",
      "pscConnectionStatus": "ACCEPTED",
      "allowPscGlobalAccess": true
    }
    
  2. 確認端點的狀態為 ACCEPTED。如果狀態為 PENDING,表示執行個體不允許含有端點的 Google Cloud 專案。請確認端點建立所在的網路專案已獲准。詳情請參閱「編輯已啟用 Private Service Connect 的執行個體」一文。

複製

問題 疑難排解
建立唯讀副本時,系統未開始複製作業。 記錄檔中可能會有更具體的錯誤。 檢查 Cloud Logging 中的記錄,找出實際錯誤。
無法建立唯讀副本 - invalidFlagValue 錯誤。 要求中的其中一個標記無效。這可能是您明確提供的旗標,也可能是設為預設值的旗標。

首先,請確認 max_connections 旗標的值大於或等於主要執行個體的值。

如果 max_connections 標記設定正確,請檢查 Cloud Logging 中的記錄,找出實際錯誤。

無法建立唯讀副本 - 發生不明錯誤。 記錄檔中可能會有更具體的錯誤。 檢查 Cloud Logging 中的記錄,找出實際錯誤。

如果錯誤訊息為 set Service Networking service account as servicenetworking.serviceAgent role on consumer project,請停用並重新啟用 Service Networking API。這項動作會建立必要的服務帳戶,以便繼續進行程序。

磁碟空間已滿。 建立副本時,主要執行個體的磁碟大小可能會達到上限。 編輯主要執行個體,將其升級為較大的磁碟大小。
磁碟空間大幅增加。 如果某個時段未主動用於追蹤資料,PostgreSQL 會無限期保留 WAL 區隔,導致磁碟空間無限擴充。如果您在 Cloud SQL 中使用邏輯複製和解碼功能,系統會自動建立及捨棄複製時段。如要偵測未使用的複寫位置,請查詢 pg_replication_slots 系統檢視畫面,並依 active 欄篩選。未使用過的時段可以捨棄,使用 pg_drop_replication_slot 指令移除 WAL 區段。
副本執行個體使用的記憶體過多。 副本會使用暫存記憶體快取經常要求的讀取作業,因此使用的記憶體可能比主要執行個體多。

重新啟動副本執行個體,即可回收暫存記憶體空間。

複製作業已停止。 儲存空間已達上限,且未啟用自動增加儲存空間功能。

編輯執行個體,啟用 automatic storage increase

複製延遲持續偏高。 副本的寫入負載過高,如果備用資源上的 SQL 執行緒無法跟上 IO 執行緒,就會發生複製延遲。某些查詢或工作負載可能會導致特定結構定義出現暫時或永久的高複製延遲。複製延遲的常見原因包括:
  • 副本上的查詢速度緩慢。找出並修正這些問題。
  • 所有資料表都必須有不重複/主索引鍵。如果資料表沒有唯一/主鍵,每次更新都會導致副本完整掃描資料表。
  • 如果使用以列為基礎的複寫功能,DELETE ... WHERE field < 50000000 這類查詢會造成複寫延遲,因為複本上會累積大量更新。

可能的解決方法包括:

  • 編輯執行個體,增加副本大小。
  • 降低資料庫負載。
  • 將讀取流量傳送至唯讀副本。
  • 將資料表編入索引。
  • 找出並修正寫入查詢速度緩慢的問題。
  • 重新建立副本。
在 PostgreSQL 9.6 中重建索引時發生錯誤。 您會收到 PostgreSQL 的錯誤訊息,指出需要重建特定索引。這項操作只能在主要執行個體上進行。如果您建立新的副本執行個體,很快就會再次發生相同錯誤。在 PostgreSQL 10 以下版本中,雜湊索引不會傳播至副本

如果必須使用雜湊索引,請升級至 PostgreSQL 10 以上版本。否則,如果您也想使用副本,請勿在 PostgreSQL 9.6 中使用雜湊索引。

主要執行個體上的查詢一律會執行。 建立副本後,查詢 SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' 應會在主要執行個體上持續執行。
建立副本時發生逾時錯誤。 主要執行個體上未提交的長期交易可能會導致唯讀備用資源建立失敗。

停止所有執行中的查詢後,重新建立副本。

如果主要執行個體和副本的 vCPU 大小不同,查詢最佳化工具會將 vCPU 大小納入考量,因此可能會發生查詢效能問題。

如要解決這個問題,請完成下列步驟:

  1. 開啟 log_duration 旗標,並將 log_statement 參數設為 ddl。這可讓您瞭解資料庫的查詢和執行時間。不過,視工作負載而定,這可能會導致效能問題。
  2. 在主要執行個體和唯讀備用資源上,針對查詢執行 explain analyze
  3. 比較查詢計畫並檢查差異。

如果是特定查詢,請修改查詢。舉例來說,您可以變更聯結的順序,看看是否能提升效能。