Performance

pg_restore 比 pg_dump 花費更長的時間

  • March 2, 2011

我定期保存並稍後恢復一個用於測試的小型 PostgreSQL 數據庫。作為測試的結果,它的數據會定期更新,然後必須進行新的轉儲,並且轉儲經常用於重新創建處於明確定義狀態的數據庫。

我注意到轉儲(使用pg_dump -Fc database)只需要幾秒鐘,但恢復(pg_restore -d database)大約需要一分鐘。這似乎很奇怪。我本來預計兩者都需要大約相同的時間(假設這兩個任務都是 I/O 綁定的)。

還原有問題嗎?我可以讓它更快嗎?還是恢復比轉儲花費更長的時間是正常的?(如果是,那為什麼?)

轉儲文件通常有大約 3-4 MiB;DBMS 是 PostgreSQL V8.4,在 Ubuntu Linux 下執行在具有 1GiB RAM 的 Pentium4 3GHz 上。

索引的內容不是備份的一部分,只是索引的定義。這只需要幾個字節。當在恢復過程中創建索引並索引所有數據時,它會大得多。這需要時間,但這取決於你的情況需要多少時間。

pg_restore確實有一個並發恢復的選項(從 8.4 版開始),使用--jobs=number-of-jobs

對於還原,數據庫必須做很多額外的工作:

有些事情立刻浮現在腦海:

  • 寫比讀慢
  • 解析輸入需要時間
  • 更新索引和其他內部結構
  • 保持參照完整性

不過,不確定這是否等於時差。

引用自:https://serverfault.com/questions/242137