數(shù)據(jù)庫壓測工具sysbench

轉(zhuǎn)載https://apppukyptrl1086.pc.xiaoe-tech.com/detail/i_5e383c5357307_MjhluwMb/1?from=p_5e0c2a35dbbc9_MNDGDYba&type=6&parent_pro_id=

2、一款非常好用的數(shù)據(jù)庫壓測工具
上一篇文章給大家講解了我們在壓測的過程中要關(guān)注哪些東西,這一篇文章就來帶著大家一步一步的利用一個(gè)工具進(jìn)行數(shù)據(jù)庫
壓測。
先給大家介紹一個(gè)非常好用的數(shù)據(jù)庫壓測工具,就是sysbench,這個(gè)工具可以自動(dòng)幫你在數(shù)據(jù)庫里構(gòu)造出來大量的數(shù)據(jù),你
想要多少數(shù)據(jù),他就自動(dòng)給你構(gòu)造出來多少條數(shù)據(jù)。
然后這個(gè)工具接著可以模擬幾千個(gè)線程并發(fā)的訪問你的數(shù)據(jù)庫,模擬使用各種各樣的SQL語句來訪問你的數(shù)據(jù)庫,包括模擬出
來各種事務(wù)提交到你的數(shù)據(jù)庫里去,甚至可以模擬出幾十萬的TPS去壓測你的數(shù)據(jù)庫。
所以一般來說,如果你要進(jìn)行數(shù)據(jù)庫的壓測,就是直接使用sysbench工具就可以了,這一篇文章我來帶著大家學(xué)習(xí)一下這個(gè)
壓測工具的使用,大家學(xué)習(xí)完這一講,完全可以自己本地裝一個(gè)MySQL數(shù)據(jù)庫,然后自己壓測一下試一試。
3、在linux上安裝sysbench工具
首先你需要有一臺(tái)linux機(jī)器,如果你只有一個(gè)windows筆記本電腦,可以在里面裝一個(gè)linux的虛擬機(jī),然后你可以用如下的
命令設(shè)置一下yum repo倉庫,接著基于yum來安裝sysbench就可以了,安裝完成以后驗(yàn)證一下是否成功。
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
sysbench --version
如果上面可以看到sysbench的版本號(hào),就說明安裝成功了。

4、數(shù)據(jù)庫壓測的測試用例
接著我們需要在自己的數(shù)據(jù)庫里創(chuàng)建好一個(gè)測試庫,我們可以取個(gè)名字叫做test_db,同時(shí)創(chuàng)建好對應(yīng)的測試賬號(hào),可以叫做
test user,密碼也是test user,讓這個(gè)用戶有權(quán)限可以訪問test db。
然后我們將要基于sysbench構(gòu)建20個(gè)測試表,每個(gè)表里有100萬條數(shù)據(jù),接著使用10個(gè)并發(fā)線程去對這個(gè)數(shù)據(jù)庫發(fā)起訪問,
連續(xù)訪問5分鐘,也就是300秒,然后對其進(jìn)行壓力測試。
5、基于sysbench構(gòu)造測試表和測試數(shù)據(jù)
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
上面我們構(gòu)造了一個(gè)sysbench命令,給他加入了很多的參數(shù),現(xiàn)在我們來解釋一下這些參數(shù),相信很多參數(shù)大家自己看到也
就大致明白什么意思了:
1.--db-driver=mysql:這個(gè)很簡單,就是說他基于mysql的驅(qū)動(dòng)去連接mysql數(shù)據(jù)庫,你要是oracle,或者sqlserver,那
自然就是其他的數(shù)據(jù)庫的驅(qū)動(dòng)了
2.--time=300:這個(gè)就是說連續(xù)訪問300秒
3.--threads=10:這個(gè)就是說用10個(gè)線程模擬并發(fā)訪問
4.--report-interval=1:這個(gè)就是說每隔1秒輸出一下壓測情況
5.--mysql-host=127.0.0.1--mysql-port=3306--mysql-user=test user--mysql-password=test user: 這一大串, 就
是說連接到哪臺(tái)機(jī)器的哪個(gè)端口上的MySQL庫,他的用戶名和密碼是什么
6.-mysql-db=test db--tables=20--table size=1000000:這一串的意思,就是說在test db這個(gè)庫里,構(gòu)造20個(gè)測試
表,每個(gè)測試表里構(gòu)造100萬條測試數(shù)據(jù),測試表的名字會(huì)是類似于sbtest1,sbtest2這個(gè)樣子的
7.oltp_read_write:這個(gè)就是說,執(zhí)行oltp數(shù)據(jù)庫的讀寫測試
8.---db-ps-mode=disable:這個(gè)就是禁止ps模式
最后有一個(gè)prepare,意思是參照這個(gè)命令的設(shè)置去構(gòu)造出來我們需要的數(shù)據(jù)庫里的數(shù)據(jù),他會(huì)自動(dòng)創(chuàng)建20個(gè)測試表,每個(gè)表
里認(rèn)建100萬條測試數(shù)據(jù),所以這個(gè)工具是非常的方便的。
6、對數(shù)據(jù)庫進(jìn)行360度的全方位測試
測試數(shù)據(jù)庫的綜合讀寫TPS,使用的是oltp_read _write模式(大家看命令中最后不是prepare,是run了,就是運(yùn)行壓測):
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table size=1000000 oltp read_write --db-ps-mode=disable run
測試數(shù)據(jù)庫的只讀性能,使用的是oltp_read_only模式(大家看命令中的oltp_read_write已經(jīng)變?yōu)閛ltp_read_only了):
sysbench -db-driver=mysql --time=300 -threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_read_only --db-ps-mode=disable run
測試數(shù)據(jù)庫的刪除性能,使用的是oltp_delete模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_delete --db-ps-mode=disable run
測試數(shù)據(jù)庫的更新索引字段的性能,使用的是oltp_update _index模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_update_index --db-ps-mode=disable run
測試數(shù)據(jù)庫的更新非索引字段的性能,使用的是oltp_update_non_index模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_update_non index --db-ps-mode=disable run
測試數(shù)據(jù)庫的插入性能,使用的是oltp_insert模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table size=1000000 oltp insert --db-ps-mode=disable run
測試數(shù)據(jù)庫的寫入性能,使用的是oltp_write_only模式:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_write_only --db-ps-mode=disable run
使用上面的命令,sysbench工具會(huì)根據(jù)你的指令構(gòu)造出各種各樣的SQL語句去更新或者查詢你的20張測試表里的數(shù)據(jù),同時(shí)
監(jiān)測出你的數(shù)據(jù)庫的壓測性能指標(biāo),最后完成壓測之后,可以執(zhí)行下面的cleanup命令,清理數(shù)據(jù)。

sysbench -db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-
port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --
table_size=1000000 oltp_read_write --db-ps-mode=disable cleanup
7、壓測結(jié)果分析
按照我們上面的命令,我們是讓他每隔1秒都會(huì)輸出一次壓測報(bào)告的,此時(shí)他每隔一秒會(huì)輸出類似下面的一段東西:
[ 22s ] thds: 10 tps: 380.99 qps: 7312.66 (r/w/o: 5132.99/1155.86/1321.35) lat (ms, 95%): 21.33 err/s: 0.00 reconn/s:
0.00
我來給大家解釋一下這是什么意思,首先他說的這是第22s輸出的一段壓測統(tǒng)計(jì)報(bào)告,然后是其他的一些統(tǒng)計(jì)字段:
1.thds:10,這個(gè)意思就是有10個(gè)線程在壓測
2.tps:380.99,這個(gè)意思就是每秒執(zhí)行了380.99個(gè)事務(wù)
3.qps:7610.20,這個(gè)意思就是每秒可以執(zhí)行7610.20個(gè)請求
4.(r/w/o:5132.99/1155.86/1321.35),這個(gè)意思就是說,在每秒7610.20個(gè)請求中,有5132.99個(gè)請求是讀請求,1155.86個(gè)請
求是寫請求,1321.35個(gè)請求是其他的請求,就是對QPS進(jìn)行了拆解
5.lat(ms,95%):21.33,這個(gè)意思就是說,95%的請求的延遲都在21.33毫秒以下
6.err/s:0.00 reconn/s:0.00,這兩個(gè)的意思就是說,每秒有0個(gè)請求是失敗的,發(fā)生了0次網(wǎng)絡(luò)重連
這個(gè)壓測結(jié)果會(huì)根據(jù)每個(gè)人的機(jī)器的性能不同有很大的差距,你要是機(jī)器性能特別高,那你可以開很多的并發(fā)線程去壓測,比
如100個(gè)線程,此時(shí)可能會(huì)發(fā)現(xiàn)數(shù)據(jù)庫每秒的TPS有上千個(gè),如果你的機(jī)器性能很低,可能壓測出來你的TPS才二三十個(gè),QPS
才幾百個(gè),這都是有可能的。

另外在完成壓測之后,最后會(huì)顯示一個(gè)總的壓測報(bào)告,我把解釋寫在下面了:
SQL statistics:
queries performed:
read:1480084/∥這就是說在300s的壓測期間執(zhí)行了148萬多次的讀請求
write:298457/∥這是說在壓測期間執(zhí)行了29萬多次的寫請求
other:325436∥這是說在壓測期間執(zhí)行了30萬多次的其他請求
N
tota:2103977/∥這是說一共執(zhí)行了210萬多次的請求
/∥這是說一共執(zhí)行了10萬多個(gè)事務(wù),每秒執(zhí)行350多個(gè)事務(wù)
transactions: 105180( 350.6 per sec.)
/∥這是說一共執(zhí)行了210萬多次的請求,每秒執(zhí)行7000+請求
queries: 2103977 ( 7013.26 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
/∥下面就是說,一共執(zhí)行了300s的壓測,執(zhí)行了10萬+的事務(wù)
General staticstics:
total time: 300.0052s
total number of events: 105180
Latency (ms):
min:4.32/∥請求中延遲最小的是4.32ms
avg:13.42∥所有請求平均延遲是13.42ms
max:45.56//延遲最大的請求是45.56ms
95th percentile:21.33/∥ 95%的請求延遲都在21.33ms以內(nèi)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容