Postgresql

如何獲取一個非常大的 postgres 數據庫的 pg_dump?

  • June 26, 2015

我有一個在 Cent OS 6.5 上執行 Postgres 8.4 的生產數據庫伺服器。數據量最近有所增加,在幾個月內數據庫現在有 18500 個表,數據庫大小約為 350GB。

問題是現在我什至無法獲取該數據庫的 pg_dump,每次嘗試時都會出現max_number_of_shared_locks的****OutOfSharedMemory錯誤(目前值為256而不是預設值 64)?

這麼大的數據庫怎麼能轉儲呢?請幫忙..

實際上問題是一些執行以下任務的數據庫程序由於一些新引入的錯誤而停止工作。執行以下任務的程序:-

  1. 總結數據
  2. 在其他表中插入匯總數據
  3. 截斷表(以減小大小並防止創建新表)

這就是為什麼由於這種副作用而創建了近 15K+ 表的原因。

我做了以下事情來解決這個問題:

  1. 解決了過程邏輯中的錯誤,使其開始工作,因此不會創建新表。
  2. 創建特殊程序以定期匯總表的積壓(那些未匯總的 15K+ 表)。
  3. 一旦正確創建摘要而不是截斷,我就刪除了表格。

我沒有一次執行第 2 步和第 3 步,而是在 2-3 天內分批執行,我的數據庫顯著減少,之後我可以使用 pg_dump。

感謝你的幫助..

您好,您需要更改 postgresql.conf 文件中的 max_locks_per_transaction,該文件通常位於 /var/lib/pgsql/data 或您為 PostgreSQL 安裝數據目錄的任何位置。

這裡已經回答

您將不得不重新啟動 PostgreSQL 服務。

上面的答案還談到必須可能增加共享記憶體。這是關於該主題的 PostgreSQL 文章的連結。

引用自:https://dba.stackexchange.com/questions/51742