匯入及匯出的最佳作法
以下是匯入及匯出資料時應考慮的最佳做法:
- 請勿使用 Cloud Storage Requester Pays bucket
- 盡量減少匯出作業對效能的影響
- 建立 SQL 傾印檔案時使用正確標記
- 壓縮資料以減少費用。
- 減少長時間執行的匯入與匯出程序
- 驗證匯入的資料庫
請勿使用 Cloud Storage「要求者付費」值區
當您從 Cloud SQL 執行匯入和匯出作業時,不能使用已啟用要求者付費的 Cloud Storage 值區。
盡量減少匯出作業對效能的影響
從 Cloud SQL 進行標準匯出時,資料庫必須處於連線狀態。如果匯出的資料量較小,影響可能不大。不過,如果資料庫或物件 (例如資料庫中的 BLOB) 很大,匯出作業可能會導致資料庫效能降低。這可能會影響對資料庫執行資料庫查詢和作業所需的時間。匯出作業開始後,如果資料庫開始緩慢回應,就無法停止作業。
如要避免匯出期間回應速度變慢,請採取下列做法:
從唯讀備用資源匯出資料。如果您經常匯出資料 (每天或更頻繁),但匯出的資料量不大,這或許是不錯的選擇。如要從唯讀副本執行匯出作業,請在唯讀副本執行個體上使用 Google Cloud 控制台、
gcloud
或 REST API 匯出函式。如要進一步瞭解如何建立及管理唯讀副本,請參閱「 建立唯讀副本」。使用無伺服器匯出功能。使用無伺服器匯出功能時,Cloud SQL 會建立獨立的暫時執行個體,卸載匯出作業。卸載匯出作業後,主要執行個體上的資料庫就能繼續以正常效能速率處理查詢及執行作業。資料匯出完成後,系統會自動刪除暫時執行個體。如果您要一次性匯出大型資料庫,建議採取這個方法。使用 Google Cloud 控制台、
gcloud
或 REST API 匯出函式,並加上offload
標記,即可執行無伺服器匯出作業。在無伺服器匯出作業期間,您可以執行其他作業,例如編輯執行個體、匯入及容錯移轉。不過,如果您選取「
請參閱下表,瞭解無伺服器匯出作業執行期間可封鎖的作業:delete
」,匯出作業會在您刪除執行個體後停止,且不會匯出任何資料。目前作業 新作業 遭到封鎖? 任何作業 無伺服器匯出 是 無伺服器匯出 無伺服器匯出以外的任何作業 否 無伺服器匯出以外的任何作業 無伺服器匯出以外的任何作業 是 無伺服器匯出作業需要較長時間,因為系統需要時間建立暫時執行個體。至少需要五分鐘以上,但如果是較大的資料庫,可能需要更長時間。決定要使用哪種匯出類型前,請先考量對時間、效能和費用的影響。
建立 SQL 傾印檔案時使用正確標記
如果您將資料匯出為 SQL 傾印檔案時,沒有採用正確的程序,則匯入時可能無法成功執行。如需瞭解如何建立 SQL 傾印檔案以匯入 Cloud SQL,請參閱匯出資料。
壓縮資料以減少費用
Cloud SQL 支援匯入及匯出已壓縮及未壓縮的檔案。壓縮可以節省 Cloud Storage 中的大量儲存空間並減少儲存成本,特別是在您要匯出大型執行個體時。
匯出 SQL 傾印檔案或 CSV 檔案時,請使用.gz
副檔名來壓縮資料。匯入副檔名為 .gz
的檔案時,檔案會自動解壓縮。
減少長時間執行的匯入與匯出程序
視處理的資料大小而定,匯入 Cloud SQL 和從 Cloud SQL 匯出資料可能需要很長時間才能完成。這可能會造成下列影響:
- 您無法停止長時間執行的 Cloud SQL 執行個體作業。
- 每個執行個體一次只能執行一項匯入或匯出作業,而且長時間執行的匯入或匯出作業會封鎖其他作業,例如每日自動備份。無伺服器匯出作業可讓您執行其他作業,包括編輯執行個體、匯入、容錯移轉,以及解除封鎖每日自動備份。
如要縮短完成各項作業所需的時間,請使用 Cloud SQL 匯入或匯出功能,但請用於小批資料。
如要匯出資料,您可以從唯讀副本執行匯出作業,或使用無伺服器匯出功能,盡量減少對資料庫效能的影響,並在匯出作業執行期間,讓執行個體執行其他作業。
如需更多提示,請參閱診斷 Cloud SQL 執行個體的問題。驗證匯入的資料庫
匯入作業完成後,請連線至資料庫並執行適當的資料庫指令,確認內容正確無誤。舉例來說,您可以連線並列出資料庫、資料表和特定項目。
已知限制
如需已知限制的清單,請參閱「匯入及匯出資料時的問題」。
自動執行匯出作業
雖然 Cloud SQL 並未提供自動匯出資料庫的內建方式,但您可以使用多個 Google Cloud元件建構自己的自動化工具。詳情請參閱 這篇教學文章。
疑難排解
排解匯入作業問題
問題 | 疑難排解 |
---|---|
錯誤訊息: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 資料庫中定義的自訂資料庫角色。預設 如要解決這個問題,請完成下列步驟:
|
排解匯出作業問題
問題 | 疑難排解 |
---|---|
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 在特定時間範圍內 (通常約為七分鐘) 未收到任何資料,連線就會重設。可能是初始匯出查詢執行時間過長。 使用
|
您希望系統自動匯出資料。 | Cloud SQL 不提供自動匯出功能。 您可以使用 Cloud Scheduler、Pub/Sub 和 Cloud Run 函式等產品,自行建構自動匯出系統,類似於這篇 自動備份文章。 Google Cloud |