我正在使用 CloudSQL - GCP 的 postgresql12 版本。
我們目前正在輸入數十億的資料,我們不希望輸入中途中斷。
但是,我在 CloudSQL 標志中將 autovacuum 設定設定為關閉,但它似乎每天都會自動完成。
隨著 autovacuum 的進行,使用 python sqlalchemy 的輸入會導致錯誤。
sqlalchemy.exc.OperationalError: (psycopg2.errors.ProgramLimitExceeded) multixact "members" limit exceeded
DETAIL: This command would create a multixact with 2 members, but the remaining space is only enough for 1 member.
HINT: Execute a database-wide VACUUM in database with OID 16427 with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings.
解決辦法是什么?
uj5u.com熱心網友回復:
解決方法是按照提示操作。這是必要的,以防止您的資料庫遭受資料損壞。根本原因是 multixact 包含事務編號,如果這些編號環繞(在大約 20 億個事務之后),某些表行可能會突然看起來被鎖定。
正如檔案所說:
作為一種安全設備,對于 multixact-age(參見第 25.1.5.1 節)大于 autovacuum_multixact_freeze_max_age 的任何表都會進行主動真空掃描。此外,如果 multixacts 成員占用的存盤空間超過 2GB,則會更頻繁地對所有表進行主動真空掃描,從具有最舊 multixact-age 的表開始。即使名義上禁用了 autovacuum,這兩種主動掃描也會發生。
顯然,資料庫一次又一次地拼命啟動以防止最壞情況發生的自動清理運行沒有成功。您應該查看日志檔案以找出原因。
花點時間,保存您的資料庫。然后找出為什么反環繞自動真空首先失敗并解決該問題。并啟用自動真空!如果需要,您可以在將資料加載到單個表中時暫時禁用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361566.html
