[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測

TPC(Transaction Processing Performance Council)是一個組織,翻成中文就叫「交易處理效能委員會」,這個委員會的主要功能是定義一些交易處理及資料庫效能量測的標準,其中 TPC-C 標準是測量 OLTP 系統的 tpmC(每分鐘可以處理的 Transaction 數量)來看看 OLTP 系統輸出的效能,而 HammerDB 就是一個提供 TPC-C 標準量測的 Open Source 工具。

TPC-C 模擬的情境

TPC-C 模擬的情境是一個大型的商品批發商,擁有若干個倉庫,每個倉庫擁有 100000 件商品庫存、負責為 10 個地區供貨,每個地區服務 3000 名客戶,每名客戶平均一筆訂單有 10 項商品,所有訂單中約 1% 在其直屬的倉庫中沒有貨,需要從其他倉庫來調貨。

在模擬的情境之中,TPC-C 會測試 5 種典型的 OLTP 交易:

  • New-Order:User 新增一筆訂單
  • Payment:User 支付貨款,更新 User 的帳戶餘額。
  • Order-Status:User 查詢訂單最新的狀態
  • Delivery:出貨
  • Stock-Level:查詢庫存

安裝及開啟 HammerDB

HammerDB 我們可以在這裡下載到,選擇欲安裝的版本下載安裝之後,我們切換到安裝目錄底下 。

雙擊 hammerdb.bat 就可以開啟 HammerDB

確認 C:\Temp 資料夾存在

執行負載測試的過程中需要產生 Output Log,HammerDB 預設儲存 Output Log 的目錄就是 C:\Temp,如果 C:\Temp 不存在則會放在 C:\ 底下,但是這就麻煩了,因為要在 C:\ 建立檔案是需要給予系統管理員權限,所以我們還是確保 C:\Temp 存在比較容易一點。

選擇 SQL Server Benchmark

雙擊 SQL Server 節點

選擇 MSSQL ServerTPC-C

Schema Build - 建立資料庫

雙擊 Schema Build/Options

輸入 Build Options

畫面上特別要關注三個參數:

SQL Server Database,資料庫存不存在無所謂,不存在會自動建,但是必須是空的。

Number of Warehouses,官方的 SQL Server Quick Start 建議我們可以先設 10 個倉庫,我乖乖聽話設為 10 個後,它 build 好久,所以我們先設 3 個倉庫就好了。

Virtual Users to Build Schema 可以設成與負責執行負載測試工作的機器核心數一樣的數字,比如說,我是在我的 Notebook 執行負載測試工作,我的 Notebook 核心數是 8,則 Virtual Users to Build Schema 可以設為 8,但是不能大於 Number of Warehouses,不過建議一開始不要設太多,會跑很久,我們先設個 2 就好了。

設定完後就雙擊 Build,畫面的右方就可以看到正在 Build Schema。

要等個好幾分鐘,完成後畫面上會出現 TPCC SCHEMA COMPLETE 的訊息,中間區塊的 Status 也都會是綠色勾勾,接著按下紅色警示燈號按鈕停止工作。

Driver Script - 產生負載測試的腳本

雙擊 Driver Script/Options

輸入 Driver Options

這裡有三個參數比較特別:

TPC-C Driver Script,如果我們選擇預設值 Standard Driver Script 那 HammerDB 會把每筆 Transaction 鉅細靡遺地記錄下來,訊息非常得多,我們初學是比較難去解讀這樣子的訊息,因此這邊我們選擇 Timed Test Driver Script,它會搭配下面兩個參數去產生測試結果。

Minutes of Rampup Time,這個時間是等待讓負載測試初始化的時間,預設值是 2 分鐘,這邊我們調整為 1 分鐘。

Minutes for Test Duration,這個時間是負載測試的取樣時間,預設值是 5 分鐘,這邊我們調整為 2 分鐘。

這三個參數值搭配起來用的意思就是說,先讓負載測試跑個 1 分鐘之後,HammerDB 會監測接下來 2 分鐘的負載測試執行過程,以取得到的成果去計算平均值,有點類似驗尿取中段的概念。

所以整個負載測試的行程會在 3 分鐘之後結束,也因為這樣,我們必須確保我們的負載測試會執行超過 3 分鐘,這樣取樣的成果才會準確。

設定完後,雙擊 Load 產生負載測試的腳本。

Virtual User - 設定虛擬使用者

雙擊 Virtual User/Options

我們就照著下面畫面設定

這裡其實我想要設定的 Virtual Users 個數其實是 2,那為何設定值是 3 呢?那是因為我們選擇 Timed Test Driver Script 之後,會需要多一個 Virtual User 來監測負載測試的過程,所以設定值會是 N+1

最後雙擊 Run 就會開始執行負載測試,畫面的右方會顯示執行進度。

查看負載測試結果

我們到 C:\Temp 底下,找到 hammerdb*.log 的檔案,打開來看它會長得像下面這個樣子。

上面這個 TEST RESULT 是在說「系統完成 13890 NOPM(New Orders Per Minute)的同時, SQL Server TPM 達到了 63568 個。」,TPM 這個數據跟 tpmC 是不一樣的,它無法拿來當做不同資料庫之間的效能比較依據,但是 NOPM 可以,因此我們應該關注的是 NOPM 這個數據。

HammerDB 不只有可以對 SQL Server 做效能測量,還可以對 MySQL、Oracle、PostgreSQL、Redis...etc,如果手邊沒有比較好的資料庫效能量測工具的朋友,Open Source 的 HammerDB 可以考慮一下。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學