データベースに対する負荷ツール、ベンチマークツールは世の中にたくさんあるのですが、単一テーブルに対する主キー検索しかしないものなど、CPUクロック勝負の比較的単純なものが多くを占めているようです。
关于数据库压力的测试工具、世面上有很多的基准测试工具、不仅是对单一表的主键进行检索等、单纯的CPU时钟胜负比较占大多数。
そこで本日は、もう少し高度なベンチマーク仕様としてのTPC-Cと、MySQL向けの簡易実装であるtpcc-mysqlをご紹介します。
今天,介绍一下稍微高级一点基准规格的tpc-c和面向MySQL简单实施的tpcc-mysql。
TPC-Cとは卸売業における注文・支払いなどの処理を擬似的に再現した業務モデルで、TPCという業界団体によって策定されたものです。
TPC-C是通过模拟批发业中订单.支付等的处理再现业务模型、TPC是业界团体定制的产物。
9種類のテーブルに対する5種類のトランザクションがミックスされており、そのうち注文処理のスループットを測定結果として利用します。
涵盖了9个table、5种事务(transaction)、订单处理的吞吐量作为测定结果使用。
公式サイトで仕様書(PDF)が公開されています。
在官方网站上有公开的式样书PDF。
テーブル定義は以下のようになっています。ちなみにこのER図はMySQL Workbenchで出力したものです。
table的定义如下,顺便说一下这个ER图是用MySQL Workbench输出的。
warehouse:倉庫です。倉庫表のレコード数は全体の規模を決めるスケールファクターとなっています。
warehouse表:仓库表。仓库表的记录数是决定整体规模的比例因子
district:配送区域です。倉庫あたり10の配送区域が存在します。
district表:配送区域表。每个仓库有10个配送区域。
customer:顧客です。配送区域あたり3,000の顧客が存在します。
customer表:顾客表。每个配送区域有3000名顾客。
hisotory:支払い履歴です。支払い履歴表は測定中にレコードが増えていきます。
hisotory表:支付记录表。主要是往表里insert支付记录。
item:商品です。商品数は10万種類で固定されています。
item表:商品表。固定10万种类的商品数。
stock:在庫です。warehouse×10万レコードあります。
stock表:库存表。存在warehouse乘以10万条记录
orders:注文です。注文表は測定中にレコードが増えていきます。
orders表:订单表。主要是往这个订单表里增加记录。
order_line:注文明細です。一度の注文で平均10個の商品を発注します。
order_line表:订单明细表。一个订单平均10个商品。
new_orders:未配送の新規注文です。注文を受けるとINSERTされ、商品を配送するとDELETEされます。
new_orders表:未配送的新增订单。新增订单的insert及配送订单的delete操作
new order:注文です。主に注文データのINSERTを行います。
订单,主要是往订单表里insert
payment:支払いです。主に貸借のUPDATEと履歴データのINSERTを行います。
支付,主要是贷借的update和对支付记录表进行的insert操作
order status:注文状況の確認です。注文データのSELECTを行います。
订单状态,订单的状态确认。主要对订单表进行查询。
delivery:配送です。新規注文のDELETEと注文データのフラグ更新を行います。
配送,新增订单的删除及订单表的flag更新。
stock level:在庫確認です。在庫データのSELECTを行います。
库存确认。库存数据的查询
扛不住了.... 明天继续
5種類のトランザクションは以下のようになっています。測定においてはこれら5種類のトランザクションをおよそ10:10:1:1:1でミックスします。
以下是具体的5类事务。测量中这5类事务的比例为10:10:1:1:1
TPC-Cの実装はあまり公開されているものがなく、私の知る限りDBT-2とtpcc-mysqlしかないようです。またこれらはいずれもTPC-Cの仕様をかいつまんで実装したものとなっており、全ての仕様を満たしてはいません。そのため測定結果はTPC-Cの公式スコアとは言えませんので、ご注意ください。
TPC-Cの概要が分かったところで、早速tpcc-mysqlのセットアップをしていきましょう。tpcc-mysqlはMySQLのコンサル会社であるPercona Inc.によって開発されたもので、launchpadでソースが公開されています。launchpadからのソース取得にはBazaarを使います。CentOS 5.2においてBazaarすら入っていない状態からは、以下のようにしてインストールします。