1. 程式人生 > >使用sysbench進行mysql壓測

使用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

一般壓測中我們關注的點有三個: QPSTPS95%平均響應時間,其中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】【】使用sysbenchMySQL進行壓力測試

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主要

MySQLsysbench伺服器及結果解讀

  主要壓測範圍包括CPU測試、磁碟IO測試、執行緒測試、OLTP測試等,那麼sysbench就可以滿足我們的壓測需求。下面我們簡單來看下sysbench的安裝使用以及壓測結果的解讀。 一、sysbench安裝 sysbench安裝其實非常簡單,可以參考下git,這裡我們

sysbenchMySQL,使用sysbench磁碟io

QPS - query per secondTPS - transaction per second 不是特別關注,每個業務場景中事務標準是不一樣的 Ⅰ、sysbench測試框架 Ⅱ、常用測試指令碼 [[email protected]_42_63_centos lua]# pwd /us

sysbenchMySQL,使用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