TPC-Cのベンチマークがどんなものか見る
sysbench-tpccでどんなschemaにどんなクエリが流れているのか調べる
同じくPercona-Labが出しているものに、tpcc-mysqlもあるけど、sysbench-tpccのほうが最近までcommitがあるのでこちらを使うことにする。 sysbench-tpccはドキュメントないっぽい、公式ブログもREADME程度のことしか書いてない。 https://www.percona.com/blog/2018/03/05/tpcc-like-workload-sysbench-1-0/
リポジトリとMySQLのベンチマークツール: tpcc-mysql と sysbench-tpcc の紹介 見て
- コマンド、オプション把握する
- prepareしてschema見る
- 実行してslow-queryからクエリを見てみる
install
# install git clone https://github.com/Percona-Lab/tpcc-mysql.git cd tpcc-mysql/src make # prepare schema mysql -u root -p -e "create database tpcc" mysql -u root -p tpcc < create_table.sql mysql -u root -p tpcc < add_fkey_idx.sql
図を見て思い出したけど、TPC-Cベンチマークは在庫管理・注文履歴を含めた発注システムをモデルにしたベンチマークだからweb系のシステムのベンチマークには向かないかも。
http://hp.vector.co.jp/authors/VA052413/jdbcrunner/manual_ja/tpc-c.html 良い説明
warehouse : 倉庫を表しています。このテーブルのレコード数がデータベース全体の規模を決めるスケールファクタになっています。 district : 配送区域を表しています。倉庫あたり10の配送区域があります。 customer : 顧客を表しています。配送区域あたり3,000の顧客がいます。 history : 支払い履歴を表しています。初期値として顧客あたり1件の支払い履歴があり、支払いを行うと増加していきます。 item : 商品を表しています。このテーブルのレコード数は10万で固定されています。 stock : 在庫を表しています。倉庫あたり10万の在庫データを持っています。 orders : 注文を表しています。初期値として顧客あたり1つの注文があり、注文を行うと増加していきます。 order_line : 注文明細を表しています。注文あたり平均10件の注文明細が作られます。 new_orders : 未配送の新規注文を表しています。初期値として30%の顧客が1件ずつ未配送の新規注文を抱えており、注文を行うと増加し、配送が行われると減少します。 TPC-Cでは5種類のトランザクションが定義されています。5種類のトランザクションの実行比率は10:10:1:1:1となっています。 New-Order : 注文処理です。 Payment : 支払い処理です Order-Status : 注文状況を確認する処理です。 Delivery : 配送処理です。 Stock-Level : 在庫状況を確認する処理です。
上記リンク参照。[f:id:tombo:20180625225535p:plain][f:id:tombo:20180625225541p:plain] リンク先にSQLでのトランザクション内容がある。
これらの5角トランザクションが順に10:10:1:1:1らしいので、やはりread heavyというのは難しい。(3つ目だけが純粋にselect文。) バランスを変えても良いけど、それだとtpc-cの意味がないので、他のTPC系のベンチメークを模索してみる。
installしちゃったし、今後一応これでベンチマークも取ってみる。 DBの論文でもベンチマークにTPC-Cが使われることは多いと思うので、Mysqlでどこまでできるのかは気になる。
TPC 公式見る
って感じらしいので、TPC-Eあたりかと思ったが違う
http://d.hatena.ne.jp/sh2/20100510
適当なpcだと1TPSもでないとかすごい。証券世界どうなってるんだろう。
percona-benchworkによってベンチマーク割と簡単にできるらしいけど、これもドキュメントあるのか怪しい。