1. 程式人生 > >NewSQL資料庫壓力測試工具系列——TPCC

NewSQL資料庫壓力測試工具系列——TPCC

     前兩篇文章向大家介紹了sysbench和YCSB兩個開源效能基準測試工具,這兩個工具著重於對資料庫進行產品級基本的、與業務和應用無關的壓力測試。在這篇文章中將向大家介紹在傳統關係型資料庫領域中存在的以假想的零售業務為基礎的TPC-C效能測,並介紹基於sysbench的一個開源工具sysbench-tpcc針對TiDB和Cockroach的用法。

  1. TPC-C簡介

     TPC-C是專門針對聯機交易處理系統(OLTP系統)的規範,一般情況下我們也把這類系統稱為業務處理系統。1992年7月釋出。幾乎所有在OLTP市場提供軟硬平臺的國外主流廠商都發布了相應的TPC-C測試結果,隨著計算機技術的不斷髮展,這些測試結果也在不斷重新整理。

     TPC-C測試用到的模型是一個大型的商品批發銷售公司,它擁有若干個分佈在不同區域的商品倉庫。當業務擴充套件的時候,公司將新增新的倉庫。每個倉庫負責為10個銷售點供貨,其中每個銷售點為3000個客戶提供服務,每個客戶提交的訂單中,平均每個訂單有10項產品,所有訂單中約10%的產品在其直接所屬的倉庫中沒有存貨,必須由其他區域的倉庫來供貨。同時,每個倉庫都要維護公司銷售的100000種商品的庫存記錄。

    下面是TPC-C業務模型的邏輯示意圖: 

     

     下面是TPC-C的資料庫表關係結構圖:

     

   TPCC執行事務的簡要說明

   需要處理的交易事務主要為以下幾種:

1、新訂單(New-Order) :客戶輸入一筆新的訂貨交易;

2、支付操作(Payment) :更新客戶帳戶餘額以反映其支付狀況;

3、發貨(Delivery) :發貨(模擬批處理交易);

4、訂單狀態查詢(Order-Status) :查詢客戶最近交易的狀態;

5、庫存狀態查詢(Stock-Level) :查詢倉庫庫存狀況,以便能夠及時補貨。

本文所介紹的sysbench-tpcc是Percorna公司基於sysbench開發的TPC-C標準的實現,tpcc.lua負責實現。

   2. 安裝

    (1) 環境

         sysbench:1.0.14  (要求先安裝好它)

         TiDB:2.0.x或2.1.x

         CockroachDB:2.0.x或2.1.x

   (2) 安裝部署

        下載sysbench-tpcc軟體包:

        解壓軟體包:

        tar xvfz 2.1.tar.gz

       假設解壓之後的目錄為: /home/benchmark/sysbench-tpcc-2.1

    3. 執行測試

       在執行後面的工作之前,進入sysbench-tpcc相應的目錄:

            cd  /home/benchmark/sysbench-tpcc-2.1

   (1) prepare(準備資料)

--mysql/tidb

./tpcc.lua --mysql-db=tpcc --mysql-user=root \

  --mysql-host=192.168.13.171 --mysql-port=26257 --time=300 \

  --threads=4 --report-interval=1 --tables=4 --scale=10 \

  --db-driver=mysql prepare  

--postgresql/cockroachdb

./tpcc.lua --pgsql-db=tpcc --pgsql-user=root \

  --pgsql-host=192.168.13.171 --pgsql-port=26257 --time=300 \

  --threads=4 --report-interval=1 --tables=4 --scale=10 \

  --db-driver=pgsql prepare

(2) run(加壓測試)

--mysql/tidb

./tpcc.lua --mysql-db=tpcc --mysql-user=root \

  --mysql-host=192.168.13.171 --mysql-port=26257 --time=300 \

  --threads=4 --report-interval=1 --tables=4 --scale=10 \

  --db-driver=mysql run

--postgresql/cockroachdb

./tpcc.lua --pgsql-db=tpcc --pgsql-user=root \

  --pgsql-host=192.168.13.171 --pgsql-port=26257 --time=300 \

  --threads=4 --report-interval=1 --tables=4 --scale=10 \

  --db-driver=pgsql run

(3) clean(清理測試)

--mysql/tidb

./tpcc.lua --mysql-db=tpcc --mysql-user=root \

  --mysql-host=192.168.13.171 --mysql-port=26257 --time=300 \

  --threads=4 --report-interval=1 --tables=4 --scale=10 \

  --db-driver=mysql clean

--postgresql/cockroachdb

./tpcc.lua --pgsql-db=tpcc --pgsql-user=root \

  --pgsql-host=192.168.13.171 --pgsql-port=26257 --time=300 \

  --threads=4 --report-interval=1 --tables=4 --scale=10 \

  --db-driver=pgsql clean

參考: