tombo2-progress’s diary

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

sysbench-tpcc再調査

なんとなくこれを見ていたらsysbench-tpccの構造は前々回あたりの認識では間違っているかもしれないので、実際に簡単なベンチマークを取ってみる。

https://www.s-style.co.jp/blog/2018/03/1666/

mysql> create database tpcc;

$./tpcc.lua --mysql-user=tombo --mysql-db=tpcc --mysql-password=passwd --db-driver=mysql --tables=1 --scale=1 prepare

mysql> set global slow_query_log=ON;
mysql> set global long_query_time=0;

$./tpcc.lua --mysql-user=tombo --mysql-db=tpcc --mysql-password=passwd --db-driver=mysql --tables=1 --scale=1 run   
sysbench 1.0.11 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            8019
        write:                           8226
        other:                           1248
        total:                           17493
    transactions:                        623    (62.26 per sec.)
    queries:                             17493  (1748.06 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0017s
    total number of events:              623

Latency (ms):
         min:                                  0.41
         avg:                                 16.04
         max:                                 62.13
         95th percentile:                     30.26
         sum:                               9995.07

Threads fairness:
    events (avg/stddev):           623.0000/0.00
    execution time (avg/stddev):   9.9951/0.00

pt-query-digestからクエリ見てみる

 % pt-query-digest slow.log

# 1.4s user time, 10ms system time, 36.71M rss, 100.88M vsz
# Current date: Wed Jun 27 23:10:37 2018
# Hostname: tombo-ThinkPad-X260
# Files: slow.log
# Overall: 17.50k total, 40 unique, 51.62 QPS, 0.03x concurrency _________
# Time range: 2018-06-27T14:03:15 to 2018-06-27T14:08:54
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time             9s     4us    40ms   490us   445us     2ms   194us
# Lock time             1s       0   545us    68us   119us    34us    69us
# Rows sent          8.46k       0      14    0.50    0.99    0.70       0
# Rows examine      29.10k       0   1.02k    1.70    0.99   18.08    0.99
# Query size         2.76M       5     720  165.51  258.32   82.11  174.84

# Profile
# Rank Query ID           Response time Calls R/Call V/M   Item
# ==== ================== ============= ===== ====== ===== ===============
#    1 0x813031B8BBC3B329  4.9692 57.9%   623 0.0080  0.00 COMMIT
#    2 0x08043A0F95830A03  0.5797  6.8%  2821 0.0002  0.00 UPDATE stock?
#    3 0x78147F9532B94609  0.5542  6.5%  2821 0.0002  0.00 INSERT order_line?
#    4 0xF8F75EDE9DD44246  0.5394  6.3%  2821 0.0002  0.00 SELECT stock?
#    5 0xA42FAA7C8575BC56  0.4364  5.1%  2821 0.0002  0.00 SELECT item?
#    6 0x2AFC2598CA878FCE  0.1569  1.8%   276 0.0006  0.01 INSERT new_orders?
#    7 0x9A49E40A9056A7BB  0.1071  1.2%   276 0.0004  0.00 SELECT customer? warehouse?
#    8 0x17154DCE7E0AC776  0.0964  1.1%   269 0.0004  0.00 INSERT history?
#    9 0x816F682E53C0CF03  0.0929  1.1%    30 0.0031  0.00 SELECT order_line? stock?
#   10 0xA630D4C717D9DC96  0.0870  1.0%   170 0.0005  0.00 UPDATE order_line?
#   11 0xD8722F4270561E50  0.0824  1.0%   269 0.0003  0.00 SELECT customer?
#   12 0x88D9C47F6B95AA12  0.0718  0.8%   246 0.0003  0.00 UPDATE customer?
#   13 0x6038CAF4293E6E82  0.0700  0.8%   269 0.0003  0.00 UPDATE district?
#   14 0xC0E4F49350F491A8  0.0681  0.8%   269 0.0003  0.00 UPDATE warehouse?
#   15 0x579C28C03D797339  0.0632  0.7%   174 0.0004  0.00 SELECT customer?
#   16 0x507F33348C82A66C  0.0632  0.7%   276 0.0002  0.00 INSERT orders?
#   17 0xE2A5C4334B7249BF  0.0621  0.7%   276 0.0002  0.00 UPDATE district?
#   18 0x6B61C34631EEC274  0.0542  0.6%   276 0.0002  0.00 SELECT district?
# MISC 0xMISC              0.4252  5.0%  2515 0.0002   0.0 <22 ITEMS>

# Query 1: 62.30 QPS, 0.50x concurrency, ID 0x813031B8BBC3B329 at byte 2936273
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2018-06-27T14:03:34 to 2018-06-27T14:03:44
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count          3     623
# Exec time     57      5s     7us    22ms     8ms    12ms     4ms     7ms
# Lock time      0       0       0       0       0       0       0       0
# Rows sent      0       0       0       0       0       0       0       0
# Rows examine   0       0       0       0       0       0       0       0
# Query size     0   3.65k       6       6       6       6       0       6
# String:
# Databases    tpcc
# Hosts        localhost
# Users        tombo
# Query_time distribution
#   1us  #
#  10us  #############
# 100us
#   1ms  ##############################################################
#  10ms  ################################################################
# 100ms
#    1s
#  10s+
COMMIT\G

# Query 2: 282.10 QPS, 0.06x concurrency, ID 0x08043A0F95830A03 at byte 5936900
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2018-06-27T14:03:34 to 2018-06-27T14:03:44
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         16    2821
# Exec time      6   580ms    39us   897us   205us   301us    78us   214us
# Lock time     14   176ms    11us   146us    62us    98us    23us    66us
# Rows sent      0       0       0       0       0       0       0       0
# Rows examine   9   2.75k       1       1       1       1       0       1
# Query size    10 305.31k     107     111  110.83  107.34    0.10  107.34
# String:
# Databases    tpcc
# Hosts        localhost
# Users        tombo
# Query_time distribution
#   1us
#  10us  ########
# 100us  ################################################################
#   1ms
#  10ms
# 100ms
#    1s
#  10s+
# Tables
#    SHOW TABLE STATUS FROM `tpcc` LIKE 'stock1'\G
#    SHOW CREATE TABLE `tpcc`.`stock1`\G
UPDATE stock1
                    SET s_quantity = 44
                  WHERE s_i_id = 54555
                AND s_w_id= 1\G
# Converted for EXPLAIN
# EXPLAIN /*!50100 PARTITIONS*/
select  s_quantity = 44 from stock1 where  s_i_id = 54555
                AND s_w_id= 1\G

# Query 3: 282.10 QPS, 0.06x concurrency, ID 0x78147F9532B94609 at byte 82827
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2018-06-27T14:03:34 to 2018-06-27T14:03:44
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         16    2821
# Exec time      6   554ms    32us    40ms   196us   287us   746us   185us
# Lock time     17   207ms    14us   173us    73us   108us    27us    80us
# Rows sent      0       0       0       0       0       0       0       0
# Rows examine   0       0       0       0       0       0       0       0
# Query size    23 655.55k     233     241  237.96  234.30    0.21  234.30
# String:
# Databases    tpcc
# Hosts        localhost
# Users        tombo
# Query_time distribution
#   1us
#  10us  ###########
# 100us  ################################################################
#   1ms
#  10ms  #
# 100ms
#    1s
#  10s+
# Tables
#    SHOW TABLE STATUS FROM `tpcc` LIKE 'order_line1'\G
#    SHOW CREATE TABLE `tpcc`.`order_line1`\G
INSERT INTO order_line1
                                 (ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info)
                      VALUES (3001,4,1,2,16590,1,8,405,'qqqqqqqqqqqqqqqqqqqqqqqq')\G

省略。。。

sys.statement_analysisから見てみる。

mysql> update setup_consumers set ENABLED = 'YES'  where NAME like '%events_statements_history_long%';

# bench 実行

mysql> SELECT distinct query FROM statement_analysis
    -> ;
+-------------------------------------------------------------------+
| query                                                             |
+-------------------------------------------------------------------+
| SELECT @@`version_comment` LIMIT ?                                |
| SELECT SCHEMA ( )                                                 |
| SHOW SCHEMAS                                                      |
| SHOW TABLES                                                       |
| SELECT * FROM `statement_analysis` LIMIT ?                        |
| SELECT `sys` . `format_stateme ... cy` , `sys` . `format_time` (  |
| SHOW VARIABLES LIKE ?                                             |
| SET SESSION `transaction_isolation` = ?                           |
| SET `autocommit` = ?                                              |
| BEGIN                                                             |
| UPDATE `warehouse1` SET `w_ytd` = `w_ytd` + ? WHERE `w_id` = ?    |
| SELECT `w_street_1` , `w_stree ... `warehouse1` WHERE `w_id` = ?  |
| UPDATE `district1` SET `d_ytd` ... E `d_w_id` = ? AND `d_id` = ?  |
| SELECT `d_street_1` , `d_stree ... E `d_w_id` = ? AND `d_id` = ?  |
| SELECT COUNT ( `c_id` ) `namec ... `c_d_id` = ? AND `c_last` = ?  |
| SELECT `c_id` FROM `customer1` ... _last` = ? ORDER BY `c_first`  |
| SELECT `c_first` , `c_middle`  ... = ? AND `c_id` = ? FOR UPDATE  |
| UPDATE `customer1` SET `c_bala ... D `c_d_id` = ? AND `c_id` = ?  |
| INSERT INTO `history1` ( `h_c_ ... ( ?, ... , NOW ( ) , ?, ... )  |
| COMMIT                                                            |
| SELECT `c_balance` , `c_first` ... D `c_d_id` = ? AND `c_id` = ?  |
| SELECT `o_id` , `o_carrier_id` ... _id` = ? ORDER BY `o_id` DESC  |
| SELECT `ol_i_id` , `ol_supply_ ... l_d_id` = ? AND `ol_o_id` = ?  |
| SELECT `c_discount` , `c_last` ... D `c_d_id` = ? AND `c_id` = ?  |
| SELECT `d_next_o_id` , `d_tax` ... = ? AND `d_id` = ? FOR UPDATE  |
| UPDATE `district1` SET `d_next ... E `d_id` = ? AND `d_w_id` = ?  |
| INSERT INTO `orders1` ( `o_id` ... ( ?, ... , NOW ( ) , ?, ... )  |
| INSERT INTO `new_orders1` ( `n ... d` , `no_w_id` ) VALUES (...)  |
| SELECT `i_price` , `i_name` ,  ... FROM `item1` WHERE `i_id` = ?  |
| SELECT `s_quantity` , `s_data` ... ? AND `s_w_id` = ? FOR UPDATE  |
| UPDATE `stock1` SET `s_quantit ... `s_i_id` = ? AND `s_w_id` = ?  |
| INSERT INTO `order_line1` ( `o ... `ol_dist_info` ) VALUES (...)  |
| SELECT `no_o_id` FROM `new_ord ... _o_id` ASC LIMIT ? FOR UPDATE  |
| DELETE FROM `new_orders1` WHER ... o_d_id` = ? AND `no_w_id` = ?  |
| SELECT `o_c_id` FROM `orders1` ... `o_d_id` = ? AND `o_w_id` = ?  |
| UPDATE `orders1` SET `o_carrie ... `o_d_id` = ? AND `o_w_id` = ?  |
| UPDATE `order_line1` SET `ol_d ... l_d_id` = ? AND `ol_w_id` = ?  |
| SELECT SUM ( `ol_amount` ) `sm ... l_d_id` = ? AND `ol_w_id` = ?  |
| UPDATE `customer1` SET `c_bala ... `c_d_id` = ? AND `c_w_id` = ?  |
| SELECT `d_next_o_id` FROM `dis ... E `d_id` = ? AND `d_w_id` = ?  |
| SELECT COUNT ( DISTINCTROW ( ` ... ol_i_id` AND `s_quantity` < ?  |
| SELECT `c_data` FROM `customer ... D `c_d_id` = ? AND `c_id` = ?  |
| SELECT `i_price` , `i_name` ,  ... OM `item1` WHERE `i_id` = - ?  |
| ROLLBACK                                                          |
| SELECT `c_balance` , `c_first` ... _last` = ? ORDER BY `c_first`  |
+-------------------------------------------------------------------+
45 rows in set (0.01 sec)

うーん。。。 とり方が良くなくて、実際CRUDがどれくらいの割合で実行されてるかこれではわからない。。。

次回方法を考えて、参考にした生地にあるように↓が埋められるようにする。

種別 割合
SELECt
UPDATE
INSERT
DELETE