做爲DBA,你不得不掌握的壓測工具


mysqlslap


    mysqlslapMySQL自帶的一個用於實現負載性能測試和壓力測試的工具。它能夠模擬多個客戶端對數據庫進行施壓,並生成報告來了解數據庫的性能情況。
mysqlslap的運行過程主要分三步:
  1. 建立庫、表,導入數據用於測試。此過程由單線程完成。node

  2. 開始進行壓力測試。該步驟能夠使用多線程完成。mysql

  3. 清理測試數據。此過程由單線程完成。nginx

下面舉幾個例子來講明下如何使用mysqlslap
1. 自動生成測試表,其中會生成自增列,採用單線程進行測試。
[root@node1 ~]# mysqlslap -uroot -p --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrementEnter password:Benchmark#運行全部語句的平局時間,單位秒Average number of seconds to run all queries: 0.018 seconds#運行全部語句的最小秒數Minimum number of seconds to run all queries: 0.018 seconds#運行全部語句的最大秒數Maximum number of seconds to run all queries: 0.018 seconds#客戶端數量Number of clients running queries: 1#每一個客戶端運行查詢的平均數Average number of queries per client: 0
參數解釋:

--auto-generate-sql:自動生成測試表和數據,mysqlslap工具本身生成sql腳本進行測試。git

--auto-generate-sql-load-type:指定測試語句的類型。取值包括:read,key,write,update和mixed(默認)。github

--auto-generate-sql-add-autoincrement:生成的表中會添加自增列。sql

2. 指定客戶端的數量以及總的查詢次數
mysqlslap -uroot -p --auto-generate-sql --auto-generate-sql-load-type=mixed --concurrency=100 --number-of-queries=1000

--concurrency=100:指定同時有100個客戶端鏈接
--number-of-queries=1000:指定總的測試查詢次數,該值除以concurrency的值就是每一個客戶端執行的查詢次數。數據庫

3. 自定義表結構以及SQL語句,指定50個客戶端,運行測試200次
mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" --query="SELECT * FROM a" --concurrency=50 --iterations=200
--iterations 表明要運行測試多少次。
4. 使用參數指定列的數量和類型,好比int類型的字段兩列,varchar類型的字段3列。
mysqlslap -uroot -p --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
5. 從指定文件中加載create、insert、和select語句,當文件中有多條語句時用」;」隔開。
mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";"

sysbench


    sysbench是一款很是強大的數據庫測試工具,它能夠執行多種類型的基準測試,目前主要支持MySQLPostgreSQLOracle3種數據庫。
它能夠從https://github.com/akopytov/sysbench下載源碼包。
安裝
cd sysbench-0.5./autogen.sh./configure --prefix=/usr/local/sysbench --build=x86_64make && make installcp /usr/local/sysbench/bin/sysbench /usr/bin/驗證sysbench安裝是否成功。[root@node1 ~]# sysbench --versionsysbench 0.5
針對CPU的基準測試
測試計算素數直到某個最大值所須要的時間。
[root@node1 ~]# sysbench --test=cpu --cpu-max-prime=2000 runsysbench 0.5: multi-threaded system evaluation benchmarkRunning the test with following options:Number of threads: 1Random number generator seed is 0 and will be ignored…………………………General statistics:total time: 1.1302s…………………………….
針對內存的基準測試
sysbench --test=memory --memory-block-size=8k --memory-total-size=100G run
針對文件IO的基準測試
1. 首先生成測試文件:隨機寫128個文件,共計2G
sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw prepare
2. 隨機讀取測試⽂件,查看耗費的時間
sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run
其中--file-test-mode的選項以下:
seqwr:順序寫入
seqrewr:順序重寫
seqrd:順序讀取
rndrd:隨機讀取
rndwr:隨機寫入
rndrw:混合隨機讀寫
3. 測試完成,清理測試數據
sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup
針對OLTP的基準測試
1. 首先生成測試數據,下面生成一張數據量百萬行記錄的表。
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root prepare
查詢生成的測試數據:
mysql> select count(*) from sbtest1;+----------+| count(*) |+----------+| 1000000 |+----------+
2. 進行讀取驗證,採用8個併發線程,開啓只讀模式
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
測試結果以下:
OLTP test statistics: queries performed: read: 407498 write: 0 other: 58214 total: 465712 transactions: 29107 (485.07 per sec.) read/write requests: 407498 (6790.91 per sec.) other operations: 58214 (970.13 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.)General statistics: total time: 60.0064s total number of events: 29107 total time taken by event execution: 479.9865s response time: min: 1.55ms avg: 16.49ms max: 539.30ms approx. 95 percentile: 25.98msThreads fairness: events (avg/stddev): 3638.3750/42.84 execution time (avg/stddev): 59.9983/0.00
其中transactions表明了測試結果的主要評判標準,即TPS,上述測試結果中的tps485.7response time中展現了響應時間的統計信息,展現了最小、最大、平均響應時間,以及95%百分比的響應時間。
3. 清理測試數據
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root cleanup

本文分享自微信公衆號 - MySQL數據庫技術棧(Mysqltechnology)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。bash

相關文章
相關標籤/搜索