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 Server、TPC-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 可以考慮一下。
參考資源