2017-02-20 37 views
0

我想知道在哪裏/如何讓PostgreSQL(9.6)處理二級存儲(例如硬盤驅動器)和內存緩衝區之間的內存問題?如何使用PostgreSQL服務器編程(SPI)處理緩衝區和輔助存儲?

例如,當查詢的元組不在緩衝區中時,如何將相關數據加載到內存中;以及如何在內存緩衝區滿時將某些數據刷新到磁盤?

我以前沒有做過服務器編程。但是當我看了Server Programming Interface和關於memory management的部分時,我找不到任何提及的「二級存儲」或「緩衝區」等。這些問題在哪裏處理?

任何人都可以提供一些關於這方面的指針嗎?

回答

0

我想你在這裏很困惑。

上面引用的內存管理函數是分配和管理在函數完成後(但在調用語句結束時釋放)的內存,包含返回給函數調用者的結果。

存儲管理和數據緩衝發生在不同的,更低的層次上,而且你不能通過SPI來影響存儲管理和數據緩衝。 SPI只是運行SQL語句的服務器中運行的C代碼的接口。就共享緩衝區而言,無論您是從psql還是通過SPI發出查詢,都沒有什麼不同。

+0

感謝您的回答。 「存儲管理和數據緩衝發生在不同的,更低的層次上,而且你不能通過SPI來影響。」那麼SPI之外有沒有辦法確保服務器擴展(例如,可以處理存儲管理)?即由於主存儲器限制而不產生內存不足錯誤。 – tinlyx

+0

爲此,您必須正確配置操作系統和數據庫參數。如果內存不足,無法避免OOM ......您嘗試解決的真正問題是什麼? –

+0

例如,如果函數所需的數據超過物理內存而非硬盤空間,則在C中編寫自定義SQL函數,但不要使用OOM。 – tinlyx