Postgresql

Postgres“無法寫入雜湊連接臨時文件:設備上沒有剩餘空間”

  • December 12, 2015

前段時間我遇到了這個錯誤,我對兩件事感到好奇 -

1- postgres 的內部如何首先導致此消息出現?關於創建數據庫創建的臨時文件的雜湊連接是什麼?我知道這與創建一個超出數據庫記憶體分配範圍的臨時文件有關,但我不知道為什麼它被稱為雜湊連接。

2-如何預測和防止將來發生這樣的錯誤(與性能和記憶體有關)?

1- postgres 的內部如何首先導致此消息出現?

當連接兩個非常大的數據集時,PostgreSQL 可以使用的一種策略是掃描一張表並散列其連接列。然後掃描另一個表並將連接列的雜湊值與為第二個表計算的雜湊值進行比較。

https://en.wikipedia.org/wiki/Hash_join

當您將一個小表連接到一個更大的表時,它非常有效,尤其是在沒有適合連接條件的索引的情況下。

PostgreSQL 可以對更大的表使用雜湊連接策略,它首先將雜湊表分區寫​​入磁碟。這大概就是你得到的。

關於創建數據庫創建的臨時文件的雜湊連接是什麼?

雜湊表。我真的不明白這個問題。

2-如何預測和防止將來發生這樣的錯誤(與性能和記憶體有關)?

有更多的備用磁碟空間用於臨時儲存。它不必在主表空間中;查看temp_tablespaces設置。

據我所知,PostgreSQL 沒有能力估計雜湊表的大小並決定雜湊表對於可用磁碟空間來說太大了。

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