sysbench
針對數據庫系統的多線程基準測試工具(benchmark tool)
命令格式
sysbench [common-options] --test=name [test-options] <command>
Command有: prepare run cleanup help version
詳解
- sysbench是一個模塊化、跨平臺以及多線程的基準測試工具
- 用來評估操作系統參數,這些參數對於正在運行一個高負載的數據庫的系統非常重要
- 這個benchmark組件的核心思想是快速獲取系統性能的印象,而不需要安裝複雜的數據庫benchmark或者甚至根本不需要安裝數據庫。
- 設計非常簡單。Sysbench運行指定數量的線程,這些線程併發地執行請求。
- 請求產生的實際工作負載取決於特定的測試模式
- 你可以限制要麼是請求的總數,或者是benchmark的總運行時間,或者兩者都行
內置數據庫驅動
- mysql MySQL驅動
- pgsql PostgreSQL驅動
內置測試
- fileio 文件IO測試
- cpu CPU性能測試
- memory 內存功能速度測試
- threads 線程子系統性能測試
- mutex 互斥鎖性能測試
- 注意:
- 可用的測試模式是通過內置模塊實現的。並且Sysbench被設計成非常容易去添加新的測試模式。
- 每個測試模式都有額外的其他選項的
通用選項
- –num-threads=N 使用的線程數[1]
- –max-requests=N 請求總數的限制[10000]
- –max-time=N 以秒爲單位的總的執行時間 [0]
- –forced-shutdown=STRING 在等了
--max-time
的時間之後,才強制關閉[off] - –thread-stack-size=SIZE 每個線程的線程棧大小64K]
- –tx-rate=N 目標事務處理速率就是tps(tps)[0]
- –report-interval=N 定期以指定的時間間隔(以秒爲單位)報告中間統計信息。 0禁用中間報告[0]
- –report-checkpoints=轉儲完整的統計信息並在指定的時間點重置所有計數器。 該參數是逗號分隔值的列表,表示當必須執行
checkpoint(s)
時,從開始測試到此刻所經過的秒數。 默認情況下,報告檢查點處於關閉狀態。[] - –test=STRING 要運行的測試
- –debug=[on|off] 打印更多的調試信息[off]
- –validate=[on|off] 當可能的時候執行有效性檢查[off]
- –help=[on|off] 答應help菜單並退出
- –version=[on|off] 打印版本信息並退出[off]
- –rand-type=STRING 隨機數分佈{uniform,gaussian,special,pareto} [special]
- –rand-spec-iter=N 用於數字生成器的迭代數[12]
- –rand-spec-pct=N 被視爲“特殊”(特殊分配)的值的百分比[1]
- –rand-spec-res=N 要使用的“特殊”值的百分比(用於特殊分配)[75]
- –rand-seed=N 隨機數生成器的種子,當0 [0]時忽略
- –rand-pareto-h=N 參數h用於pareto分佈[0.2]
- –config-file=FILENAME 包含命令行選項的文件名
日誌選項
- –verbosity=N 囉嗦級別{5 - debug, 0 - only critical messages} [3]
- –percentile=N 查詢響應時間的百分數排名,使用0可以關掉百分位統計。[95] percentile rank of query response times to count. Use the special value of 0 to disable percentile statistics. [95]
通用數據庫選項
- –db-driver=STRING 指定要用的數據庫驅動
- –db-ps-mode=STRING 使用prepared語句模式(防sql注入攻擊的那種東西) {auto, disable} [auto]
- –db-debug=[on|off] 打印數據庫特定的調試信息 [off]
mysql選項
- –mysql-host=[LIST,…] 服務端主機[localhost]
- –mysql-port=[LIST,…] 服務端端口[3306]
- –mysql-socket=[LIST,…] 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連接的話,使用SSL連接[off]
- –mysql-compression=[on|off] 如果客戶端庫支持的話,使用壓縮[off]
- –myisam-max-rows=N MyISAM表的最大行參數 [1000000]
- –mysql-debug=[on|off] dump所有的客戶端庫的調用[off]
- –mysql-ignore-errors=[LIST,…] 要忽略的錯誤的列表,或者寫成all [1213,1020,1205]
- –mysql-dry-run=[on|off] 空運行,裝作所有的MySQL客戶端API調用都是成功的,而不執行他們[off]
文件IO選項
- –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-async-backlog=N 每線程排隊的異步操作數[128]
- –file-extra-flags=STRING 文件打開時使用的額外的標誌{sync,dsync,direct} []
- –file-fsync-freq=N 在多少個請求之後做fsync() (0 - don’t use 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 如果可能的話,合併最多N次IO請求 (0 - don’t merge) [0]
- –file-rw-ratio=N 讀/寫的比率[1.5]
CPU選項
- –cpu-max-prime=N 素數發生器的上限[10000]
內存選項
- –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]
線程選項
- –thread-yields=N 每個請求做的yields數量[1000]
- –thread-locks=N 每個線程的鎖的數量[8]
互斥鎖選項
- –mutex-num=N mutex數組的大小[4096]
- –mutex-locks=N 每個線程做的互斥鎖加鎖操作[50000]
- –mutex-loops=N 在互斥鎖加鎖內做的空的循環次數[10000]