2010-12-10 61 views
0

不確定是否沒有DBS,以及這是否確實是一個有用的功能,但是: 有許多關於如何通過調整緩衝區大小來加速數據庫操作的建議。一個例子是將Open Street Map數據(星球文件)導入到Postgres實例中。有一個名爲osm2pgsql(http://wiki.openstreetmap.org/wiki/Osm2pgsql)的工具用於此目的,並且還提供了一個指導,以便爲此調整特定的緩衝區參數。 在導入的最後一步,數據庫正在創建索引,並且(根據我在閱讀文檔時的理解)將從巨大的maintenance_work_mem中受益,而在正常操作期間,這不會太有用。 這個線程http://www.mail-archive.com/[email protected]/msg119245.html相反表明一個很大的maintenance_work_mem在創建最終索引期間沒有太多意義。 理想情況下,DBS應該知道什麼樣的緩衝區大小組合可以讓利潤最大,因爲緩衝區總容量有限。 那麼,是否有一些很好的理由說明爲什麼沒有內置的啓發式方法能夠根據當前任務自動調整緩衝區大小?DBS爲什麼不自動調整/調整緩衝區大小?

回答

0

的問題是相同的,與任何預測軟件。僅僅因爲歷史上發生的事情並不意味着它會再次發生。此外,您需要完成一項任務,以便全面分析如何更有效地完成它。問題是下一個任務不一定像以前完成的任務。因此,如果您的導入例程需要8GB內存才能完成,那麼爲每個只讀用戶分配8GB內存是否合理?反過來也不行。

在離開這個決定人類,數據庫會表現出不適合用來所有情況下的性能特點,但作爲回報,讓我們(人類)單獨優化每一種情況下(如果喜歡)。

另一個重要的方面是大多數人/公司在變化但可能更好的水平上看重可靠和穩定的水平。成本高昂並不像成本差異大。這當然不是一直如此,因爲整個公司都是基於這個事實,偶爾達到1%。

現代數據庫已經做出一些努力來適應自己提出的任務,比如越來越多的sofisticated查詢優化。至少Oracle可以選擇跟蹤影響優化器決策的一些措施(單塊讀取的成本將隨當前負載而變化)。

0

猜測將是非常艱難向右自適應手段得到的旋鈕。首先,您必須向機器查詢很多未知數,比如它有多少內存可用 - 還有未知「您希望在機器上運行多少」。

除非是,通過設置只有max_mem_usage參數,問題是如何使這

  • 很好地適應最典型負載的系統。
  • 有些負載不會有奇怪的病理問題。
  • 是有點可理解的代碼沒有錯誤。

對於PostgreSQL然而,答案也可能是

  • 沒有人寫的,因爲還沒有其他的東西被認爲是更重要的。
  • 還沒寫。