疑難排解

請前往下列任一頁面,查看您的問題是否已獲得解決:

本頁主題包括:

備份與還原

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

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

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

查看記錄並篩選文字,找出使用者。您可能需要使用稽核記錄來處理私人資訊。相關記錄檔案包括:

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

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

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

自動備份作業卡住好幾個小時,且無法取消。 視資料庫大小而定,備份作業可能需要較長時間。

如果您確實需要取消作業,可以請 客戶服務團隊force restart執行個體。

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

請先 建立資料庫使用者,再還原 SQL 傾印內容。

您想將自動備份的保留天數從七天增加到 30 天或更久。 您可以 設定要保留的自動備份數量,範圍為 1 到 365。系統會根據設定的保留值定期刪除自動備份。很抱歉,這表示您只能從目前顯示的備份資料還原自動備份。

如要無限期保留備份,您可以建立隨選備份,因為系統不會以與自動備份相同的方式刪除隨選備份。隨選備份會無限期保留。也就是說,這些備份會一直存在,直到您刪除備份或刪除其所屬的執行個體為止。由於這類備份不會自動刪除,因此可能會影響計費。

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

建議做法:

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

CREATE UNLOGGED TABLE ...

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

  • 在 HA 例項中,未記錄的資料表內容不會在備援失敗時保留。
  • 未記錄的資料表無法在 Postgres 發生當機時保留。
  • 系統不會將未記錄的資料表複製到唯讀副本。
  • 備份還原作業期間,未登錄的資料表會自動清除。

解決方法是避免使用未記錄的資料表,如果您想透過備份還原這些資料表,如果您要從已含有未記錄資料表的資料庫進行還原,可以將資料庫傾印到檔案,然後在這些資料表上將傾印檔案修改為 ALTER TABLESET 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 或同等工具,請使用 DNS 名稱做為 servername 參數。使用 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 不提供自動匯出資料的方式。

您可以使用 Google Cloud產品 (例如 Cloud Scheduler、Pub/Sub 和 Cloud Run 函式) 建構自己的自動匯出系統,類似於本文中說明的 自動備份

旗標

問題 疑難排解
您可以為工作階段設定時區,但在您登出時,時區就會失效。

連結至資料庫,並將資料庫時區設為所需時區 (每位使用者或每個資料庫)。

在 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 傾印檔案,且匯入工作已執行約四天,就會出現這則錯誤訊息。

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 整合功能,您必須擁有 Cloud SQL for PostgreSQL 資料庫,且版本必須為 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. Vertex AI 中沒有機器學習模型或 LLM。
錯誤訊息: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)。

記錄檔不易閱讀。 您可以使用 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%。您應該避免交易包裝,因為這可能會阻斷寫入作業。

autovacuum 工作可能會遭到封鎖,或是無法快速回收交易 ID,以便跟上工作負載。

為避免交易環繞錯誤導致服務中斷,您可以參考這些自助服務提示,瞭解如何處理 TXID 環繞錯誤。

如需一般調整建議,請參閱「 在 PostgreSQL 中最佳化、監控及疑難排解真空作業」。

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

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

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

在刪除時間附近的記錄中查看,看看是否有從資訊主頁或其他自動化程序執行的不明指令碼。

無法刪除執行個體。 您可能會看到錯誤訊息 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 值區,然後使用所需的新名稱建立新的執行個體,再將資料匯入新執行個體。

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

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

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 端點的 Google Cloud 專案 ID 或專案編號
    • 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 執行緒無法跟上 I/O 執行緒時,就會發生複製延遲。某些類型的查詢或工作負載,可能會導致特定結構定義的複製延遲時間暫時或永久性偏高。複製延遲的常見原因包括:
  • 複本上的查詢速度緩慢。找出並修正這些問題。
  • 所有資料表都必須有專屬/主索引鍵。在這種沒有唯一/主鍵的資料表上進行的每項更新,都會導致備援資料庫進行完整資料表掃描。
  • 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. 比較查詢計畫並檢查差異。

如果這是特定查詢,請修改查詢。舉例來說,您可以變更彙整順序,看看是否能獲得更佳成效。