2010-11-24 66 views
6

我正在Apache Solr項目中工作。 (分佈在雲環境 - Amazon ec2實例中)。關於Solr緩存機制的問題

我注意到Solr在緩存結果方面做得非常出色。 當我再次執行相同的查詢 - 響應狀態Solr QTime 0或1毫秒。

我想強調測試Solr系統。因此,我可以使用一個有限的查詢列表(50 000個唯一查詢)。現在的問題是所有查詢都被緩存了!

當我壓力測試 - 5分鐘左右後 - 我的所有查詢都在Solr &執行。 這使得系統汗流heavy背的重擔:)(女巫是目的)。 但是,當我再次執行相同的查詢集時 - QTime幾乎爲零! - > Solr有一個簡單的時間&沒有強調。

我的問題: 如何打開所有Solr緩存(Solr和Lucence緩存)? 或者如何限制緩存?

我試過把所有的Solr實習生緩存,但緩存仍然停留。 (QueryResultCache和FieldCache) 注意:配置提到Lucence會管理內部緩存 - 也許這個緩存是問題?

奇怪的是,所有50 000個查詢都可以存儲在緩存中 - 開箱即用。

回答

6

您可以在配置中註釋掉filterCache, queryResultCache and documentCacheLucene's FieldCache cannot be disabled

儘管這樣做並沒有什麼意義,即使是基準測試。你還會在操作系統中禁用磁盤緩存嗎? CPU緩存(全部三個級別)?每個硬盤的內部緩存?

緩存是系統的一部分,如果您禁用了它們,您將無法準確模擬生產中發生的情況,從而導致基準測試無效。

+1

+1。 @ user519 ...我不確定註釋是否有幫助。但嘗試將它們設置爲0大小。無論如何:如果你把緩存關閉,基準是無用的! – Karussell 2010-11-24 20:28:42

3

關閉緩存是一個很好的主意,至少那些應用程序特定的。本例中的基準旨在收集查找以前未見過的查詢的響應/成本;而不是那些在緩存中流行的過期。

你聽起來像你想要的指標,告訴你如何搜索系統執行;而不是查詢緩存。

以前的答案確實超出了左邊界,這意味着所有的基準測量都應該是相同的,「他自己對」現實生活中的表現「的定義。這不是工程學的工作原理。

至於有關「磁盤緩存」的評論。 Linux中沒有磁盤緩存;只有一個頁面緩存;無論該頁面是保存在磁盤上,在內存中創建和銷燬還是預分配大型智能文件系統....他們都是頁面。

利用高速緩存進行基準測試是有好處的......如果您打算測量高速緩存性能指標。咄。

順便說一下,在「-server」和「XXcompileThreshold」之間你要確保你的第一大組查詢要麼足夠隨機,要麼專門選擇在Solr/Lucene中儘可能多地執行函數路徑;因此JIT既活躍又有所安定。