Kiểm tra khả năng đọc ghi database của VPS bằng sysbench

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.

Trong quá trình cài đặt database
  • 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ề:

Kết quả kiểm tra thao tác với database bằng sysbench

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:

Kết quả kiểm tra database 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.

Viết một bình luận