2014-03-31 16 views
1

如何使用C API爲多個環境配置共享緩存?就像Java版一樣。 http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/env.html#multienvsharedcache如何使用C API爲多個環境配置共享緩存?

我想打開大量的數據庫,至少100,000。但隨着數據庫數量的增加,db-> open操作變得非常緩慢。它幾乎花費了2個小時到100,000個數據庫。 所以我嘗試將這些數據庫分發到多個環境(例如5個envs)。爲了提高內存使用的效率,我想在envs之間共享緩存。

回答

0

我敢肯定你不能用C API來做到這一點。但是,考慮一些替代解決方案:

  1. 對每個環境使用相對較小的緩存。您只需在每個環境的緩存中擁有足夠的內存以保存讀取的工作集頁面。
  2. 打開相同環境中的所有數據庫。但是,如果你需要獨立恢復每個數據庫,這是行不通的。

由於系統正在交換,很可能需要很長時間才能打開所有這些數據庫。但即使每個環境的1MB緩存需要100GiB的RAM。您可以在每個環境中使用96KiB或更小的緩存,這個緩存小於10GiB。試試16KiB!

這不會破壞性能,因爲它似乎可能。您的操作系統在緩存磁盤上的數據方面已經做得不錯。

如果你可以在同一個環境中打開所有的數據庫,那更好。

+0

我想你說的16KiB意味着數據庫緩存。我希望在環境中將緩存大小設置爲5GiB。嘗試在環境內創建的數據庫中設置緩存大小是錯誤的,因爲在Berkeley DB環境中打開的數據庫使用爲環境指定的緩存。 – roczhang

+0

嗯,不......我的意思是在每個環境中都有一個16KiB的緩存,因爲它看起來像是你每個數據庫使用一個環境。顯然,在100,000個環境中,每個環境都不能擁有5GiB緩存! –