2012-05-09 14 views
1

我注意到,在添加或刪除PostgreSQL數據庫中的索引時,效果(分別增加和減少性能)在4-5分鐘後生效。與此同時,我不做任何服務器重啓。PostgresSQL指數表現收益/損失在短時間後生效

任何想法爲什麼發生這種情況?

+0

這有更高的機會在http://dba.stackexchange.com上獲得回答 –

+0

是否有可能您的CREATE | DROP INDEX語句在事務中幾分鐘後纔會提交COMMIT?例如,'psql -1 -f script.sql'會將整個腳本執行封裝在一個事務中,所以如果腳本創建了索引,然後做了幾分鐘的更多工作,那麼索引對任何其他處決直到整個劇本完成。如果AUTOCOMMIT在.psqlrc中關閉,您也可能會遇到這種情況。 – dbenhur

回答

1

發生這種情況的原因很可能是因爲自動真空處理啓動並更新了這些索引的統計信息(作爲「副作用」)。

只有當統計數據是最新的規劃師可以充分利用他們。

嘗試在下次添加或刪除your_table索引時運行analyze verbose your_table並查看是否立即「激活」它。如果是這樣,那麼這是導致這種「延遲」的更新統計信息