2017-01-29 55 views
1

我對某些數據上的索引結構有一些性能測試。我將並排比較2個索引(如果我將使用2個虛擬機,還沒有決定)。我當然要求結果儘可能保持中立,所以我有這樣的問題,我將不勝感激任何關於......我如何確保/控制什麼影響測試?例如,緩存效果/從一個測試到另一個測試的到達順序將影響結果。我如何衡量這些影響?我如何創建合適的熱身?或者我可以用什麼樣的統計技術來消除這種影響(我認爲只有平均值是不夠的)?PostgreSQL性能測試 - 注意事項?

回答

2

開始之前:

  1. 確保你的表和索引剛剛剛創建和填充。這避免了關於碎片的問題。否則,如果一個測試中的數據是非常分散的,而另一個則不是,那麼您可能會將蘋果與蘋果進行比較,而不是。
  2. 確保您的桌子正確ANALYZEd。這可以確保查詢計劃程序在所有情況下都具有適當的統計信息。

如果你只是想要一個比較,而不是在真實的使用測試,我只是做:

  1. 冷啓動(虛擬)機。等待一段合理但固定的時間(假設5分鐘,或者對您的系統合理),以便所有啓動過程都已經發生並且不會干擾數據庫的執行。
  2. 使用index1執行測試並測量時間(這是您沒有任何數據庫或操作系統緩存的時間)。
  3. 如果您對有緩存的結果感興趣效果:再次執行測試10次(或任意次數的合理大小)。每次測量一次,以考慮由於VM上運行的其他進程而引起的變化以及其他意外情況。

  4. 重新啓動您的機器,並重複測試2的整個過程。有一些方法可以清理OS緩存;但它們非常依賴於系統,並且您沒有辦法清理數據庫緩存。檢查See and clear Postgres caches/buffers?

  5. 如果您真的(或主要)對沒有緩存效果的性能感興趣,則應多次執行整個過程。這是緩慢而乏味的。如果您只對最有可能產生緩存效果的情況感興趣,則不需要重新啓動。

  6. 執行ANOVA(或者您認爲更適合的任何其他統計假設檢驗)來確定您的平均時間是否有統計學差異。

你可以看到在回答一個question about NOT NULL versus CHECK(xx NOT NULL).

+0

謝謝,非常有幫助的評論。是的,最終我只想做一個比較,但要清楚,你對「實際使用」有什麼瞭解? – Zeruno

+2

**實際使用**表示:由於您的應用程序和其他應用程序,數據庫正在運行所有類型的事務。你的服務器也運行其他進程,而不僅僅是數據庫(比如說一個郵件服務器,一個web服務器,文件共享,......你的名字)。在這種情況下,* cache *效果會有很大差異。一些* smallish *表可能會被大量使用,並且始終在數據庫緩存中。其他一些可能只是部分緩存或者根本不緩存......同一確切的查詢可能需要一次到另一次的時間非常不同。 – joanolo

+0

再次非常有幫助,謝謝。 – Zeruno

0

儘可能中性,然後在你的數據庫管理系統的同一個實例創建兩個數據庫進行多次測試的例子,然後創建相同的表空間與數據,使用索引在一個實例,但不是其他。

VM所面臨的挑戰是您仲裁了對磁盤資源的訪問(除非您將每個虛擬機固定到特定的接口和磁盤集)。因此,您的仲裁模式可能因測試而異。消除仲裁的最中性的過程是物理硬件......和兩種情況下的相同硬件。