MySQL 壓測實戰(zhàn)之sysbench 從入門到精通(最新)
你想全面了解如何使用 sysbench 對 MySQL 進行壓測,包括安裝、常用壓測場景、參數配置和結果解讀,我會從基礎到實戰(zhàn)一步步給你講清楚。
一、sysbench 基礎介紹
sysbench 是一款開源的、跨平臺的多線程性能測試工具,支持對 CPU、內存、磁盤 I/O、數據庫(主要是 MySQL)等進行壓測,尤其在數據庫壓測中應用廣泛,能模擬真實的讀寫負載,評估數據庫的性能極限。
1. 安裝 sysbench
環(huán)境說明:以 Linux(CentOS 7/8 或 Ubuntu)為例,推薦安裝 1.0 及以上版本(新版語法更清晰)。
方式 1:包管理器安裝(簡單)
# CentOS/RHEL yum install -y epel-release yum install -y sysbench # Ubuntu/Debian apt update apt install -y sysbench
方式 2:源碼編譯安裝(最新版本)
# 安裝依賴 yum install -y make automake libtool pkgconfig libaio-devel mysql-community-devel git # 克隆源碼 git clone https://github.com/akopytov/sysbench.git cd sysbench # 編譯安裝 ./autogen.sh ./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql make -j$(nproc) make install # 驗證安裝 sysbench --version
二、sysbench 壓測 MySQL 核心流程
sysbench 壓測 MySQL 分為 3 個核心步驟:準備測試數據 → 執(zhí)行壓測 → 清理測試數據。
1. 核心參數說明(通用)
先熟悉常用的連接和壓測參數,后續(xù)所有場景都會用到:
| 參數 | 說明 |
|---|---|
--mysql-host | MySQL 服務器地址(默認 127.0.0.1) |
--mysql-port | MySQL 端口(默認 3306) |
--mysql-user | 連接 MySQL 的用戶名 |
--mysql-password | 連接 MySQL 的密碼 |
--mysql-db | 測試用的數據庫名(需提前創(chuàng)建) |
--table-size | 每個測試表的行數(核心參數,決定數據量) |
--tables | 測試表的數量 |
--threads | 并發(fā)線程數(模擬并發(fā)用戶數) |
--time | 壓測持續(xù)時間(秒,默認 10) |
--report-interval | 每隔幾秒輸出一次壓測進度(秒) |
2. 提前準備 MySQL 環(huán)境
-- 1. 創(chuàng)建測試數據庫 CREATE DATABASE IF NOT EXISTS sysbench_test; -- 2. 創(chuàng)建有足夠權限的用戶(避免用 root 壓測) CREATE USER 'sysbench'@'%' IDENTIFIED BY 'Sysbench@123'; GRANT ALL PRIVILEGES ON sysbench_test.* TO 'sysbench'@'%'; FLUSH PRIVILEGES;
三、常用壓測場景實戰(zhàn)
sysbench 對 MySQL 的壓測主要有 4 個核心場景:只讀(oltp_read_only)、只寫(oltp_write_only)、讀寫混合(oltp_read_write)、純插入(oltp_insert),以下以最常用的「讀寫混合」為例講解完整流程。
場景 1:讀寫混合壓測(oltp_read_write)
步驟 1:準備測試數據
sysbench oltp_read_write \ --mysql-host=127.0.0.1 \ --mysql-port=3306 \ --mysql-user=sysbench \ --mysql-password=Sysbench@123 \ --mysql-db=sysbench_test \ --table-size=1000000 \ # 每個表 100 萬行 --tables=10 \ # 共 10 個表(總數據量 1000 萬行) --db-driver=mysql \ prepare # 準備數據的核心指令
- 執(zhí)行后,sysbench 會在
sysbench_test庫中創(chuàng)建 10 張名為sbtest1~sbtest10的測試表; - 數據量根據服務器配置調整:低配服務器(1C2G)建議
table-size=100000,高配服務器(8C16G)可設table-size=5000000。

步驟 2:執(zhí)行壓測
sysbench oltp_read_write \ --mysql-host=127.0.0.1 \ --mysql-port=3306 \ --mysql-user=sysbench \ --mysql-password=Sysbench@123 \ --mysql-db=sysbench_test \ --table-size=1000000 \ --tables=10 \ --threads=64 \ # 64 并發(fā)線程(根據 CPU 核心數調整,一般為 CPU 核心數的 2 倍) --time=60 \ # 壓測持續(xù) 60 秒 --report-interval=10 \ # 每 10 秒輸出一次進度 --db-driver=mysql \ run # 執(zhí)行壓測的核心指令
步驟 3:清理測試數據(壓測完成后)
sysbench oltp_read_write \ --mysql-host=127.0.0.1 \ --mysql-port=3306 \ --mysql-user=sysbench \ --mysql-password=Sysbench@123 \ --mysql-db=sysbench_test \ --tables=10 \ --db-driver=mysql \ cleanup # 清理數據的核心指令
場景 2:其他常用場景(僅替換核心參數)
- 只讀壓測:將
oltp_read_write替換為oltp_read_only; - 只寫壓測:替換為
oltp_write_only; - 純插入壓測:替換為
oltp_insert; - 刪改混合壓測:替換為
oltp_delete或oltp_update_index。
四、壓測結果解讀(核心指標)
壓測結束后會輸出詳細結果,重點關注以下核心指標(以讀寫混合壓測為例):
SQL statistics:
queries performed:
read: 103200 # 讀請求總數
write: 29486 # 寫請求總數
other: 14743 # 其他請求(如事務提交)
total: 147429 # 總請求數
transactions: 7371 (122.83 per sec.) # 核心:TPS(每秒事務數)
queries: 147429 (2456.60 per sec.) # QPS(每秒查詢數)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.0010s # 實際壓測時長
total number of events: 7371 # 總事務數
total time taken by event execution: 3836.1251s # 所有線程執(zhí)行事件的總耗時
response time:
min: 19.02ms # 事務最小響應時間
avg: 520.43ms # 事務平均響應時間
max: 2980.15ms # 事務最大響應時間
95th percentile: 1200.50ms # 95%事務的響應時間(重點關注)- 核心指標:TPS(每秒事務數)、QPS(每秒查詢數)越高越好;95th percentile(95%響應時間)越低越好;
- 參考標準:8C16G 服務器 + MySQL 8.0,讀寫混合壓測 TPS 一般能達到 1000+,QPS 20000+,95% 響應時間 < 1s 為正常。
五、壓測注意事項
- 壓測環(huán)境隔離:不要在生產庫直接壓測,單獨搭建和生產配置一致的測試環(huán)境;
- 參數調優(yōu):壓測前可先優(yōu)化 MySQL 核心參數(如
innodb_buffer_pool_size、max_connections、innodb_flush_log_at_trx_commit); - 逐步增加并發(fā):從低并發(fā)(如 8、16)開始,逐步增加到 64、128,找到數據庫的性能拐點;
- 監(jiān)控配套:壓測時用
top、iostat、vmstat監(jiān)控服務器 CPU、磁盤 IO、內存使用,定位性能瓶頸(如 IO 打滿則需優(yōu)化磁盤,CPU 打滿則需優(yōu)化 SQL 或數據庫參數)。
總結
- sysbench 壓測 MySQL 的核心流程是「準備數據 → 執(zhí)行壓測 → 清理數據」,核心參數需關注
table-size(單表行數)、tables(表數量)、threads(并發(fā)數); - 核心壓測指標為 TPS(每秒事務數)、QPS(每秒查詢數)、95% 響應時間,前兩者越高、后者越低,數據庫性能越好;
- 壓測時需隔離環(huán)境、逐步增加并發(fā),并結合服務器監(jiān)控定位性能瓶頸,而非僅看數值。
到此這篇關于MySQL 壓測實戰(zhàn):sysbench 從入門到精通的文章就介紹到這了,更多相關mysql sysbench入門內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql存儲過程之引發(fā)存儲過程中的錯誤條件(SIGNAL和RESIGNAL語句)實例分析
這篇文章主要介紹了mysql存儲過程之引發(fā)存儲過程中的錯誤條件(SIGNAL和RESIGNAL語句),結合實例形式分析了mysql使用SIGNAL和RESIGNAL語句來引發(fā)存儲過程中的錯誤條件相關操作技巧與注意事項,需要的朋友可以參考下2019-12-12
MySQL部署時提示Table mysql.plugin doesn’t exist的解決方法
這篇文章主要介紹了MySQL部署時Table mysql.plugin doesn't exist的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
mysql8.0.11安裝配置方法圖文教程 MySQL8.0新密碼認證方式
這篇文章主要為大家詳細介紹了mysql8.0.11安裝配置方法圖文教程,以及MySQL8.0新密碼認證方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11

