使用sysbench進行MySQL壓力測試


一、介紹

  sysbench是一款開源的多線程性能測試工具,可以執行CPU/內存/線程/IO/數據庫等方面的性能測試。本身支持mysql數據庫的壓測。

   是業內最常用的數據庫多線程基准測試工具,官方 1.0 版本發布以后,能夠基於 lua 腳本進行定制測試,十分方便。

二、安裝

  yum安裝:yum install sysbench

三、參數說明

       sysbench 安裝完成后,可以查看 sysbench 安裝的版本:  

  

  通過help查看參數:

  [root@iZbp1hvphr2ekyo7x52pibZ ~]# sysbench --help

  sysbench 使用語法如下:
       sysbench [options]... [testname] [command]
  其中:
  options 為參數選項
  testname 指定基准測試 oltp*.lua 腳本
  command 是要執行什么樣的操作
  下面對這三部分分別進行說明
  1. command 命令
    sysbench 的 command 是控制命令,包含以下幾個選項:
    prepare, prewarm, run, cleanup, help
    其中:
    prepare 表示測試前准備,主要創建表,生成初始測試數據
    prewarm 表示測試前進行預熱
    run 表示執行測試,根據各種測試場景進行測試
    cleanup 表示測試完后清理測試數據
    help 獲取幫助文檔

  2. testname 測試選項
    sysbench 的 testname 是表示要測試的場景,目前 sysbench 自帶的針對 mysql
    oltp 測試場景有如下幾種:

  • oltp_delete.lua 刪除測試
  • oltp_insert.lua 插入測試
  • oltp_point_select.lua 主鍵查詢測試
  • oltp_read_only.lua 只讀測試
  • oltp_read_write.lua 讀寫測試
  • oltp_update_index.lua 更新索引測試
  • oltp_update_non_index.lua 更新非索引測試
  • oltp_write_only.lua 只寫測試
  • select_random_points.lua 隨機多個查詢(in 里面多個查詢條件)
  • select_random_ranges.lua 隨機范圍查詢(between … and …)

  3. options 選項
  sysbench 的 options 里面包含測試需要的各種參數,包括初始化、預熱、運行以及不同測試場景中需要的參數,具體如下:
  1)  通用選項
    選項 描述 默認值

  • --threads=N 線程數 默認為1
  • --events=N 請求數限制,0 代表無限制 默認為0
  • --time=N 測試執行時長(單位:秒)限制 默認為10
  • --forced-shutdown=STRING 超過--time 后,強制中斷測試(off 代表不啟用,on代表啟用)默認為off
  • --thread-stack-size=SIZE 每個線程的堆棧大小(k、M、G 單位都可)默認為64K
  • --report-interval=N 每 N 秒輸出一份中間統計結果, 0 表示不輸出中間統計結果 默認為0
  • --tx-rate=N 已經廢棄,被--rate 取代 0
  • --max-requests=N 已經廢棄,被--events 取代 0
  • --max-time=N 已經廢棄,被--time 取代 0
  • --num-threads=N 已經廢棄,被--threads 取代 1

  2)  偽隨機數發生器
    選項 描述 默認值

  • --rand-type=STRING 隨機數分布(uniform、gaussian、special、pareto)默認為special
  • --rand-spec-iter=N 用於數字生成的迭代次數 默認為12
  • --rand-spec-pct 被當作 special 值所占百分比 默認1
  • --rand-spec-res=N 多少比例的 special 值被使用 默認為75
  • --rand-seed=N 隨機發生器種子,為 0 時,使用當前時間作為隨機種子 默認為0
  • --rand-pareto-h=N 是用 pareto 分布時的 h 參數 默認為0.2

  3) 日志選項
    日志選項
    選項 描述 默認值

  • --verbosity=N 信息級別(5-debug、0-關鍵信息) 默認為3
  • --percentile=N 取百分比段位延遲進行統計計算(1-100) 默認為95
  • --histogram[=on|off] 在報告中打印延遲直方圖 off

  4)  數據庫選項
    通用數據庫選項
    選項 描述 默認值
    --db-driver=STRING
    指定數據庫驅動,默認安裝支持:
      mysql - MySQL driver
      pgsql - PostgreSQL driver
    --db-ps-mode=STRING prepare 語句使用(auto、disable) 默認為auto
    --db-debug[=on|off] 是否打印數據庫特有的調試信息 默認為off
  

  mysql 選項
  選項 描述 默認值

  • --mysql-host=[LIST,...] mysql 主機 localhost
  • --mysql-port=[LIST,...] mysql 端口 3306
  • --mysql-socket=[LIST,...] mysql 本地 socket 路徑
  • --mysql-user=STRING mysql 測試用戶 sbtest
  • --mysql-password=STRING mysql 測試用戶密碼
  • --mysql-db=STRING mysql 測試庫名 sbtest
  • --mysql-ssl[=on|off] 如果客戶端支持,是否使用 SSL 連接 Off
  • --mysql-ssl-cipher=STRING 使用 SSL 連接的特定密碼
  • --mysql-compression[=on|off] 如果客戶端支持,是否使用壓縮 Off
  • --mysql-debug[=on|off] 追蹤所有客戶端的調用 Off
  • --mysql-ignore-errors=[LIST,...] 忽略錯誤列表(比如 1213,1020,1205,或者 all)
  • --mysql-dry-run[=on|off] 只運行,假裝所有的客戶端調用都執行成功,實際並沒有執行它們 默認為off

  oltp 選項
  選項 描述 默認值

  • --test=STRING 指定 oltp 測試的 lua 腳本:
  • --table-size 單表記錄數,取代--oltp-table-size 10000
  • --range-size 范圍查詢時的范圍 100
  • --tables 表數量,取代--oltp-tables-count 1
  • --point-selects 主鍵查詢測試時,每事務查詢語句數 10
  • --simple-ranges 簡單范圍查詢,每事務查詢語句數 1
  • --sum-ranges 每個事務中 sum()查詢語句數 1
  • --order-ranges 每個事務中 order by 查詢語句數 1
  • --distinct-ranges 每個事務中 distinct 查詢語句數 1
  • --index-updates 每個事務中更新索引語句數 1
  • --non-index-updates 每個事務中更新非索引字段語句數 1
  • --delete-inserts 每個事務中 delete/insert 語句數 1
  • --range-selects 是否開啟所有的范圍查詢 true
  • --auto-inc 是否使用自增列 true
  • --skip-trx 不顯式開啟事務,所有查詢使用autocommit 模式 false
  • --secondary 是否使用二級索引代替主鍵索引 false
  • --create-secondary 除了主鍵索引外,是否創建二級索引 True
  • --mysql-storage-engine mysql 存儲引擎 innodb

四、數據准備

  需要先創建數據庫,testdb

sysbench --test=/usr/share/sysbench/oltp_insert.lua \
--mysql-host=127.0.0.1\
--mysql-port=3306 \
--mysql-user=root \
--mysql-password='12345678' \
--mysql-db=testdb \
--db-driver=mysql \
--tables=10 \
--table-size=500000 \
--report-interval=10 \
--threads=128 \
prepare

 

  創建十個表,一個表500000數據

五、測試

  示例:測試主鍵查詢,5個線程,壓測200s,10s打一次報告

sysbench --test=/usr/share/sysbench/oltp_point_select.lua \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=root\
--mysql-password='12345678' \
--mysql-db=testdb \
--db-driver=mysql \
--table-size=500000\
--report-interval=10 \
--threads=5\
--time=200\
run

 

六、測試報告  

  測試結果:

  

 

   

  統計報告參數說明:

  SQL statistics:

  queries performed:

  read:  //總 select 數

  write:  //總 dml 數

  other: //begin,commit,lock tables 以及 mutex 數

 

  total: //總查詢量

  transactions: //TPS

  queries: //QPS

  ignored errors:  //忽略錯誤數

  reconnects: 0 (0.00 per sec.)

 

  General statistics:

  total time:  --time 指定的壓測時間

  total number of events: //總的請求次數

 

  Latency (ms):

  min:  //最小響應時間

  avg:  //平均響應時間

  max:  //最大響應時間

  99th percentile:  //99%的語句相應時間

  sum:  //總查詢時間

七、清空測試數據和表

sysbench --test=/usr/share/sysbench/oltp_insert.lua \
--mysql-host=127.0.0.1\
--mysql-port=3306 \
--mysql-user=root \
--mysql-password='12345678' \
--mysql-db=testdb \
--db-driver=mysql \
--tables=10 \
--table-size=500000 \
--report-interval=10 \
--threads=128 \
cleanup

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM