Sysbench có tính năng kiểm tra đọc ghi cơ sở dữ liệu (csdl/database) rất hay, và hôm nay chúng ta sẽ đi vào thực hành kiểm tra nó trên một VPS phổ thông của Vultr.
Môi trường demo: Vultr 1GB RAM, AMD64, OS: Ubuntu LTS 24.04.
Tại sao kiểm tra này quan trọng cho web host trên VPS: chúng ta có chỉ số geekbench6 qua YABS rất tiện lợi, một chuẩn chung tốt, tuy nhiên nó thiên về đánh giá sức mạnh tổng thể với các nhiệm vụ đa dạng thiên về tiêu chí của người dùng máy tính cá nhân. Tập trung hơn, bài test csdl của sysbench nhắm thẳng vào nhiệm vụ mà VPS cho website phải làm, đó là thao tác với csdl. Dĩ nhiên phép đo geekbench6 vẫn rất có ích nhưng rõ ràng bài test của sysbench cho thấy một chỉ số sức mạnh rất gần với nhu cầu của website.
Bước 1: Tạo csdl trên VPS
a. Nạp danh sách các gói mới nhất cho Ubuntu:
sudo apt update
b. Tạo csdl MariaDB
sudo apt install mariadb-server -y
c. Khởi động & kiểm tra trạng thái
sudo systemctl status mariadb
Cần thấy dòng thông báo: Active: active (running)
d. Cấu hình bảo mật cho database
sudo mysql_secure_installation
Làm theo hướng dẫn, thường nó sẽ hỏi nhập mật khẩu root để có quyền thao tác với database, sau đó người dùng root sẽ sử dụng database mà không cần thiết lập thêm mật khẩu nữa.
- Remove anonymous users? (xóa người dùng ẩn danh): chọn Y
- Disallow root login remotely? (ngăn root đăng nhập từ xa, ngoài localhost): chọn Y
- Remove test database and access to it? (xóa database demo): chọn Y
- Reload privilege tables now? (tải lại bảng đặc quyền ngay bây giờ): chọn Y
Bước 2: Chuẩn bị môi trường kiểm tra chính thức
a. Cài đặt sysbench
sudo apt install sysbench
b. Truy cập MariaDB
sudo mysql -u root -p
Bước này sẽ yêu cầu nhập mật khẩu cho root.
c. Tạo database và người dùng sysbench
CREATE DATABASE sbtest;
CREATE USER 'sbuser'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON sbtest.* TO 'sbuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Thay thế your_secure_password bằng mật khẩu mạnh mà bạn muốn. Nếu đổi thì các mã bên dưới có đoạn nào là your_secure_password thì bạn cũng phải đổi tương ứng. (PS: cứ giữ nguyên cũng không ảnh hưởng gì, test xong chúng ta cũng cài lại VPS thôi).
d. Tạo bảng cơ sơ dữ liệu 1 triệu dòng
sysbench oltp_read_write \
--threads=1 \
--mysql-host=localhost \
--mysql-user=sbuser \
--mysql-password=your_secure_password \
--mysql-db=sbtest \
--table-size=1000000 \
--tables=4 \
prepare
Số trong threads nên để tương ứng với số lõi của CPU.
Bước 3: Lệnh kiểm tra hiệu năng của database
a. Đơn luồng (--threads=1)
sysbench oltp_read_write \
--threads=1 \
--mysql-host=localhost \
--mysql-user=sbuser \
--mysql-password=your_secure_password \
--mysql-db=sbtest \
--time=60 \
--percentile=95 \
run
--time=60 : nghĩa là kiểm tra đọc ghi database trong vòng 60 giây.
--percentile=95 : nghĩa là báo cáo độ trễ mà 95% giao dịch (các lệnh sql phối hợp để làm một nhiệm vụ) hoàn thành trong khoảng thời gian này. Có thể thay đổi con số này thành 97, 99 nếu muốn. Thông số phản ánh cảm nhận của đa số người dùng (95, 97, 99,…phần trăm người dùng)
b. Đa luồng (--threads=2)
Lưu ý: trước khi thực hiện bài kiểm tra mới cần phải dọn dẹp dữ liệu bảng (bước 5) rồi quay lại mục d, phần 2 để chuẩn bị bảng mới.
Ngay cả khi CPU của bạn chỉ có 1 lõi, bạn cũng nên thử đa luồng (số luồng là 2). Nếu có nhiều lõi hãy thử với luồng gấp đôi số lõi (ví dụ 2 lõi hãy thử --threads=4).
sysbench oltp_read_write \
--threads=2 \
--mysql-host=localhost \
--mysql-user=sbuser \
--mysql-password=your_secure_password \
--mysql-db=sbtest \
--time=60 \
--percentile=95 \
run
Bước 4: Phân tích kết quả
Kết quả trả về:
Hãy tập trung vào các thông số sau:
SQL statistics (các thống kê liên quan đến SQL)
1. queries performed (hiệu suất truy vấn):
- read (đọc): 472808
- write (ghi): 135088
- other (các hoạt động khác): 67544
- total (tổng số): 657440
2. transactions (số lượng giao dịch/một tập hợp các lệnh đọc, ghi, khác với csdl): 33772 (562,85 giao dịch/giây).
3. queries (số lượng truy vấn): 675440 (11257,03 truy vấn/giây)
4. ignored errors (các lỗi bị bỏ qua): không có.
5. reconnects (kết nối lại): không có vấn đề kết nối lại với database.
–
Genetal statistics (thống kê chung)
- total time: tổng thời gian (bài test được thực hiện trong 60s).
- total number of events (tổng số lượng các sự kiện, chính là giao dịch): 33772.
–
Latency (ms) / Độ trễ tính theo ms
Tính theo mỗi sự kiện (giao dịch).
- min (thấp nhất): 1,52ms
- avg (trung bình): 1,78ms
- max (cao nhất): 108,59ms
- 95th percentile (95% sự kiện được hoàn thành trong): 2,03ms
- sum (tổng tất cả): 59951,24ms (=60s)
–
Threads fairness (sự cân bằng trong phân luồng)
- events/sự kiện (avg/stddev) / (trung bình/độ lệch chuẩn): 33772/0
- excution time (avg/stddev) / (trung bình/độ lệch chuẩn): 59,9512/0
Vì chỉ có 1 luồng nên không có chia luồng, do vậy không thấy lệch gì cả! Bạn có thể sẽ thấy nếu nó có từ 2 luồng trở lên.
—
Kết quả trả về với 2 luồng:

Bước 5: Dọn dẹp dữ liệu cũ để test lại nếu muốn
Truy cập vào csdl với user sbuser:
sudo mysql -u sbuser -p
Nhập pass:
your_secure_password
Chọn database:
USE sbtest;
Hiển thị bảng:
SHOW TABLES;
Xóa các bảng:
DROP TABLE sbtest1, sbtest2, sbtest3, sbtest4;
Thoát csdl:
EXIT;
Rồi bạn quay lại bước 2.d để tạo các bảng mới chuẩn bị cho việc test lại.

