mysql之 sysbench0.4.12資料庫效能測試

張衝andy發表於2018-10-27

1. 常用選項

在Shell中執行以下命令便可得到sysbench的常用選項資訊:

sysbench --help

上述命令的輸出資訊如下圖所示:

sysbench使用教程

1.1 使用語法

使用sysbench時,可以透過以下語法進行基準測試:

sysbench [通用選項]... --test=<測試名稱> [測試選項]... 命令

1.2 通用選項

  • --num-threads=N :需要使用的執行緒總數(預設值為1)。

  • --max-requests=N :請求總數的上限值(預設值為10000)。

  • --max-time=N :總執行時間的上限值,以秒為單位(預設值為0,表示執行時間無限)。

  • --forced-shutdown=STRING :在–max-time之後,強制停止之前,需要等待的時間總量(預設值為off)。

  • --thread-stack-size=SIZE :每個執行緒的棧空間的大小(預設值為32KB)。

  • --init-rng=[on|off] :是否初始化隨機數生成器(預設值為off)。

  • --seed-rng=N :隨機數生成器的種子,當為0時忽略(預設值為0)。

  • --tx-rate=N :目標事務速率(TPS)(預設值為0)。

  • --tx-jitter=N :目標事務變化率,以毫秒為單位(預設值為0)。

  • --report-interval=N :指定一個間隔時間,sysbench便會定期地報告測試期間的中間統計結果,以秒為單位。若取值為0,則表示禁用中間報告功能(預設值為0)。

  • --report-checkpoints=[LIST,...] :在指定的時間點,轉儲完整的統計資料,並且復位所有的計數器。這個選項的引數是一個由逗號分隔的值,表示從測試開始到必須執行報告檢查點時需要花費的時間,以秒為單位。預設禁用報告檢查點。

  • --test=STRING :需要執行的測試項。

  • --debug=[on|off] :輸出更多的除錯資訊(預設值為off)。

  • --validate=[on|off] :在可能的情況下執行有效性檢查。

  • --help=[on|off] :輸出幫助資訊,然後退出。

  • --version=[on|off] :輸出版本資訊,然後退出。

1.3 日誌選項

  • --verbosity=N :日誌的詳細等級。若取值為5,則輸出除錯日誌;若取值為0,則只輸出重要資訊(預設值為4)。

  • --percentile=N :計算查詢響應時間的百分比等級(預設值為95,表示sysbench會丟棄5%的最長的請求,然後再從剩餘的請求中選擇一個最長的請求)。

1.4 內建測試項

  • fileio :檔案I/O測試。

  • cpu :CPU效能測試。

  • memory :記憶體速度測試。

  • threads :執行緒子系統效能測試。

  • mutex :互斥效能測試。

  • oltp :OLTP(線上事務處理)測試。

1.5 命令

  • prepare :為某些測試執行一些準備性的工作,例如:為 fileio 測試在磁碟上建立必要的檔案,為 OLTP 測試填充測試資料庫,等等。

  • run :執行由 --test 選項執行的測試項。

  • cleanup :在測試結束之後,刪除由測試產生的臨時資料和檔案。

  • help :顯示由 --test 指定的測試項的幫助資訊。

  • version :輸出sysbench的版本資訊。

2. 檔案I/O測試

在Shell中執行以下命令,可以看到檔案I/O測試(fileio)的測試選項:

sysbench --test=fileio help

fileio 的測試選項如下圖所示:

sysbench使用教程

  • --file-num=N :需要建立的檔案數量(預設為128個檔案)。

  • --file-block-size=N :在所有的IO操作中使用的資料塊的大小(預設值為16384)。

  • --file-total-size=SIZE :需要建立的檔案的總大小(預設值為2G)。

  • --file-test-mode=STRING :測試模式,可選的值有seqwr(順序寫)、seqrewr(順序重寫)、seqrd(順序讀)、rndrd(隨機讀)、rndwr(隨機寫)、rndrw(隨機讀寫)。

  • --file-io-mode=STRING :檔案操作模式,可選的值有sync、async、mmap(預設值為sync)。

  • --file-extra-flags=STRING :在已開啟檔案上使用的額外標誌,可選的值有sync、dsync、direct。

  • --file-fsync-freq=N :在發出這個引數指定數量的請求之後,執行fsync(),將記憶體中已修改的檔案資料同步至儲存裝置中。若取值為0,則表示不使用fsync()(預設值為100)。

  • --file-fsync-all=[on|off] :每次寫操作之後,執行fsync()(預設值為off)。

  • --file-fsync-end=[on|off] :在測試結束時,執行fsync()(預設值為on)。

  • --file-fsync-mode=STRING :同步資料時,使用哪種方法,可選的值有fsync、fdatasync(預設值為fsync)。

  • --file-merged-requests=N :如果可能,最多合併由這個引數指定數量的IO請求。若取值為0,則表示不會合並請求(預設值為0)。

  • --file-rw-ratio=N :進行讀寫綜合測試時,讀寫操作的比率(預設值為1.5)。

3. CPU效能測試

在Shell中執行以下命令,可以看到CPU效能測試(cpu)的測試選項:

sysbench --test=cpu help

cpu 的測試選項如下圖所示:

sysbench使用教程

  • --cpu-max-prime=N :素數生成器的上限值(預設值為10000)。

4. 記憶體速度測試

在Shell中執行以下命令,可以看到記憶體速度測試(memory)的測試選項:

sysbench --test=memory help

memory 的測試選項如下圖所示:

sysbench使用教程

  • --memory-block-size=SIZE :測試使用的記憶體塊的大小(預設值為1K)。

  • --memory-total-size=SIZE :需要傳輸的資料總大小(預設值為100G)。

  • --memory-scope=STRING :記憶體訪問範圍,可選的值有global、local(預設值為global)。

  • --memory-hugetlb=[on|off] :從HugeTLB池中分配記憶體(預設值為off)。

  • --memory-oper=STRING :記憶體操作的型別,可選的值有read、write、none(預設值為write)。

  • --memory-access-mode=STRING :記憶體訪問模式,可選的值有seq(順序)、rnd(隨機)(預設值為seq)。

5. 執行緒子系統測試

在Shell中執行以下命令,可以看到執行緒子系統測試(threads)的測試選項:

sysbench --test=threads help

threads 的測試選項如下圖所示:

sysbench使用教程

  • --thread-yields=N :每個請求的執行緒暫停次數(預設值為1000)。

  • --thread-locks=N :每個執行緒使用的鎖的數量(預設值為8)。

6. 互斥鎖效能測試

在Shell中執行以下命令,可以看到互斥鎖效能測試(mutex)的測試選項:

sysbench --test=mutex help

mutex 的測試選項如下圖所示:

sysbench使用教程

  • --mutex-num=N :互斥鎖陣列的總大小(預設值為4096)。

  • --mutex-locks=N :執行每個執行緒時使用的互斥鎖的數量(預設值為50000)。

  • --mutex-loops=N :在互斥鎖內部執行的空迴圈的數量(預設值為10000)。

7. OLTP測試

在Shell中執行以下命令,可以看到線上事務處理測試(oltp)的測試選項:

sysbench --test=oltp help

oltp 的測試選項如下圖所示:

sysbench使用教程

7.1 OLTP選項

  • --oltp-test-mode=STRING :可以使用的測試型別,可選的值有simple(簡單)、complex(高階事務)、nontrx(無事務)、sp(儲存過程)(預設值為complex)。

  • --oltp-reconnect-mode=STRING :重連模式,可選的值有session、transaction、query、random(預設值為session)。

  • --oltp-sp-name=STRING :那麼 --oltp-test-mode=sp ,那麼這個引數可用於指定需要呼叫的儲存過程的名稱。

  • --oltp-read-only=[on|off] :只生成“讀”查詢(不會修改資料庫)(預設值為off)。

  • --oltp-avoid-deadlocks=[on|off] :以遞增的順序生成更新關鍵字,這樣可以避免死鎖(預設值為off)。

  • --oltp-skip-trx=[on|off] :跳過BEGIN/COMMIT語句(預設值為off)。

  • --oltp-range-size=N :範圍查詢的範圍大小(預設值為100)。

  • --oltp-point-selects=N :一個事務中的點選擇的數量(預設值為10)。

  • --oltp-use-in-statement=N :每次查詢時,在10個主鍵的查詢中使用IN語句(預設值為0)。

  • --oltp-simple-ranges=N :一個事務中的簡單範圍查詢的數量(預設值為1)。

  • --oltp-sum-ranges=N :一個事務中的求和(SUM)範圍查詢的數量(預設值為1)

  • --oltp-order-ranges=N :一個事務中的排序(ORDER)範圍查詢的數量(預設值為1)。

  • --oltp-distinct-ranges=N :一個事務中的去重(DISTINCT)範圍查詢的數量(預設值為1)。

  • --oltp-index-updates=N :一個事務中的索引更新(UPDATE)查詢的數量(預設值為1)。

  • --oltp-non-index-updates=N :一個事務中的非索引更新(UPDATE)的數量(預設值為1)。

  • --oltp-nontrx-mode=STRING :非事務測試的模式,可選的值有select、update_key、update_nokey、insert、delete(預設值為select)。

  • --oltp-auto-inc=[on|off] :測試表的id列是否應當使用AUTO_INCREMENT(主鍵自增長)功能(預設值為on)。

  • --oltp-connect-delay=N :在連線至資料庫之後,進入睡眠的時間,以毫秒為單位(預設值為10000)。

  • --oltp-user-delay-min=N :在每次請求之後,進入睡眠的最小時間,以毫秒為單位(預設值為0)。

  • --oltp-user-delay-max=N :在每次請求之後,進入睡眠的最大時間,以毫秒為單位(預設值為0)。

  • --oltp-table-name=STRING :測試表的名稱(預設值為sbtest)。

  • --oltp-table-size=N :測試表中的記錄數量(預設值為10000)。

  • --oltp-dist-type=STRING :隨機數的分佈方式,可選的值有uniform(均勻分佈)、gaussian(高斯分佈)、special(特殊分佈)(預設值為special)。

  • --oltp-dist-iter=N :生成數字時需要使用的迭代次數(預設值為12)。

  • --oltp-dist-pct=N :被當作是“特殊值”的數值的百分比,只用於隨機數的特殊分佈方式(預設值為1)。

  • --oltp-dist-res=N :需要使用的“特殊值”的百分比,只用於隨機數的特殊分佈方式(預設值為1)。

  • --oltp-point-select-mysql-handler=[on|off] :當進行點選擇時,使用MySQL HANDLER(預設值為off)。

  • --oltp-point-select-all-cols=[on|off] :當進行點選擇查詢時,選擇所有的列(預設值為off)。

  • --oltp-secondary=[on|off] :使用二級索引,而不是主鍵(PRIMARY)索引(預設值為off)。

  • --oltp-num-partitions=N :測試表使用的分割槽的數量(預設值為0)。

  • --oltp-num-tables=N :測試表的數量(預設值為1)。

7.2 通用資料庫選項

  • --db-driver=STRING :指定需要使用的資料庫驅動(透過1.5節的 help 命令,可以看到可用的驅動列表)。

  • --db-ps-mode=STRING :如果選用的資料庫驅動支援預處理語句(Prepared Statement) API,那麼sysbench就會在所有查詢中儘可能地使用服務端的預處理語句。否則,就會使用客戶端(或模擬端)的預處理語句。即使當PS API可用時,這個選項也允許強制使用模擬方式。可選的值有auto、disable(預設值為auto)。

7.3 內建資料庫驅動

  • mysql :MySQL驅動程式。

注意:

由於本文只針對MySQL進行OLTP測試,此處的驅動列表只有MySQL的驅動程式。實際上,除了MySQL之外,sysbench還支援Oracle、PostgreSQL等資料庫。

7.4 MySQL選項

  • --mysql-host=[LIST,...] :MySQL伺服器的主機名或IP地址(預設值為localhost)。

  • --mysql-port=N :MySQL伺服器的埠號(預設值為3306)。

  • --mysql-socket=STRING :MySQL的套接字檔案。

  • --mysql-user=STRING :MySQL的使用者名稱(預設值為sbtest)。

  • --mysql-password=STRING :MySQL的登入密碼。

  • --mysql-db=STRING :MySQL的資料庫名(預設值為sbtest)。

  • --mysql-table-engine=STRING :測試表使用的儲存引擎,可選的值有myisam、innodb、bdb、heap、ndbcluster、federated(預設值為innodb)。

  • --mysql-engine-trx=STRING :是否使用支援事務的儲存引擎,可選的值有yes、no、auto(預設值為auto)。

  • --mysql-ssl=[on|off] :若客戶端程式庫支援SSL連線,則使用(預設值為off)。

  • --myisam-max-rows=N :MyISAM表能夠支援的最大行數(預設值為1000000)。

  • --mysql-create-options=STRING :傳遞給 CREATE TABLE 語句的額外選項。

三、sysbench使用示例

1. 檔案I/O測試

在Shell中執行以下命令:

# prepare階段:

sysbench --test=fileio --num-threads=16 --file-total-size=2G --file-test-mode=rndrw prepare

# run階段:

sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run

# cleanup階段:

sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup

上述命令表示:

  • 在測試準備階段,使用16個執行緒,建立的測試檔案總大小為2GB,檔案測試模式為隨機讀寫。

  • 在測試執行階段,使用20個執行緒,測試檔案總大小為2GB,檔案測試模式為隨機讀寫。

  • 在測試清除階段,使用20個執行緒,測試檔案總大小為2GB,檔案測試模式為隨機讀寫。

測試結果如下圖所示:

  • 在測試準備階段,由下圖可知,建立了128個測試檔案,每個檔案大小都為16MB,檔案總大小為2GB,寫入速度為43.61MB/s:

sysbench使用教程

  • 在測試執行階段,由下圖可知,隨機I/O請求的次數為10000次,讀寫操作的比例為1.50,使用fsync()同步記憶體和硬碟的資料,每隔100個請求同步一次:

sysbench使用教程

  • 在測試清除階段,刪除所有測試檔案:

sysbench使用教程

2. CPU效能測試

在Shell中執行以下命令:

sysbench --test=cpu --cpu-max-prime=2000 run

上述命令表示:

  • 素數生成器的上限值為2000。

測試結果如下圖所示:

sysbench使用教程

3. 記憶體速度測試

在Shell中執行以下命令:

sysbench --test=memory --memory-block-size=8K --memory-total-size=1G run

上述命令表示:

  • 用於測試的記憶體塊大小為8KB,用於測試記憶體的總資料大小為1GB。

測試結果如下圖所示:

sysbench使用教程

4. 執行緒子系統測試

在Shell中執行以下命令:

sysbench --test=threads --num-threads=500 --thread-yields=100 --thread-locks=4 run

上述命令表示:

  • 用於測試的執行緒數量為500個,每個請求的執行緒暫停次數為100次,每個執行緒具有4個鎖。

測試結果如下圖所示:

sysbench使用教程

5. 互斥鎖效能測試

在Shell中執行以下命令:

sysbench --test=mutex --num-threads=100 --mutex-num=1000 --mutex-locks=100000 --mutex-loops=10000 run

上述命令表示:

  • 用於測試的執行緒數量為100個,互斥鎖陣列的的大小為1000,每個執行緒執行的互斥鎖次數為100000次,互斥鎖內部執行的空迴圈次數為10000次。

測試結果如下圖所示:

sysbench使用教程

6. OLTP測試

在Shell中執行以下命令:

# prepare階段:

sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=localhost --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=password prepare

# run階段:

sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=localhost --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=password run

# cleanup階段:

sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=localhost --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=password cleanup

上述命令表示:

  • 在測試準備階段,使用的儲存引擎為InnoDB,MySQL伺服器為本機,MySQL的資料庫名為test,測試表的記錄總數為500000條,MySQL的使用者名稱為root,MySQL的登入密碼為password。

  • 在測試執行階段,使用的執行緒數量為16個,使用的儲存引擎為InnoDB,MySQL伺服器為本機,MySQL的資料庫名為test,測試表的記錄總數為500000條,MySQL的使用者名稱為root,MySQL的登入密碼為password。

  • 在測試清除階段,使用的執行緒數量為16個,使用的儲存引擎為InnoDB,MySQL伺服器為本機,MySQL的資料庫名為test,測試表的記錄總數為500000條,MySQL的使用者名稱為root,MySQL的登入密碼為password。

測試結果如下圖所示:

  • 在測試準備階段,由下圖可知,建立了一個名為sbtest的測試表,這張表中有500000條記錄:

sysbench使用教程

  • 在測試執行階段,由下圖可知,使用了16個執行緒,生成資料的方式採用特殊分佈(12次迭代,在75%的情況下返回生成的1%的值),開始事務時使用BEGIN語句,主鍵採用自增長模式,OLTP測試的最大請求數量為10000次:

sysbench使用教程

  • 在測試清除階段,清除測試表和測試資料:

sysbench使用教程

 

轉自:

sysbench使用教程 - 今日頭條(TouTiao.com)
http://toutiao.com/a6319391414447046914/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5188200538&utm_medium=toutiao_ios


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2217765/,如需轉載,請註明出處,否則將追究法律責任。

相關文章