我目前正在清理一個有2個索引和2億5千萬活動行的表,並且大約有許多死行(或更多)。我從我的客戶端計算機(筆記本電腦)向我的服務器發佈了命令VACCUM FULL ANALYZE。它在過去的3-4天左右一直在進行其業務;我想知道它是否會很快結束,因爲我有很多工作要做!PostgreSQL長真空
該服務器採用四核Xeon 2.66 GHz處理器,12 GB或RAM,RAID控制器連接到RAID 1配置中的2 x 10K rpm 146 GB SAS HD;它正在運行Suse Linux。我在想...
現在,首先,VACUUM postmaster過程似乎只使用一個內核。其次,我沒有看到I/O寫入I/O空閒時間比例非常高。第三,從調用procinfo
,我可以推斷出VACUUM進程花費大部分時間(88%)等待I/O。
那麼,爲什麼它不通過線程利用更多的內核來使RAID控制器過載(獲得高I/O寫入空閒率)呢?爲什麼在I/O負載不高的情況下等待I/O?它的手指上的所有這些能量/資源爲什麼不會更快?在我看來,VACUUM可以並且應該是多線程的,特別是如果它在一張巨大的桌子上工作,而且它是唯一可以工作的!
此外,他們的方式來配置postgresql.conf讓它多線程這樣的VACUUMs?我可以殺死它並仍然從其部分清理中受益嗎?我需要在那張桌子上工作。
[我使用PostgreSQL 8.1]
THX再次
你說要殺死真空然後備份桌子,VACUUM的死亡會導致什麼結果?我喜歡你的下降和恢復的想法。 Thx – 2009-01-11 23:53:47
當真空被殺時,沒有什麼不好的事情發生,你只是失去了回收表空間到目前爲止所做的工作。我們有一項工作可以在上午8:00自動殺死任何真空,這樣用戶在進入時不會卡住。如果發生這種情況,我們會在第二天晚上轉儲/恢復。 – 2009-01-13 00:41:00