Performance
pg_restore 比 pg_dump 花費更長的時間
我定期保存並稍後恢復一個用於測試的小型 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
對於還原,數據庫必須做很多額外的工作:
有些事情立刻浮現在腦海:
- 寫比讀慢
- 解析輸入需要時間
- 更新索引和其他內部結構
- 保持參照完整性
不過,不確定這是否等於時差。