天天看點

【原創】sysbench 使用總結

      sysbench 是一款多線程系統壓測工具。可以根據影響資料庫伺服器性能的各種因素來評估系統的性能。可以用來測試檔案i/o,作業系統排程器,記憶體配置設定和傳輸速度,posix 線程,以及資料庫伺服器等。sysbench 支援 lua 腳本語言以實作更加靈活的設定。屬于全能型的測試工具。 

========= 我是分割線 ========== 

以下内容參考自《高性能 mysql 》的第二章。 

1. cpu 基準測試 

測試内容:測試計算素數知道某個最大值所需的時間。 

<a href="http://my.oschina.net/moooofly/blog/152584#">?</a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

<code>[root@betty ~]</code><code># cat /proc/cpuinfo</code>

<code>processor       : 0</code>

<code>vendor_id       : genuineintel</code>

<code>cpu family      : 6</code>

<code>model           : 42</code>

<code>model name      :         intel(r) core(tm) i3-2120 cpu @ 3.30ghz</code>

<code>stepping        : 7</code>

<code>cpu mhz         : 1600.000</code>

<code>cache size      : 3072 kb</code>

<code>physical</code><code>id</code>     <code>: 0</code>

<code>siblings        : 4</code>

<code>core</code><code>id</code>         <code>: 0</code>

<code>cpu cores       : 2</code>

<code>apicid          : 0</code>

<code>fpu             :</code><code>yes</code>

<code>fpu_exception   :</code><code>yes</code>

<code>cpuid level     : 13</code>

<code>wp              :</code><code>yes</code>

<code>flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx rdtscp lm constant_tsc nonstop_tsc arat pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm</code>

<code>bogomips        : 6585.40</code>

<code>clflush size    : 64</code>

<code>cache_alignment : 64</code>

<code>address sizes   : 36 bits physical, 48 bits virtual</code>

<code>power management: [8]</code>

<code>processor       : 1</code>

<code>core</code><code>id</code>         <code>: 1</code>

<code>apicid          : 2</code>

<code>bogomips        : 6585.00</code>

<code>processor       : 2</code>

<code>apicid          : 1</code>

<code>bogomips        : 6584.95</code>

<code>processor       : 3</code>

<code>apicid          : 3</code>

<code>[root@betty ~]</code><code>#</code>

執行結果: 

<code>[root@betty ~]</code><code># sysbench --test=cpu --cpu-max-prime=20000 run</code>

<code>sysbench 0.4.12:  multi-threaded system evaluation benchmark</code>

<code>running the</code><code>test</code> <code>with following options:</code>

<code>number of threads: 1</code>

<code>doing cpu performance benchmark</code>

<code>threads started!</code>

<code>done.</code>

<code>maximum prime number checked</code><code>in</code> <code>cpu</code><code>test</code><code>: 20000</code>

<code>test execution summary:</code>

<code>    </code><code>total</code><code>time</code><code>:                          25.6727s</code>

<code>    </code><code>total number of events:              10000</code>

<code>    </code><code>total</code><code>time</code> <code>taken by event execution: 25.6696</code>

<code>    </code><code>per-request statistics:</code>

<code>         </code><code>min:                                  2.56ms</code>

<code>         </code><code>avg:                                  2.57ms</code>

<code>         </code><code>max:                                  5.36ms</code>

<code>         </code><code>approx.  95 percentile:               2.57ms</code>

<code>threads fairness:</code>

<code>    </code><code>events (avg</code><code>/stddev</code><code>):           10000.0000</code><code>/0</code><code>.00</code>

<code>    </code><code>execution</code><code>time</code> <code>(avg</code><code>/stddev</code><code>):   25.6696</code><code>/0</code><code>.00</code>

2. 檔案 i/o 基準測試 

用于測試系統在不同 i/o 負載下的性能。 

a. 準備階段 

      生成測試用的資料檔案,要求生成的資料檔案至少要比記憶體大,否則資料由于被作業系統緩存而無法展現 i/o 密集型工作負載。 

<code>[root@betty ~]</code><code># sysbench --test=fileio --file-total-size=10g prepare </code>

<code>128 files, 81920kb each, 10240mb total</code>

<code>creating files</code><code>for</code> <code>the</code><code>test</code><code>...</code>

檢視生成的檔案,共 128 個檔案塊(80m * 128): 

<code>[root@betty ~]</code><code># ll</code>

<code>total 10498016</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.0</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.1</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.10</code>

<code>-rw------- 1 root root 83886080 aug 14 10:55 test_file.100</code>

<code>...</code>

<code>-rw------- 1 root root 83886080 aug 14 10:56 test_file.109</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.11</code>

<code>-rw------- 1 root root 83886080 aug 14 10:56 test_file.110</code>

<code>-rw------- 1 root root 83886080 aug 14 10:56 test_file.119</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.12</code>

<code>-rw------- 1 root root 83886080 aug 14 10:56 test_file.120</code>

<code>-rw------- 1 root root 83886080 aug 14 10:56 test_file.127</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.13</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.19</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.2</code>

<code>-rw------- 1 root root 83886080 aug 14 10:53 test_file.20</code>

<code>-rw------- 1 root root 83886080 aug 14 10:55 test_file.98</code>

<code>-rw------- 1 root root 83886080 aug 14 10:55 test_file.99</code>

b. 運作階段 

讀取前一步生成的資料檔案進行測試。 

<code>[root@betty ~]</code><code># sysbench --test=fileio --file-total-size=10g --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run</code>

<code>initializing random number generator from timer.</code>

<code>extra</code><code>file</code> <code>open</code> <code>flags: 0</code>

<code>128 files, 80mb each</code>

<code>10gb total</code><code>file</code> <code>size</code>

<code>block size 16kb</code>

<code>number of random requests</code><code>for</code> <code>random io: 0</code>

<code>read</code><code>/write</code> <code>ratio</code><code>for</code> <code>combined random io</code><code>test</code><code>: 1.50</code>

<code>periodic fsync enabled, calling fsync() each 100 requests.</code>

<code>calling fsync() at the end of</code><code>test</code><code>, enabled.</code>

<code>using synchronous i</code><code>/o</code> <code>mode</code>

<code>doing random r</code><code>/w</code> <code>test</code>

<code>time limit exceeded, exiting...</code>

<code>operations performed:  25981 read, 17320 write, 55424 other = 98725 total</code>

<code>read 405.95mb  written 270.62mb  total transferred 676.58mb  (2.255mb</code><code>/sec</code><code>)</code>

<code>  </code><code>144.32 requests</code><code>/sec</code> <code>executed</code>

<code>    </code><code>total</code><code>time</code><code>:                          300.0315s</code>

<code>    </code><code>total number of events:              43301</code>

<code>    </code><code>total</code><code>time</code> <code>taken by event execution: 176.0072</code>

<code>         </code><code>min:                                  0.01ms</code>

<code>         </code><code>avg:                                  4.06ms</code>

<code>         </code><code>max:                                 76.53ms</code>

<code>         </code><code>approx.  95 percentile:              13.04ms</code>

<code>    </code><code>events (avg</code><code>/stddev</code><code>):           43301.0000</code><code>/0</code><code>.00</code>

<code>    </code><code>execution</code><code>time</code> <code>(avg</code><code>/stddev</code><code>):   176.0072</code><code>/0</code><code>.00</code>

c. 清除階段 

删除第一步生成的測試檔案。 

<code>[root@betty ~]</code><code># sysbench --test=fileio --file-total-size=10g cleanup</code>

<code>removing</code><code>test</code> <code>files...</code>

3. oltp 基準測試 

測試内容:模拟事務處理系統的工作負載。使用一張超過百萬行記錄的表。

a. 生成表 

<code>[root@betty ~]</code><code># sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --db-driver=mysql --mysql-socket=/tmp/mysql.sock --mysql-user=root prepare</code>

<code>creating table</code><code>'sbtest'</code><code>...</code>

<code>creating 1000000 records</code><code>in</code> <code>table</code><code>'sbtest'</code><code>...</code>

檢視 mysql 資料庫内容: 

<code>mysql&gt; show tables;     </code>

<code>+</code><code>----------------+</code>

<code>| tables_in_test |</code>

<code>| sbtest         |</code>

<code>1 row</code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt;</code>

<code>mysql&gt;</code><code>select</code> <code>count</code><code>(*)</code><code>from</code> <code>sbtest;</code>

<code>+</code><code>----------+</code>

<code>|</code><code>count</code><code>(*) |</code>

<code>|  1000000 |</code>

<code>1 row</code><code>in</code> <code>set</code> <code>(0.19 sec)</code>

b. 運作測試

8 線程并發、隻讀模式、測試時長為 60s 。

<code>[root@betty ~]</code><code># sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 --db-driver=mysql --mysql-socket=/tmp/mysql.sock run </code>

<code>number of threads: 8</code>

<code>doing oltp</code><code>test</code><code>.</code>

<code>running mixed oltp</code><code>test</code>

<code>doing</code><code>read</code><code>-only</code><code>test</code>

<code>using special distribution (12 iterations,  1 pct of values are returned</code><code>in</code> <code>75 pct cases)</code>

<code>using</code><code>"begin"</code> <code>for</code> <code>starting transactions</code>

<code>using auto_inc on the</code><code>id</code> <code>column</code>

<code>(last message repeated 7</code><code>times</code><code>)</code>

<code>oltp</code><code>test</code> <code>statistics:</code>

<code>    </code><code>queries performed:</code>

<code>        </code><code>read</code><code>:                            1442434</code>

<code>        </code><code>write:                           0</code>

<code>        </code><code>other:                           206062</code>

<code>        </code><code>total:                           1648496</code>

<code>    </code><code>transactions:                        103031 (1717.12 per sec.)</code>

<code>    </code><code>deadlocks:                           0      (0.00 per sec.)</code>

<code>    </code><code>read</code><code>/write</code> <code>requests:                 1442434 (24039.63 per sec.)</code>

<code>    </code><code>other operations:                    206062 (3434.23 per sec.)</code>

<code>    </code><code>total</code><code>time</code><code>:                          60.0023s</code>

<code>    </code><code>total number of events:              103031</code>

<code>    </code><code>total</code><code>time</code> <code>taken by event execution: 479.5035</code>

<code>         </code><code>min:                                  1.49ms</code>

<code>         </code><code>avg:                                  4.65ms</code>

<code>         </code><code>max:                               3493.99ms</code>

<code>         </code><code>approx.  95 percentile:               2.41ms</code>

<code>    </code><code>events (avg</code><code>/stddev</code><code>):           12878.8750</code><code>/1194</code><code>.34</code>

<code>    </code><code>execution</code><code>time</code> <code>(avg</code><code>/stddev</code><code>):   59.9379</code><code>/0</code><code>.01</code>

測試結果資訊中包括: 

總的事務數/每秒事務數

時間統計資訊(最小、平均、最大響應時間、95% 百分比響應時間)

線程公平性統計資訊,用于表示模拟負載的公平性

c. 删除表 

<code>[root@betty ~]</code><code># sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --db-driver=mysql --mysql-socket=/tmp/mysql.sock cleanup</code>

<code>dropping table</code><code>'sbtest'</code><code>...</code>