Postgresql

何時分析列?

  • June 2, 2021

我有一張包含數百萬條記錄的表。在選擇之前,我執行分析表 (col1, col2)。

我們想要降低成本,因為很多 IO 操作都發生在 AWS Aurora 中。

我是否應該僅在我們知道數據發生重大變化時才執行分析?或者它是否總是需要執行,即使只有一些數據發生了變化?

通常,您不需要ANALYZE自己執行。這是由 autovacuum 自動完成的。如果您發現在某些情況下您的統計數據不夠好,您應該為受影響的表調整自動分析,以便它更頻繁地執行或收集更多數據。

PostgreSQL 根據 autovacuum_analyze_threshold 和 autovacuum_analyze_scale_factor 的設置自動分析表。正常情況下,表翻10%時會自動分析表。如果這還不夠,最好更改這些設置而不是不斷手動執行 ANALYZE。

但是在某些情況下,自動系統無法正常工作。

  • 您剛剛創建了一個表達式索引。
  • 您剛剛使用CREATE STATISTICS.
  • 您剛剛設置statisticsn_distinct使用ALTER TABLE ALTER COLUMN col_name ....
  • 你剛剛改變了default_statistics_target
  • 這是一張TEMPORARY桌子。其他會話(包括 autovacuum “會話”)無法看到臨時表。

此外,如果您剛剛完成某種批量更新或批量導入,則應該自動分析該表,但您可能不想等待它啟動然後完成。如果您想在繼續之前確定它已經完成,那麼手動執行 VACUUM ANALYZE 是有意義的。

引用自:https://dba.stackexchange.com/questions/292642