tombo2-progress’s diary

できるだけ毎日1時間を切り取ってここに晒す。誤字脱字気にしない。日本語が崩壊するのも気にしない。最終的にまとめて本ブログに書く

sysbench-tpccのトランザクションの比率はMySQLからとれないと思う

前回の続き

結局SELECT, UPDATE, INSERT, DELETEの比率を出したものの、このSELECTの大半はトランザクション中で使うFOR UPDATEのついたSELECTが多いから、Web界隈で言われる参照が多いってのとは違うんだよなと思ってもう少し調べることにした。

% cat slow.log| grep '^SELECT' | wc -l
8018
% cat slow.log| grep '^UPDATE' | wc -l
4414
% cat slow.log| grep '^INSERT' | wc -l
3642
% cat slow.log| grep '^DELETE' | wc -l
170

sysbench_tpccのコードを軽く呼んでみるとで実行されているのは↓の5つのトランザクションで、割合はかなり雑に決まっていることがわかる。 このトランザクションに比率が正しいのかMySQL側から見ようとしたけど、トランザクションの塊単位で実行されたクエリを取得する方法が思いつかずに困っている。 general_log, slow_query_log, events_statements_history, binary_logどれもtransaction_idを持っているものはない(少なくともデフォルトでは、特殊なオプションがある可能性はある?)

function event()
  -- print( NURand (1023,1,3000))
  local max_trx =  sysbench.opt.enable_purge == "yes" and 24 or 23
  local trx_type = sysbench.rand.uniform(1,max_trx)
  if trx_type <= 10 then
    trx="new_order"
  elseif trx_type <= 20 then
    trx="payment"
  elseif trx_type <= 21 then
    trx="orderstatus"
  elseif trx_type <= 22 then
    trx="delivery"
  elseif trx_type <= 23 then
    trx="stocklevel"
  elseif trx_type <= 24 then
    trx="purge"
  end

-- Execute transaction
   _G[trx]()

しょうがないので、簡単に確認する方法として、sysbench-tpccで実行しているtpcc.luaにprint文を挟んで後から比率を見てみた。 上のevent()関数にあるとおりの比率になっているので、これをいじれば比率を変えられそうということがわかった。

% cat command.txt| grep  new_order | wc -l
  517
% cat command.txt| grep  delivery | wc -l
50
% cat command.txt| grep  orderstatus | wc -l
49
% cat command.txt| grep  payment | wc -l
528
% cat command.txt| grep  stocklevel | wc -l
58

こうやっているうちに、なんでこんなに参照系のクエリ(特にFOR UPDATEがない純粋なSELECT)にこだわっているのかわからなくなってきたので、そろそろ実験をする環境を作り始めようと思う。