CLI #2: Giới thiệu lệnh sysbench để benchmark hệ thống

30/12/2020

Hôm nay Onet sẽ giới thiệu đến các bạn một công cụ dùng để benchmark hệ thống Linux (CPU, File IO, MySQL). Đó là lệnh sysbench.

Sysbench là một công cụ benchmark cho phép bạn nhanh chóng biết được hiệu năng hệ thống, điều này rất quan trọng nếu bạn có đang chạy một cơ sở dữ liệu dưới tải trọng lớn. Sysbench là nền benchmark chuẩn có thể tùy chỉnh cao và phổ biến nhất cho MySQL.

Bài viết này sẽ giới thiệu cách benchmark CPU, file IO, RAM và hiệu suất MySQL của hệ thống của bạn với sysbench.

1. Cài đặt

Trên Debian/Ubuntu:

apt-get update -y apt-get install sysbench -y

Trên CentOS/Fedora:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* yum -y install epel-release yum -y update yum install sysbench -y

Để biết thêm các thông số của lệnh sysbench, dùng lệnh:

man sysbench

Vài kiểu benchmark với sysbench:

CPU – Mất bao lâu để CPU tính được số chính tối đa (maximum primary number)? Bạn cũng có thể thêm bao nhiêu thread tham gia vào quá trình benchmark này. Đây là cách rất trực tiếp và dễ dàng để đánh giá hiệu năng của CPU.

File IO – Benchmark file IO gồm tất cả các tình huống như like direct io, sync, async, vv… kiểm tra đọc/ghi tuần tự và đọc/ghi ngẫu nhiên, Điều này làm cho Benchmark IO của diskrất có thể mở rộng.

OLTP – Benchmark MySQL bao gồm các truy vấn SELECT /INSERT / UPDATE / DELETE trên nhiều tình huống sử dụng như bulk data loading, các cập nhật range-based , xóa high volume data. Không có benchmark mysql nào có thể hoàn thành mà không có sysbench.

2. Benchmark CPU

Dùng lệnh:

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

Output mẫu:

[root@localhost ~]# sysbench --test=cpu --cpu-max-prime=20000 run WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options. sysbench 1.0.17 (using system LuaJIT 2.0.4)  Running the test with following options: Number of threads: 1 Initializing random number generator from current time   Prime numbers limit: 20000  Initializing worker threads...  Threads started!  CPU speed:     events per second:   279.75  General statistics:     total time:                          10.0012s     total number of events:              2799  Latency (ms):         min:                                    3.28         avg:                                    3.57         max:                                   11.95         95th percentile:                        3.75         sum:                                 9993.02  Threads fairness:     events (avg/stddev):           2799.0000/0.00     execution time (avg/stddev):   9.9930/0.00  [root@localhost ~]#

Bạn chú ý vào dòng total time: 10.0012s

Bạn cần phải so sánh trên nhiều hệ thống khác nhau để hiểu giá trị này có ý nghĩa như thế nào.

3. Benchmark File IO

Đầu tiên cần tạo 1 file lớn hơn nhiều so với RAM, tôi tạo 1 file 150GB.

sysbench --test=fileio --file-total-size=150G prepare
[root@localhost ~]# sysbench --test=fileio --file-total-size=150G prepare WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options. sysbench 1.0.17 (using system LuaJIT 2.0.4)  128 files, 409600Kb each, 51200Mb total Creating files for the test... Extra file open flags: (none) Creating file test_file.0 Creating file test_file.1 Creating file test_file.2 Creating file test_file.3 Creating file test_file.4 Creating file test_file.5 Creating file test_file.6 Creating file test_file.7 Creating file test_file.8 Creating file test_file.9 Creating file test_file.10 ...

Chạy benchmark

sysbench --test=fileio --file-total-size=150G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
[root@localhost ~]# 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@localhost ~]#

Dòng bạn cần quan tâm là Read 9.375Mb  Written 6.25Mb  Total transferred 15.625Mb  (53.316Kb/sec)

Xóa file 150 GB đã tạo:

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

4. Benchmark mysql

Truy cập vào mysql và tạo db tên sysbench

Sau đó, dùng lệnh sau để tạo 1000000 bản ghi

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password='passwordmysql' --mysql-db=sysbench --db-driver=mysql --tables=2 --table-size=1000000  prepare

Thay đổi passwordmysql với password mysql của bạn.

Output mẫu:

[root@localhost ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password='passwordmysql' --mysql-db=sysbench --db-driver=mysql --tables=2 --table-size=1000000  prepare sysbench 1.0.17 (using system LuaJIT 2.0.4)  Creating table 'sbtest1'... Inserting 1000000 records into 'sbtest1' Creating a secondary index on 'sbtest1'... Creating table 'sbtest2'... Inserting 1000000 records into 'sbtest2' Creating a secondary index on 'sbtest2'... [root@localhost ~]#

Trong đó:

  • --mysql-user : user sử dụng mysql
  • --mysql-password : password của user
  • --tables : Số bảng tạo
  • --table-size : Số bản ghi trong 1 bảng

Kiểm tra DB vừa tạo:

mysql -u root -p > use sysbench; > show table status like 'sbtest%' G;

Mẫu:

mysql> show table status like 'sbtest%' G; *************************** 1. row ***************************         Name: sbtest1         Engine: InnoDB         Version: 10     Row_format: Compact         Rows: 987448 Avg_row_length: 209     Data_length: 207290368 Max_data_length: 0 Index_length: 14172160     Data_free: 0 Auto_increment: 1000001     Create_time: 2020-05-13 16:55:39     Update_time: NULL     Check_time: NULL     Collation: latin1_swedish_ci     Checksum: NULL Create_options:         Comment: *************************** 2. row ***************************         Name: sbtest2         Engine: InnoDB         Version: 10     Row_format: Compact         Rows: 986400 Avg_row_length: 228     Data_length: 225132544 Max_data_length: 0 Index_length: 14172160     Data_free: 0 Auto_increment: 1000001     Create_time: 2020-05-13 16:56:06     Update_time: NULL     Check_time: NULL     Collation: latin1_swedish_ci     Checksum: NULL Create_options:         Comment: 2 rows in set (0.00 sec)  ERROR: No query specified

Đẩy tải MySQL:

sysbench /usr/share/sysbench/select_random_points.lua --table-size=2000000 --num-threads=100 --rand-type=uniform --db-driver=mysql --mysql-db=sysbench --mysql-user=root --mysql-password=passwordmysql --time=30 run

Output mẫu:

[root@localhost ~]# sysbench /usr/share/sysbench/select_random_points.lua --table-size=2000000 --num-threads=100 --rand-type=uniform --db-driver=mysql --mysql-db=sysbench --mysql-user=root --mysql-password=passwordmysql run WARNING: --num-threads is deprecated, use --threads instead sysbench 1.0.17 (using system LuaJIT 2.0.4)  Running the test with following options: Number of threads: 100 Initializing random number generator from current time   Initializing worker threads...  Threads started!  SQL statistics:     queries performed:         read:                            82667         write:                           0         other:                           0         total:                           82667     transactions:                        82667  (8218.14 per sec.)     queries:                             82667  (8218.14 per sec.)     ignored errors:                      0      (0.00 per sec.)     reconnects:                          0      (0.00 per sec.)  General statistics:     total time:                          10.0569s     total number of events:              82667  Latency (ms):         min:                                    0.15         avg:                                   12.11         max:                                 1714.04         95th percentile:                       22.69         sum:                              1001460.17  Threads fairness:     events (avg/stddev):           826.6700/277.16     execution time (avg/stddev):   10.0146/0.01  [root@localhost ~]#

Thông số bạn cần quan tâm là transactions: 82667 (8218.14 per sec.)

Làm sạch DB sau khi test xong:

sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --mysql-db=sysbench --mysql-user=root --mysql-password='passwordmysql' --tables=1 cleanup

5. Benchmark RAM

Dùng lệnh:

sysbench --test=memory --num-threads=4 run

Output mẫu:

[root@localhost ~]# sysbench --test=memory --num-threads=4 run WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options. WARNING: --num-threads is deprecated, use --threads instead sysbench 1.0.17 (using system LuaJIT 2.0.4)  Running the test with following options: Number of threads: 4 Initializing random number generator from current time   Running memory speed test with the following options:   block size: 1KiB   total size: 102400MiB   operation: write   scope: global  Initializing worker threads...  Threads started!  Total operations: 47007331 (4699425.66 per second)  45905.60 MiB transferred (4589.28 MiB/sec)   General statistics:     total time:                          10.0006s     total number of events:              47007331  Latency (ms):          min:                                    0.00          avg:                                    0.00          max:                                   22.02          95th percentile:                        0.00          sum:                                19982.18  Threads fairness:     events (avg/stddev):           11751832.7500/122424.02     execution time (avg/stddev):   4.9955/0.08  [root@localhost ~]#

Bạn cần chú ý đến dòng:

Total operations: 47007331 (4699425.66 per second)

45905.60 MiB transferred (4589.28 MiB/sec)

Kết luận

Như vậy chúng tôi đã giới thiệu đến cho bạn vài bài test cơ bản với sysbench. Chúc các bạn thành công!!

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Cài đặt phpMyAdmin sử dụng Nginx trên CentOS 7

Cài đặt 1. Trong kho lưu trữ repositories của RHEL 7.0 hoặc CentOS 7.0 không cung cấp gói cài đặt PhpMyAdmin,...
25/12/2020

Hướng dẫn thêm File Manager cho VestaCP

Theo mặc định, sau khi cài đặt, giao diện quản trị VestaCP sẽ không có công cụ File Manager tương...
25/12/2020

[MariaDB] Các thao tác cơ bản với MySQL WorkBench

MySQL Workbench là một công cụ giúp ta thao tác dễ dàng, trực quan hơn với database. Thay vì phải...
30/12/2020