我正在考慮爲即將推出的項目提供各種支持MVCC的數據庫,並將PostgreSQL引入我的視線。我可以每1-2分鐘運行一次PostgreSQL真空吸塵器嗎?
我的程序的要求,包括大致是如下順序:
從數據庫中讀取當前版本的一些信息,修改數據的80%-90%,並在一個寫回或更多的交易(想象在Conway的生命遊戲中更新網格,需要網格的新老狀態)。
等待提交後1-2分鐘。在此期間,客戶可以針對新數據發佈讀取內容。
重複。
數據庫將被限制在2-4GB之類。
〜90%的變化是對現有對象的更新,〜5%將是新對象,〜5%將被刪除對象。
所以我的問題是,我可以合理地每隔1-2分鐘運行一次普通的VACUUM命令作爲步驟1.5,並讓PostgreSQL能夠跟上每次可能的2-3 + GB的更改嗎?
您可能不需要手動運行它。調整該特定表的自動真空設置應該足夠了。但是,當您刪除或插入大量行時,真空是非常必要的。更新將不需要這樣一個積極的真空。 – 2012-03-13 22:50:55
我的理解是,每次更新都會生成一個新的XID記錄,並且由於每個循環都會更新80-90%的對象,因此我期望有許多「舊」記錄進行清理。 – MindJuice 2012-03-13 22:56:09
也許同樣重要的是要注意,在步驟1運行時,客戶端也可能會從步驟「0」發出針對數據庫的「舊」狀態的讀取,因此這些舊記錄需要在新記錄時可用產生。 – MindJuice 2012-03-13 22:59:18