基準測試工具Sysbench

一暮屡、Sysbench介紹

SysBench是一個模塊化的驻龟、跨平臺温眉、多線程基準測試工具,主要用于評估測試各種不同系統(tǒng)參數(shù)下的數(shù)據(jù)庫負載情況翁狐。它主要包括以下幾種方式的測試:

1类溢、cpu性能

2、磁盤io性能

3露懒、調(diào)度程序性能

4闯冷、內(nèi)存分配及傳輸速度

5、POSIX線程性能

6懈词、數(shù)據(jù)庫性能(OLTP基準測試)

Sysbench的oltp主要用于評估測試各種不同系統(tǒng)參數(shù)下的數(shù)據(jù)庫負載情況蛇耀。目前sysbench的數(shù)據(jù)庫測試支持MySQL、PostgreSQL坎弯、Oracle纺涤。相比0.4版本译暂,后續(xù)的版本oltp測試主要結(jié)合了lua腳本,不需要修改源碼撩炊,通過自定義lua腳本就可以實現(xiàn)不同業(yè)務(wù)類型的測試外永。

二、Sysbench安裝使用

如果沒有什么特別需求拧咳,直接使用EPEL源安裝Sysbench即可象迎。

# yum -y install epel-release

# yum -y install sysbench

# sysbench --version

sysbench 1.0.9

# sysbench --help

Usage:

??sysbench [options]... [testname] [command]

General options

--threads=N:創(chuàng)建測試線程的數(shù)量, 默認為[1]。

--events=N:事件最大數(shù)量呛踊,默認為[0] ,不限制砾淌。

--time=N:最大執(zhí)行時間,單位是s谭网,默認是[0] ,不限制汪厨。

--forced-shutdown=STRING:超過max-time強制中斷, 默認是[off]。

--thread-stack-size=SIZE:每個線程的堆棧大小, 默認是[64k]愉择。

--rate=N:average transactions rate. 0 for unlimited rate [0]劫乱。

--report-interval=N:報告中間統(tǒng)計信息間隔,0代表禁止锥涕,默認為[0]衷戈。

--report-checkpoints=[LIST,...]:轉(zhuǎn)儲完全統(tǒng)計信息并在指定時間點復(fù)位所有計數(shù)器,參數(shù)是逗號分隔值的列表层坠,表示從必須執(zhí)行報告檢查點的測試開始所經(jīng)過的時間(以秒為單位)殖妇。 默認情況下,報告檢查點處于關(guān)閉狀態(tài)[off]破花。

--debug[=on|off]:是否顯示更多的調(diào)試信息谦趣,默認是[off]。

--validate[=on|off]:在可能情況下執(zhí)行驗證檢查座每,默認是[off]前鹅。

--help[=on|off]:輸出help信息,并退出峭梳。

--version[=on|off]:輸出版本信息, 并退出舰绘。

--config-file=FILENAME:配置文件。

--tx-rate=N:deprecated alias for –rate[0].

--max-requests=N:deprecated alias for –events[0].

--max-time=N:deprecated alias for –time[0].

--num-threads=N:deprecated alias for –threads[1].

Pseudo-Random Numbers Generator options

--rand-type=STRING:分布的隨機數(shù){uniform(均勻分布)葱椭,Gaussian(高斯分布)捂寿,special(空間分布)},默認是special挫以。

--rand-spec-iter=N:產(chǎn)生數(shù)的迭代次數(shù)者蠕,默認是12窃祝。

--rand-spec-pct=N:值的百分比被視為’special’ (for special distribution)掐松,默認是1踱侣。

--rand-spec-res=N:’special’的百分比值,默認是75大磺。

--rand-seed=N:隨機數(shù)發(fā)生器的種子抡句,值為0時,將當前時間用作rng種子杠愧,默認值[0]待榔。

--rand-pareto-h=N:參數(shù)h用于pareto分布[0.2]。

Log options

--verbosity=N:日志詳細級別{5-調(diào)試, 0-僅重要消息}流济,默認為[3]锐锣。

--percentile=N:在延遲統(tǒng)計數(shù)據(jù)中計算的百分點 (1-100),使用特殊值0來禁用百分比計算[95]绳瘟。

--histogram[=on|off]:在報告中打印滯后時間直方圖雕憔,默認為[off]。

Compiled-in database drivers

mysql:MySQL驅(qū)動糖声。

pgsql:PostgreSQL驅(qū)動斤彼。

mysql options

--mysql-host=[LIST,...]:MySQL服務(wù)器地址[localhost]。

--mysql-port=[LIST,...]:MySQL服務(wù)器端口[3306]蘸泻。

--mysql-socket=[LIST,...]:MySQL服務(wù)器的socket地址琉苇。

--mysql-user=STRING:MySQL服務(wù)器的用戶名。

--mysql-password=STRING:MySQL用戶名密碼悦施。

--mysql-db=STRING:MySQL數(shù)據(jù)庫名稱[sbtest]并扇。

--mysql-compression[=on|off]:是否使用壓縮[off]。

pgsql options

--pgsql-host=[LIST,...]:PostgreSQL服務(wù)器地址[localhost]抡诞。

--pgsql-port=[LIST,...]:PostgreSQL服務(wù)器端口[5432]拜马。

--pgsql-user=STRING:PostgreSQL服務(wù)器的用戶名。

--pgsql-password=STRING:PostgreSQL用戶名密碼沐绒。

--pgsql-db=STRING:PostgreSQL數(shù)據(jù)庫名稱[sbtest]俩莽。

Compiled-in tests

fileio:文件I/O測試。

cpu:CPU性能測試乔遮。

memory:內(nèi)存速率測試扮超。

threads:線程子系統(tǒng)性能測試。

mutex:互斥鎖性能測試蹋肮。

三出刷、Sysbench壓測MySQL

Sysbench壓測MySQL流程:prepare(準備數(shù)據(jù)) -> run(運行測試) -> cleanup(清理數(shù)據(jù))

下面是目前社區(qū)提供的lua腳步(安裝sysbench默認自帶)

/usr/share/sysbench/bulk_insert.lua

/usr/share/sysbench/oltp_common.lua

/usr/share/sysbench/oltp_delete.lua

/usr/share/sysbench/oltp_insert.lua

/usr/share/sysbench/oltp_point_select.lua

/usr/share/sysbench/oltp_read_only.lua

/usr/share/sysbench/oltp_read_write.lua

/usr/share/sysbench/oltp_update_index.lua

/usr/share/sysbench/oltp_update_non_index.lua

/usr/share/sysbench/oltp_write_only.lua

/usr/share/sysbench/select_random_points.lua

/usr/share/sysbench/select_random_ranges.lua

以oltp_read_only.lua為例壓測MySQL:

準備數(shù)據(jù):

# sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=192.168.10.94 --mysql-port=3307 --mysql-user=root --mysql-password='000000' --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 prepare

壓測:

# sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=192.168.10.94 --mysql-port=3307 --mysql-user=root --mysql-password='000000' --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 run

結(jié)果:

sysbench 1.0.9 (using system LuaJIT 2.0.4)

Running the test with following options:

Number of threads: 128

Report intermediate results every 10 second(s)

Initializing random number generator from current time

Initializing worker threads...

Threads started!

[ 10s ] thds: 128 tps: 154.50 qps: 2564.53 (r/w/o: 2244.70/0.00/319.83) lat (ms,95%): 1129.24 err/s: 0.00 reconn/s: 0.00

[ 20s ] thds: 128 tps: 194.87 qps: 3113.62 (r/w/o: 2723.98/0.00/389.64) lat (ms,95%): 1109.09 err/s: 0.00 reconn/s: 0.00

[ 30s ] thds: 128 tps: 199.90 qps: 3207.14 (r/w/o: 2807.33/0.00/399.80) lat (ms,95%): 926.33 err/s: 0.00 reconn/s: 0.00

[ 40s ] thds: 128 tps: 195.06 qps: 3125.39 (r/w/o: 2735.27/0.00/390.12) lat (ms,95%): 1050.76 err/s: 0.00 reconn/s: 0.00

[ 50s ] thds: 128 tps: 218.04 qps: 3477.01 (r/w/o: 3041.13/0.00/435.88) lat (ms,95%): 831.46 err/s: 0.00 reconn/s: 0.00

[ 60s ] thds: 128 tps: 213.20 qps: 3415.43 (r/w/o: 2988.84/0.00/426.59) lat (ms,95%): 893.56 err/s: 0.00 reconn/s: 0.00

[ 70s ] thds: 128 tps: 217.60 qps: 3485.39 (r/w/o: 3049.89/0.00/435.50) lat (ms,95%): 861.95 err/s: 0.00 reconn/s: 0.00

[ 80s ] thds: 128 tps: 214.42 qps: 3423.17 (r/w/o: 2994.74/0.00/428.43) lat (ms,95%): 893.56 err/s: 0.00 reconn/s: 0.00

[ 90s ] thds: 128 tps: 199.67 qps: 3200.28 (r/w/o: 2800.75/0.00/399.53) lat (ms,95%): 909.80 err/s: 0.00 reconn/s: 0.00

[ 100s ] thds: 128 tps: 144.34 qps: 2311.44 (r/w/o: 2022.65/0.00/288.79) lat (ms,95%): 2279.14 err/s: 0.00 reconn/s: 0.00

[ 110s ] thds: 128 tps: 190.31 qps: 3045.26 (r/w/o: 2664.82/0.00/380.44) lat (ms,95%): 1032.01 err/s: 0.00 reconn/s: 0.00

[ 120s ] thds: 128 tps: 249.47 qps: 3988.58 (r/w/o: 3489.98/0.00/498.60) lat (ms,95%): 909.80 err/s: 0.00 reconn/s: 0.00

SQL statistics:

? ? queries performed:

? ? ? ? read:? ? ? ? ? ? ? ? ? ? ? ? ? ? 336420????//總select數(shù)量

? ? ? ? write:? ? ? ? ? ? ? ? ? ? ? ? ? 0????//總update、insert坯辩、delete語句數(shù)量馁龟;

? ? ? ? other:? ? ? ? ? ? ? ? ? ? ? ? ? 48060????//commit、unlock tables以及其他mutex的數(shù)量;

? ? ? ? total:? ? ? ? ? ? ? ? ? ? ? ? ? 384480

? ? transactions:? ? ? ? ? ? ? ? ? ? ? ? 24030? (198.93 per sec.)????//TPS;

? ? queries:? ? ? ? ? ? ? ? ? ? ? ? ? ? 384480 (3182.80 per sec.)????//QPS;

? ? ignored errors:? ? ? ? ? ? ? ? ? ? ? 0? ? ? (0.00 per sec.)????//忽略的錯誤數(shù);

? ? reconnects:? ? ? ? ? ? ? ? ? ? ? ? ? 0? ? ? (0.00 per sec.)

General statistics:

? ? total time:? ? ? ? ? ? ? ? ? ? ? ? ? 120.7959s????//即time指定的壓測實際;

? ? total number of events:? ? ? ? ? ? ? 24030????//總的事件數(shù),一般與transactions相同;

Latency (ms):

? ? ? ? min:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 82.09????//最小響應(yīng)時間;

? ? ? ? avg:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 641.06????//平均響應(yīng)時間;

? ? ? ? max:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 14581.38????//最大響應(yīng)時間;

? ? ? ? 95th percentile:? ? ? ? ? ? ? ? ? 1013.60????//95%的語句的平均響應(yīng)時間;

? ? ? ? sum:? ? ? ? ? ? ? ? ? ? ? ? ? ? 15404637.08????//總響應(yīng)時間;

Threads fairness:

? ? events (avg/stddev):? ? ? ? ? 187.7344/6.21

? ? execution time (avg/stddev):? 120.3487/0.22

我們一般關(guān)注的指標主要有:

response time avg:平均響應(yīng)時間(后面的95%的大小可以通過–percentile=98的方式去更改)漆魔。

transactions:精確的說是這一項后面的TPS坷檩,但如果使用了–skip-trx=on却音,這項事務(wù)數(shù)為0,需要用total number of events去除以總時間矢炼,得到tps(其實還可以分為讀tps和寫tps)系瓢。

queries:用它除以總時間,得到吞吐量QPS句灌。

當然還有一些系統(tǒng)層面的cpu夷陋,io,mem相關(guān)指標胰锌。

清除數(shù)據(jù):

# sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=192.168.10.94 --mysql-port=3307 --mysql-user=root --mysql-password='000000' --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 cleanup

四骗绕、Sysbench壓測磁盤IO

在Sysbench后跟上對應(yīng)的內(nèi)置可測試項名稱,然后跟上help即可獲得幫助信息资昧。

對于MySQL服務(wù)器來說爹谭,一般用戶可能關(guān)心的就是磁盤性能和OLTP性能,上面測試了OLTP榛搔,下面就來測試一下磁盤性能(FILEIO)诺凡,對于磁盤的測試,sysbench提供了以下測試選項:

# sysbench fileio help

sysbench 1.0.9 (using system LuaJIT 2.0.4)

fileio options:

? --file-num=N? ? ? ? ? ? ? number of files to create [128] ? ?//生產(chǎn)測試文件的數(shù)量践惑,默認為128腹泌。

? --file-block-size=N? ? ? block size to use in all IO operations [16384] ? ?//測試期間的塊大小,如果想知道磁盤針對InnoDB存儲引擎進行的測試尔觉,可以將其設(shè)置為16384凉袱,即InnoDB存儲引擎頁大小,默認為16384侦铜。

? --file-total-size=SIZE? ? total size of files to create [2G] ? ?//每個文件的帶下专甩,默認為2G。

? --file-test-mode=STRING? test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw} ? ?//文件測試模式钉稍,包含seqwr(順序?qū)懀┑佣恪eqrewr(順序讀寫)、seqrd(順序讀)贡未、rndrd(隨機讀)种樱、rndwr(隨機寫)和rndrw(隨機讀寫)。

? --file-io-mode=STRING? ? file operations mode {sync,async,mmap} [sync] ? ?//文件操作的模式俊卤,同步還是異步嫩挤,或者是選擇MMAP(map映射)模式,默認為同步消恍。

? --file-async-backlog=N? ? number of asynchronous operatons to queue per thread [128] ? ?//打開文件時的選項岂昭,這是與API相關(guān)的參數(shù)。

? --file-extra-flags=STRING additional flags to use on opening files {sync,dsync,direct} [] ? ?//打開文件時的選項狠怨,這是與API相關(guān)的參數(shù)约啊。

? --file-fsync-freq=N? ? ? do fsync() after this number of requests (0 - don't use fsync()) [100] ? ?//執(zhí)行fsync函數(shù)的頻率邑遏,fsync主要是同步磁盤文件,因為可能有系統(tǒng)和磁盤緩沖的關(guān)系棍苹。

? --file-fsync-all[=on|off] do fsync() after each write operation [off] ? ?//每執(zhí)行完一次寫操作,就執(zhí)行一次fsync茵汰,默認未off枢里。

? --file-fsync-end[=on|off] do fsync() at the end of test [on] ? ?//在測試結(jié)束時,執(zhí)行fsync蹂午,默認為on栏豺。

? --file-fsync-mode=STRING? which method to use for synchronization {fsync, fdatasync} [fsync] ? ?//文件同步函數(shù)的選擇,同樣是和API相關(guān)的參數(shù)豆胸,由于多個操作對fdatasync支持的不同奥洼,因此不建議使用fdatasync。默認為fsync晚胡。

? --file-merged-requests=N? merge at most this number of IO requests if possible (0 - don't merge) [0] ? ?//盡可能合并此數(shù)量的io請求(0-不合并)灵奖,默認為[0]。

? --file-rw-ratio=N? ? ? ? reads/writes ratio for combined test [1.5] ? ?//測試時的讀寫比例估盘,默認是2:1瓷患。

Sysbench的fileio測試需要經(jīng)過prepare、run和cleanup三個階段遣妥。prepare是準備階段擅编,生產(chǎn)需要的測試文件,run是實際測試階段箫踩,cleanup是清理測試產(chǎn)生的文件爱态。例如進行16個文件、總大小2GB的fileio測試:

# sysbench fileio --file-num=16 --file-total-size=2G prepare

接著就可以基于這些文件進行測試了境钟,下面是16個線程下的隨機讀取性能:

# sysbench fileio --time=180 --events=100000000 --threads=16 --file-num=16 --file-total-size=2G --file-test-mode=rndrd --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run

上述測試的最大隨機數(shù)請求是100000000次锦担,如果在180秒內(nèi)不能完成,測試即結(jié)束慨削。測試結(jié)束后可以看到如下的測試結(jié)果:

sysbench 1.0.9 (using system LuaJIT 2.0.4)

Running the test with following options:

Number of threads: 16

Initializing random number generator from current time

Extra file open flags: 3

16 files, 128MiB each

2GiB total file size

Block size 16KiB

Number of IO requests: 100000000

Read/Write ratio for combined random IO test: 1.50

Calling fsync() at the end of test, Enabled.

Using synchronous I/O mode

Doing random read test

Initializing worker threads...

Threads started!

File operations:

? ? reads/s:? ? ? ? ? ? ? ? ? ? ? 4713.10????//磁盤IOPS;

? ? writes/s:? ? ? ? ? ? ? ? ? ? 0.00

? ? fsyncs/s:? ? ? ? ? ? ? ? ? ? 0.00

Throughput:

? ? read, MiB/s:? ? ? ? ? ? ? ? ? 73.64 ? ?//磁盤每秒速率;

? ? written, MiB/s:? ? ? ? ? ? ? 0.00

General statistics:

? ? total time:? ? ? ? ? ? ? ? ? ? ? ? ? 180.0506s

? ? total number of events:? ? ? ? ? ? ? 848617

Latency (ms):

? ? ? ? min:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0.09

? ? ? ? avg:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.65

? ? ? ? max:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1923.59

? ? ? ? 95th percentile:? ? ? ? ? ? ? ? ? ? ? 0.24

? ? ? ? sum:? ? ? ? ? ? ? ? ? ? ? ? ? ? 2247207.75

Threads fairness:

? ? events (avg/stddev):? ? ? ? ? 53038.5625/342.16

? ? execution time (avg/stddev):? 140.4505/3.14

測試結(jié)束后吆豹,記得要執(zhí)行cleanup,確保測試產(chǎn)生的文件都已經(jīng)刪除理盆。

# sysbench fileio --file-num=16 --file-total-size=2G cleanup

參照隨機讀配置痘煤,可以接著測試隨機寫、隨機讀寫猿规、順序?qū)懼钥臁㈨樞蜃x等所有這些模式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姨俩,一起剝皮案震驚了整個濱河市蘸拔,隨后出現(xiàn)的幾起案子师郑,更是在濱河造成了極大的恐慌,老刑警劉巖调窍,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宝冕,死亡現(xiàn)場離奇詭異,居然都是意外死亡邓萨,警方通過查閱死者的電腦和手機地梨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缔恳,“玉大人宝剖,你說我怎么就攤上這事∏干酰” “怎么了万细?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纸泄。 經(jīng)常有香客問我赖钞,道長,這世上最難降的妖魔是什么聘裁? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任仁烹,我火速辦了婚禮,結(jié)果婚禮上咧虎,老公的妹妹穿的比我還像新娘卓缰。我一直安慰自己,他們只是感情好砰诵,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布征唬。 她就那樣靜靜地躺著,像睡著了一般茁彭。 火紅的嫁衣襯著肌膚如雪总寒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天理肺,我揣著相機與錄音摄闸,去河邊找鬼。 笑死妹萨,一個胖子當著我的面吹牛年枕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乎完,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼熏兄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摩桶,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤桥状,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硝清,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辅斟,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年芦拿,在試婚紗的時候發(fā)現(xiàn)自己被綠了士飒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡防嗡,死狀恐怖变汪,靈堂內(nèi)的尸體忽然破棺而出侠坎,到底是詐尸還是另有隱情蚁趁,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布实胸,位于F島的核電站他嫡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏庐完。R本人自食惡果不足惜钢属,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望门躯。 院中可真熱鬧淆党,春花似錦、人聲如沸讶凉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懂讯。三九已至荷憋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褐望,已是汗流浹背勒庄。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘫里,地道東北人实蔽。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像谨读,于是被迫代替她去往敵國和親盐须。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容