Postgresql

Postgresql:刷新物化視圖失敗,“設備上沒有剩餘空間”和磁碟使用量激增

  • July 19, 2020

我有一個物化視圖,每五分鐘刷新一次。SQL 聚合了許多表中的數據,每個表有超過 800k 行。

但是,當使用“REFRESH MATERIALIZED VIEW CONCURRENTLY tableName”時,查詢執行了大約一個小時,然後抱怨: ERROR: could not write block 39760692 of temporary file: No space left on device

需要注意的是,每次執行查詢時,這個 39760692 都會發生變化。

磁碟大小約為 960 GB,數據庫大小約為 30 GB。所以磁碟有大約 930 GB 的可用空間。

我注意到,在執行刷新查詢時,磁碟使用量出現了大約每分鐘 12GB 的巨大峰值,然後當它達到 960 GB 標記時,最終查詢錯誤並且沒有空間錯誤。立即,磁碟使用量從異常增長恢復到 30GB。

我什至嘗試過REFRESH MATERIALIZED VIEW tableName(沒有同時)並看到相同的行為。

我不確定在這裡可以做些什麼來診斷問題。

查找 postgres 為您寫入臨時文件的位置並在刷新期間跟踪它。當您在數據庫中處理大量數據時,postgres 必須編寫一個巨大的臨時文件,當它填滿您的磁碟時,您會收到一個錯誤。

您可能必須找到一種更有效的方式來編寫查詢。

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