使用sysbench進行mysql壓測
1. sysbench介紹
sysbench是一個模組化的、跨平臺、多執行緒基準測試工具,主要還是用來做mysql資料庫OLTP效能測試。詳細介紹及安裝包下載請訪問官方github:https://github.com/akopytov/sysbench
除了做資料庫效能壓測,它還具備其他測試功能:
- cpu效能
- 磁碟io效能
- 排程程式效能
- 記憶體分配及傳輸速度
- POSIX執行緒效能
關於sysbench的版本一般選擇穩定版本0.5,從0.5版本開始,對於資料庫的測試,採用lua指令碼的方式進行,使用者可以通過定製lua指令碼的方式來實現自己特定的測試需求。
業界對mysql資料庫的壓測通常採用預設提供的指令碼測試
syebench主要用於mysql效能壓測,因此,這篇文章以sysbench0.5在CentOS6.5+的環境上為基礎進行講解,講解如何對mysql進行壓測
2. 安裝步驟
通過原始碼編譯方式進行安裝
2.1 獲取sysbench-0.5原始碼包
2.2 編譯安裝
確保系統安裝以下模組:
- gcc
- gcc-c++
- automake
- make
- libtool
- mysql-community-devel
如果沒有,請用以下命令安裝:
yum install gcc gcc-c++ automake make libtool mysql-community-devel
將sysbench0.5原始碼包解壓到伺服器上某目錄,假定為:
/dba/app/sysbench-0.5
進入該目錄,執行以下命令進行編譯安裝:
./autogen.sh
./configure --prefix=/dba/app/sysbench-0.5
make && make install
編譯成功後,對應的目錄是:
/dba/app/sysbench-0.5/sysbench
3. 測試步驟
測試主要通過sysbench.sh指令碼進行,執行以下命令檢視sysbench.sh具體使用方法:
./sysbench.sh --help
測試分為3步:
- 準備資料 -> prepare
- 執行測試 -> run
- 清理測試資料 -> cleanup
對於mysql壓測,主要採用oltp.lua指令碼進行測試,下面我們以oltp.lua為示例講解測試步驟:
pwd -> /dba/app/sysbench-0.5/sysbench
3.1 準備資料
./sysbench --test=tests/db/oltp.lua \
--mysql-host=10.202.44.214 --mysql-port=24801 \
--mysql-user=sysbench --mysql-password=sysbench \
--mysql-db=test \
--oltp-tables-count=10 --oltp-table-size=100000 prepare
引數說明如下:
- –test : 指定測試所用的lua指令碼
- –mysql-host : 指定連線的資料庫域名或者IP
- –mysql-port : 指定連線的資料庫埠
- –mysql-user : 指定連線的資料庫登陸使用者名稱
- –mysql-password : 登陸使用者對應的密碼
- –mysql-db : 指定測試在哪個database上進行
- –oltp-tables-count : 測試表數量
- –oltp-table-size=100000 : 每個測試表的記錄行數
上面的命令完成後,我們在對應的資料庫 10.202.44.214:24801/test 中建立了10個測試表,每個表中有10W條記錄,表名從sbtest1到sbtest10,建立的表結構如下所示:
mysql> show create table sbtest1;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest1 | CREATE TABLE `sbtest1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=32005332 DEFAULT CHARSET=utf8mb4 MAX_ROWS=1000000 |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
3.2 執行測試
當資料準備完成後,我們就可以通過以下命令執行測試:
./sysbench --test=tests/db/oltp.lua \
--mysql-host=10.202.44.214 --mysql-port=24801 \
--mysql-user=sysbench --mysql-password=sysbench \
--mysql-db=test \
--oltp-tables-count=10 --oltp-table-size=100000 \
--mysql-ignore-errors=1062,1213 \
--oltp-read-only=off --oltp_range_selects=off \
--max-time=120 --max-requests=0 --report-interval=10 --num-threads=32 run
引數說明:
- –mysql-ignore-errors=1062,1213 : 指定測試過程中忽略mysql error 1062(主鍵重複衝突)和 error 1213(死鎖)
- –oltp-read-only=off : 表示進行讀寫測試,如果取值為on,表示只進行只讀測試
- –oltp_range_selects=off : 忽略range_selects語句的執行,具體參考 oltp.lua詳解 章節
- –max-time : 測試時間,單位為秒
- –max-requests=0 : 測試最大請求次數,注意,指定了測試時間,則該引數需要設定為0
- –report-interval : 指定每隔多少秒輸出壓測統計資訊
- –num-threads : 指定壓測併發執行緒數【Important!!!】
3.3 清理測試資料
當壓測結束後,清理之前產生的資料,回收空間:
./sysbench --test=tests/db/oltp.lua \
--mysql-host=10.202.44.214 --mysql-port=24801 \
--mysql-user=sysbench --mysql-password=sysbench \
--mysql-db=test \
--oltp-tables-count=10 --oltp-table-size=100000 cleanup
4. 測試結果解讀
測試結束後,輸出報告如下 OLTP test statistics 部分所示:
sysbench 0.5: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 32
Report intermediate results every 10 second(s)
Random number generator seed is 0 and will be ignored
Initializing worker threads...
Threads started!
[ 10s] threads: 32, tps: 4643.57, reads: 46456.67, writes: 18576.77, response time: 8.62ms (95%), errors: 0.00, reconnects: 0.00
[ 20s] threads: 32, tps: 4700.98, reads: 47010.98, writes: 18805.81, response time: 8.35ms (95%), errors: 0.00, reconnects: 0.00
[ 30s] threads: 32, tps: 3986.91, reads: 39878.93, writes: 15955.85, response time: 8.67ms (95%), errors: 0.00, reconnects: 0.00
[ 40s] threads: 32, tps: 4061.90, reads: 40608.70, writes: 16239.30, response time: 8.31ms (95%), errors: 0.00, reconnects: 0.00
[ 50s] threads: 32, tps: 4378.40, reads: 43786.60, writes: 17512.20, response time: 8.23ms (95%), errors: 0.00, reconnects: 0.00
[ 60s] threads: 32, tps: 4254.68, reads: 42542.68, writes: 17020.71, response time: 8.25ms (95%), errors: 0.00, reconnects: 0.00
[ 70s] threads: 32, tps: 4772.10, reads: 47726.61, writes: 19088.31, response time: 8.09ms (95%), errors: 0.00, reconnects: 0.00
[ 80s] threads: 32, tps: 4856.82, reads: 48563.93, writes: 19425.69, response time: 8.09ms (95%), errors: 0.00, reconnects: 0.00
[ 90s] threads: 32, tps: 4762.68, reads: 47624.51, writes: 19050.82, response time: 8.46ms (95%), errors: 0.00, reconnects: 0.00
[ 100s] threads: 32, tps: 4779.91, reads: 47800.80, writes: 19119.54, response time: 8.10ms (95%), errors: 0.00, reconnects: 0.00
[ 110s] threads: 32, tps: 4869.00, reads: 48690.02, writes: 19477.41, response time: 8.14ms (95%), errors: 0.00, reconnects: 0.00
[ 120s] threads: 32, tps: 4925.81, reads: 49259.20, writes: 19703.44, response time: 8.06ms (95%), errors: 0.00, reconnects: 0.00
OLTP test statistics:
queries performed:
read: 5499580 //總select數量
write: 2199832 //總update、insert、delete語句數量
other: 1099916 //commit、unlock tables以及其他mutex的數量
total: 8799328
transactions: 549958 (4582.78 per sec.) //通常需要關注的數字(TPS)
read/write requests: 7699412 (64158.98 per sec.)
other operations: 1099916 (9165.57 per sec.)
ignored errors: 0 (0.00 per sec.) //忽略的錯誤數
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 120.0052s
total number of events: 549958 //總的事件數,一般與transactions相同
total time taken by event execution: 3838.9062s
response time:
min: 4.07ms
avg: 6.98ms
max: 1103.68ms
approx. 95 percentile: 8.25ms //95%的語句的平均響應時間
Threads fairness:
events (avg/stddev): 17186.1875/622.35
execution time (avg/stddev): 119.9658/0.00
一般壓測中我們關注的點有三個: QPS、 TPS 和 95%平均響應時間,其中TPS和95%的平均響應時間可以從報告中直接獲取,而QPS的計算方式如下:
QPS = 總select數量 / 測試總時長(秒)
如上結果所示,在客戶端併發為32執行緒時候,MySQL的TPS、QPS和95%平均響應時間為:
- TPS : 4582
- QPS : 45830 (5499580 / 120)
- 95% resp time : 8.25ms
5. oltp.lua詳解
oltp.lua預設一次事務內會發18個sql語句,14個為讀sql(select),4個為寫sql(update、insert、delete),即讀寫比例為14:4
select語句分為2大類:
- 基於主鍵id的查詢(共10個)
語句類似:
SELECT c FROM ${rand_table_name} where id=${rand_id};
可以通過指定--oltp_point_selects=${num}
來改變語句個數
- 基於範圍查詢(共4個)
有4種(每種1個):
SELECT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end}; // simple-range
SELECT SUM(K) FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end}; // sum-range
SELECT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end} ORDER BY c; // order-range
SELECT DISTINCT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end} ORDER BY c; // distinct-range
可以通過--oltp_range_selects=off
來忽略這4個範圍查詢,當--oltp_range_selects=off=on
,還可以單獨指定這幾個範圍查詢的個數:
- –oltp_simple_ranges : 指定simple-range型別查詢語句個數
- –oltp_sum_ranges : 指定sum-range型別查詢語句個數
- –oltp_order_ranges : 指定order-range型別查詢語句個數
- –oltp_distinct_ranges : 指定distinct-range型別查詢語句個數
6. FAQs
待補充
7. 參考
相關推薦
使用sysbench進行mysql壓測
1. sysbench介紹 sysbench是一個模組化的、跨平臺、多執行緒基準測試工具,主要還是用來做mysql資料庫OLTP效能測試。詳細介紹及安裝包下載請訪問官方github:https://github.com/akopytov/sysbench 除
sysbench性能壓測以及mysql性能壓測
sysbench性能壓測以及mysql性能壓測 mysql基準測試 mysql性能測試 sysbench性能壓測以及mysql性能壓測一、Sysbench是一個模塊化的、跨平臺、多線程基準測試工具,主要用於各種不同系統的參數下的數據庫負載情況。 主要測試方式cpu性能磁盤i
MySQL壓測工具--TPCC安裝,測試
enc 解讀 file 事務 AC space 過大 一次 基準 今天我們來講一下MySQL的壓力測試工具,目前我接觸到的主要有兩種壓力測試工具:TPCC,Sysbench,前者只適合MySQL數據庫OLTP壓力測試,而Sysbench功能就比較廣泛,可以測試OS的CPU,
MySQL壓測--註意事項和FAQ
一鍵 2.3 strong fan 同步 com 5.4 flush backtrace 上次我們講了TPCC的安裝和一些使用方法,今天先不著急真正的做MySQL壓力測試,先把我最近做壓力測試的遇到的一些問題羅列出來,這樣後面做測試可以事半功倍。1.註意事項(1).提前
MySQL壓測--參數壓測
自動 mysqld 嚴格 where myisam toolbar isa ddl data 我們知道,MySQL為了保證數據的盡量不丟失,一般會把參數sync_binlog 和innodb_flush_log_at_trx_commit都設置為1,即雙1原則,但是,凡是都
MySQL壓測--異步與半同步復制
form hit eip ble -- cee binlog ast first 最近在看MySQL5.7 Manual,有關Semisynchronous Replication這一塊的內容,我們知道,MySQL默認的Replication是異步的,何為異步?何為半同
在linux下對介面進行Jmeter 壓測
JMeter在windows系統下啟動的是一個Swing GUI介面,也可以在Linux/Unix系統中作為一個命令使用。呼叫JMeter的 “jmeter -?”命令將列印所有命令選項的一個列表。列表如下: -h, --help 列印使用資訊並退出 -v, --version 列印版本資訊並推出 -
【MySQL】【壓測】使用sysbench對MySQL進行壓力測試
usr with sleep library val repos then plot 停止 1.背景 ? 出自percona公司,是一款多線程系統壓測工具,可以根據影響數據庫服務器性能的各種因素來評估系統的性能。例如,可以用來測試文件IO,操作系統調度器,內存分配和傳輸
sysbench壓測工具 壓測 mysql
mysqlSysbench的測試主要包括以下幾個方面: 1、磁盤io性能 2、cpu性能 3、內存分配及傳輸速度 4、POSIX線程性能 5、調度程序性能 6、數據庫性能(OLTP基準測試).sysbench 安裝註:我這裏選擇源碼包安裝sysbench0.5版本下載軟件http://repo.percona
sysbench 壓測mysql資料庫
sysbench是一款壓力測試工具,可以測試系統的硬體效能,也可以用來對資料庫進行基準測試,使用起來很方便,同時sysbench支援以下幾種測試模式:1、CPU運算效能2、磁碟IO效能3、排程程式效能4、記憶體分配及傳輸速度5、POSIX執行緒效能6、資料庫效能(OLTP基準測試)目前sysbench主要
【MySQL】sysbench壓測伺服器及結果解讀
主要壓測範圍包括CPU測試、磁碟IO測試、執行緒測試、OLTP測試等,那麼sysbench就可以滿足我們的壓測需求。下面我們簡單來看下sysbench的安裝使用以及壓測結果的解讀。 一、sysbench安裝 sysbench安裝其實非常簡單,可以參考下git,這裡我們
sysbench對MySQL的壓測,使用sysbench壓測磁碟io
QPS - query per secondTPS - transaction per second 不是特別關注,每個業務場景中事務標準是不一樣的 Ⅰ、sysbench測試框架 Ⅱ、常用測試指令碼 [[email protected]_42_63_centos lua]# pwd /us
sysbench對MySQL的壓測,使用sysbench壓測磁盤io
onf possible inf bubuko 最新版本 number 現在 nbsp tis QPS - query per secondTPS - transaction per second 不是特別關註,每個業務場景中事務標準是不一樣的 Ⅰ、sysbench測試框架
如何用JMeter對MySQL資料庫進行壓測?
在Jmeter中建立一個JDBC Request 測試計劃主要分兩步。 (1)設定JDBC連線池(在JDBC Connection Configuration) (2)新增JDBC Request 其他步驟就是設定引數化、斷言、監聽結果。 第一步:新增 JDBC Conne
Sysbench 效能壓測及MySQL效能壓測
sysbench簡介 sysbench是一款開源的多執行緒效能測試工具,可以執行CPU/記憶體/執行緒/IO/資料庫等方面的效能測試。 支援MySQL/Oracle/PostgreSQL。 sysbench支援以下幾種測試模式: 1、CPU運算效能 2、磁碟I
sysbench壓測自裝MySQL資料庫
壓測準備 測試機器 2vCPUs | 4GB | s6.large.2 CentOS 7.6 64bit 建立測試庫 create database test_db character set utf8mb4 collate utf8mb4_bin; 下載sysbench curl -s https:/
壓測mysql連接數
ces class 支持 col num images 運行 image 配置 Mysql server 支持的最大連接數 主機的性能直接影響到Mysql server端支持的最大並發連接數,如內存不足會造成連接創建失敗。 /etc/my.conf 配置Mysql ser
使用bender對thrift接口進行壓測
hadoop class facebook 創建 二進制格式 體積 代碼生成 憂傷 程序 背景:Facebook 開發的遠程服務調用框架 Apache Thrift,它采用接口描述語言定義並創建服務,支持可擴展的跨語言服務開發,所包含的代碼生成引擎可以在多種語言中創建高效的
分布式測試工具Beetle.DT的部署並進行HTTP,SQL,TCP壓測
-- req web har 內測 測試用例 ray beetl 安裝 由於Beetle.DT是一個分布式壓力測試工具,所以在使用上並不像普通工具那樣安裝運行這麽簡單;由於工具涉及到測試管理中心,節點和管理端等工具; 所以必須要進行相應的部署才能運行。接下來詳解一下如果安裝
Sysbench 基準壓測 IO篇
pri start repo 3.1 分享 span mib initial cat line:V1.1 mail: [email protected] date: 2017-11-17 一、Sysench測試前準備 1.1、壓測環境 配置 信息 主機 D