2014-02-24 23 views
1

在機器中安裝了postgres 9.1。postgres將數據庫複製到另一臺服務器減少數據庫大小

最初數據庫大小爲7052 MB,然後我使用以下命令複製到另一臺服務器。

pg_dump -C dbname | bzip2 | ssh [email protected] "bunzip2 | psql dbname" 

成功複製後,在目標機器我檢查大小它顯示6653 MB。

然後我檢查表的數量是否相同。

是否有數據丟失?是否缺少數據?

說明: 兩臺機器具有相同的硬件和軟件配置。

我用:

SELECT pg_size_pretty(pg_database_size('dbname')); 

回答

3

這看起來很正常。恢復後數據庫通常較小,因爲新創建的b-tree索引比通過插入逐步構建的索引更緊湊。此外,UPDATE s和DELETE s在表格中留下空白空間。

所以你沒有什麼可擔心的。你會發現,如果你不同於舊數據庫的SQL轉儲和從剛還原的數據庫中獲取的轉儲,它們將與註釋不同。

3

PostgreSQL最複雜的特性之一就是所謂的多版本併發控制(MVCC),這是一種避免數據庫中同一對象讀寫衝突的標準技術。 MVCC通過讀取由併發事務修改的對象的非當前數據來保證每個事務都能看到數據庫的一致視圖。感謝MVCC,PostgreSQL具有出色的可擴展性,強大的熱備份工具以及與最先進的商業數據庫相媲美的許多其他不錯的功能。

不幸的是,MVCC有一個缺點,數據庫往往會隨着時間的推移而增長,有時可能會成爲問題。在最新版本的PostgreSQL中,有一個獨立的服務器進程叫做autovacuum守護進程(pg_autovacuum),其目的是保持數據庫大小合理。它通過嘗試恢復數據庫文件的可重用塊。儘管如此,有很多場景會強制數據庫增長,即使其中的有用數據量沒有真正改變。如果在使用數據庫的應用程序中有大量的UPDATE和/或DELETE語句,通常會發生這種情況。

當你做一個複製,你恢復多餘的空間,所以你複製的數據庫顯得更小。

+2

除了MVCC之外,新建索引小於逐漸構建的索引。 –

相關問題