Postgres如何儲存行? - Ketan

banq發表於2022-02-18

在這篇文章中,我將嘗試深入瞭解實現級別的細節並繪製出 PostgreSQL 行儲存的真正工作原理。

需要說明的是,PostgreSQL 在磁碟上儲存了大量檔案,例如事務提交資料、子事務狀態資料、預寫日誌 (WAL) 等。我只會探索堆檔案。現在什麼是堆檔案?堆檔案只是一個記錄檔案。請注意,堆檔案與堆記憶體無關。儘管它們的用例非常相似,都是儲存動態資料。

PostgreSQL 將實際資料儲存到段檔案(通常稱為堆檔案)中。通常它固定為 1GB 大小,但您可以在編譯時使用--with-segsize. 當一個表或索引超過 1 GB 時,它被劃分為千兆位元組大小的段。這種安排避免了在有檔案大小限制的平臺上出現的問題,但對於任何現代平臺來說,1GB 都是非常保守的選擇。

這些段檔案包含固定大小頁面中的資料,通常為 8Kb,儘管在使用選項編譯伺服器時可以選擇不同的頁面大小,--with-blocksize但在考慮效能和可靠性權衡時,此大小通常屬於理想大小。如果頁面大小太小,行將不適合頁面,如果太大,則存在寫入失敗的風險,因為硬體通常只能保證固定大小的塊的原子性,這些塊可以在磁碟之間變化(通常範圍從 512位元組到 4096 位元組)。

更多點選標題

相關文章