2015-06-07 47 views
2

我想優化批量加載例程。我可以在PostgreSQL中使用TRUNCATE + COPY/FREEZE替換TRUNCATE + COPY + ANALYZE 9.3

目前我在加載數據的步驟(我不是遵循以下SQL語法,只是算法):

BEGIN 
TRUNCATE table 
COPY into table 
ANALYZE table 
COMMIT 

PostgreSQL 9.3在此之前是重新裝載表的唯一推薦的方式。版本9.3介紹了FREEZE選項,可以使用COPY命令。標準文件說:

FREEZE

請複製與已凍結的行中的數據,就像 他們將運行真空冷凍命令後。這是 ,旨在作爲初始數據加載的性能選項。只有在當前子事務中創建或截斷了正在加載的表格 時,纔會凍結行 ,沒有打開遊標並且沒有此事務持有較舊快照的 。

我的直接問題是我是否仍然需要在COPY/FREEZE之後運行ANALYZE。標準文檔沒有給出任何直接的建議。以下順序是否足夠了?還是需要運行ANALYZE

BEGIN 
TRUNCATE table 
COPY/FREEZE table 
COMMIT 

謝謝!

回答

3

是的,你還是應該ANALYZE強制立即表統計生成後,你COPY入數據。

無論元組被凍結與否無關的統計,這是爲了避免後面的反環繞真空的方式活動。

+0

這是我的一廂情願。這將是一個不錯的功能,但它可以節省服務器資源,以便在數據加載時收集統計信息。謝謝克雷格。 –

+0

@cherio這樣做會很有趣,是的......'複製...與統計'。歡迎補丁:頁 –