Benchmark Ihres Systems (CPU, Daten IO, MySQL) durchführen mit sysbench

sysbench ist eine Benchmarksuite, welche es Ihnen erlaubt sich schnell einen Überblick über die Leistung Ihres Systems zu verschaffen, welcher wichtig ist, wenn Sie vorhaben eine Datenbank unter hoher Last laufen zu lassen. Dieses Tutorial erklärt Ihnen, wie Sie mit sysbench Ihre CPU, Daten IO und MySQL Leistung benchmarken.

Für die Richtigkeit der Inhalte dieses Tutorials gebe ich keinerlei Garantie.

1 Installation von sysbench

Unter Debian/Ubuntu kann sysbench wie folgt installiert werden:

apt-get install sysbench

Schauen Sie sich außerdem

man sysbench

an um mehr über seine Parameter zu erfahren.

Ich werde nun drei einfache, grundlegende Tests durchführen um die CPU-, Daten IO- und MySQL Leistung zu messen.

2 CPU Benchmark

Sie können Ihre CPU Leistung wie folgt benchmarken:

sysbench –test=cpu –cpu-max-prime=20000 run

root@server1:~# sysbench –test=cpu –cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000

Test execution summary:
total time:                          23.8724s
total number of events:              10000
total time taken by event execution: 23.8716
per-request statistics:
min:                                  2.31ms
avg:                                  2.39ms
max:                                  6.39ms
approx.  95 percentile:               2.44ms

Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   23.8716/0.00

root@server1:~#

Sie werden eine Menge Zahlen sehen, die wichtigste ist jedoch total time (gesamte Zeit):

total time:                          23.8724s

Natürlich müssen Sie die Benchmarks mit anderen Systemen vergleichen um herauszufinden, ob Sie gut darstehen.

3 Daten IO Benchmark

Um die Daten IO Leistung zu messen benötigen Sie zu allererst eine Datei, welche viel größer ist als Ihr Arbeitsspeicher (andernfalls wird Ihr System den Arbeitsspeicher zum cachen benutzen und damit die Benchmarkergebnisse verfälschen) – 150GB ist hierfür ein guter Wert:

sysbench –test=fileio –file-total-size=150G prepare

Anschließend können Sie die Benchmarks ausführen:

sysbench –test=fileio –file-total-size=150G –file-test-mode=rndrw –init-rng=on –max-time=300 –max-requests=0 run

root@server1:~# sysbench –test=fileio –file-total-size=150G –file-test-mode=rndrw –init-rng=on –max-time=300 –max-requests=0 run

sysbench: /usr/lib/libmysqlclient.so.18: no version information available (required by sysbench)

sysbench 0.4.12:  multi-threaded system evaluation benchmark

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

Extra file open flags: 0
128 files, 1.1719Gb each
150Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  600 Read, 400 Write, 1186 Other = 2186 Total
Read 9.375Mb  Written 6.25Mb  Total transferred 15.625Mb  (53.316Kb/sec)
3.33 Requests/sec executed

Test execution summary:
total time:                          300.0975s
total number of events:              1000
total time taken by event execution: 158.7611
per-request statistics:
min:                                  0.01ms
avg:                                158.76ms
max:                               2596.96ms
approx.  95 percentile:             482.29ms

Threads fairness:
events (avg/stddev):           1000.0000/0.00
execution time (avg/stddev):   158.7611/0.00

root@server1:~#

Die wichtige Zahl ist der Kb/sec Wert:

Read 9.375Mb  Written 6.25Mb  Total transferred 15.625Mb  (53.316Kb/sec)

Nach dem Benchmark sollten Sie die 150GB Datei wieder löschen:

sysbench –test=fileio –file-total-size=150G cleanup

4 MySQL Benchmark

Um die MySQL Leistung zu messen müssen Sie zuerst eine Testtabelle in der Datenbank test erstellen, welche 1,000,000 Datenreihen hat:

sysbench –test=oltp –oltp-table-size=1000000 –mysql-db=test –mysql-user=root –mysql-password=yourrootsqlpassword prepare

root@server1:~# sysbench –test=oltp
–oltp-table-size=1000000 –mysql-db=test –mysql-user=root
–mysql-password=yourrootsqlpassword prepare

sysbench 0.4.12: multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Creating table ’sbtest’…
Creating 1000000 records in table ’sbtest’…
root@server1:~#

Im Anschluss können Sie die MySQL Benchmarks wie folgt durchführen:

sysbench –test=oltp –oltp-table-size=1000000 –mysql-db=test –mysql-user=root –mysql-password=yourrootsqlpassword –max-time=60 –oltp-read-only=on –max-requests=0 –num-threads=8 run

root@server1:~# sysbench –test=oltp –oltp-table-size=1000000 –mysql-db=test –mysql-user=root –mysql-password=yourrootsqlpassword –max-time=60 –oltp-read-only=on –max-requests=0 –num-threads=8 run

sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 8

Doing OLTP test.
Running mixed OLTP test
Doing read-only test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.

OLTP test statistics:
queries performed:
read:                            2253860
write:                           0
other:                           321980
total:                           2575840
transactions:                        160990 (2683.06 per sec.)
deadlocks:                           0      (0.00 per sec.)
read/write requests:                 2253860 (37562.81 per sec.)
other operations:                    321980 (5366.12 per sec.)

Test execution summary:
total time:                          60.0024s
total number of events:              160990
total time taken by event execution: 479.3419
per-request statistics:
min:                                  0.81ms
avg:                                  2.98ms
max:                               3283.40ms
approx.  95 percentile:               4.62ms

Threads fairness:
events (avg/stddev):           20123.7500/63.52
execution time (avg/stddev):   59.9177/0.00

root@server1:~#

Die wichtige Zahl ist der Wert von transactions (pro Sekunde):

transactions:                        160990 (2683.06 per sec.)

Um das System danach zu bereinigen (also die Tabelle zu entfernen) benutzen Sie:

sysbench –test=oltp –mysql-db=test –mysql-user=root –mysql-password=yourrootsqlpassword cleanup

5 Links

Das könnte dich auch interessieren …