Thursday, December 20, 2012

SysBench : Mysql Perfoma Benchmark

Dalam melakukan benchmarking MySQL, pengembang MySQL merekomendasikan untuk menggunakan salah satu tool populer yang disebut dengan SysBench (dibuat oleh seorang pengembang MySQL). Software tersebut dapat diperoleh di http://sysbench.sourceforge.net/

SysBench menawarkan beberapa fasilitas yang dapat digunakan oleh administrator database untuk melakukan benchmark terhadap CPU, File I/O dan perfoma MySQL.

SysBench mengukur perfoma MySQL dengan cara membuat sebuah table test di dalam database 'sbtest' dengan 1.000.000 baris data. Perintah yang dijalankan adalah sebagai berikut :
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sbtest --mysql-user=root --mysql-password=xxx prepare 


Setelah tahap persiapan, selanjutnya perintah untuk melakukan benchmark adalah sebagai berikut :

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

Dalam perintah tersebut, SysBench melakukan benchmark perfoma MySQL  melalui table di database  yang bernama 'sbtest' yang telah dipersiapkan pada proses prepare. SysBench melakukan benchmark selama 60s (1 menit) dengan mode read-only dan dengan threads sebanyak 8.

Output dari perintah tersebut adalah :
***
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 (Jumlah threads)

Doing OLTP test.
Running mixed OLTP test
Doing read-only test (mode benchmark read-only)
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:                            443184 (Jumlah query Read pada saat proses benchmark)
        write:                           0 (Jumlah query Write pada saat proses benchmark, 0 karena read only)
        other:                           63312 (Jumlah query lain pada saat proses benchmark)
        total:                           506496 (Jumlah query Read + Write + Other)
    transactions:                        31656  (527.51 per sec.) (31656 =Jumlah transaksi yg dijalakan selama proses benchmark , 527.51= Jumlah Transaksi : Total Time)
    deadlocks:                           0      (0.00 per sec.) (Tidak ditemukan transaksi yang mengalami Deadlocks)
    read/write requests:                 443184 (7385.11 per sec.) (443184=Jumlah query Read+Write, 7385.11= (Read+Write):Total Time)
    other operations:                    63312  (1055.02 per sec.) (63312=Jumlah query Other, 1055.02= Other Operations:Total Time)

Test execution summary: (Penjelasan mengenai eksekusi Test benchmark yg dilakukan)
    total time:                          60.0105s (Total waktu yang dibutuhkan untuk menjalakan benchmark --max-time)
    total number of events:              31656 (Jumlah transaksi yg dijalankan selama proses benchmark)
    total time taken by event execution: 479.8432 (Perkiraan waktu yg dibutuhkan untuk menyelesaikan benchmark seluruh Threads ="Threads*Total Time")
    per-request statistics:
         min:                                  2.22ms (waktu minimal yg dibutuhkan untuk melakukan request)
         avg:                                 15.16ms (waktu minimal yg dibutuhkan untuk melakukan request)
         max:                                105.72ms (waktu minimal yg dibutuhkan untuk melakukan request)
         approx.  95 percentile:              23.08ms (95 prcentile waktu rata-rata yg dibutuhkan untuk melakukan request)

Threads fairness:
    events (avg/stddev):           3957.0000/11.50 (3957.0000 adalah rata-rata transaksi yang diselesaikan oleh setiap Threads "Transactions:Threads", dengan standard deviasai sebesar 11.50)
    execution time (avg/stddev):   59.9804/0.00 ( 59.9804 adalah rata-rata waktu yang dibutuhkan untuk menyelesaikan benchmark setiap Threads "Total time taken by event execution:Threads")
***

Dari Output hasil benchmark, nilai yang paling penting untuk diperhatikan adalah pada bagian transactions:        31656  (527.51 per sec.) . Jumlah transaksi yang dapat dijalankan SysBench setiap detik, merupakan nilai yang nantinya bisa digunakan untuk melakukan pembandingan.