[資料庫]000 - Sysbench 資料庫壓力測試工具 - IT人
文章推薦指數: 80 %
000 - Sysbench 資料庫壓力測試工具sysbench 是一個開源的、模組化的、跨平臺的多執行緒效能測試工具,可以用來進行CPU、記憶體、磁碟I/O、執行緒、 ...
Togglenavigation
IT人
IT人
[資料庫]000-🍳Sysbench資料庫壓力測試工具
AnonyStar發表於
2020-12-30
資料庫
000-🍳Sysbench資料庫壓力測試工具
sysbench是一個開源的、模組化的、跨平臺的多執行緒效能測試工具,可以用來進行CPU、記憶體、磁碟I/O、執行緒、資料庫的效能測試。
目前支援的資料庫有MySQL、Oracle和PostgreSQL。
以下操作都將以支援MySQL資料庫為例進行。
1.Linux上安裝sysbench工具
安裝方式有兩種,一種是通過yum/apt等來安裝,另一種自己下載原始碼包來安裝,筆者這裡採用的是centos,採用yum安裝
sysbench的原始碼包下載地址:http://sourceforge.net/projects/sysbench,採用原始碼安裝的可轉這裡
通過yum安裝如下:
設定yumrepo倉庫
curl-shttps://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh|sudobash
安裝
sudoyum-yinstallsysbench
安裝完檢查是否成功
sysbench--version
2.資料庫測試用例準備
我們這裡測試的是MySQL,首先我們在資料庫建立一個專門用來測試的庫test_db
通過sysbench建立20個測試表,每個表中建立100萬資料,再通過10個執行緒對測試庫發起訪問,持續5分鐘,對其進行壓測
3.sysbench構建表與資料
執行下面命令準備資料
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_read_write--db-ps-mode=disableprepare
上面命令的引數說明:
--db-driver=mysql:表示資料庫的驅動型別,我們使用的是MySQL所以填mysql,如果使用Oracle則填寫相應的oracle
--time=300:這個參數列示持續訪問的時間300秒
--threads=10:表示使用10個執行緒模擬併發訪問
--report-interval=1:表示每隔一秒輸出以此壓測情況
--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root:這一塊的配置,就是基本的資料庫連結資訊,指定資料庫IP,埠,賬號密碼
--mysql-db=test_db--tables=20--table_size=1000000:這三個引數設定,表示指定測試的庫為test_db,同時在這個庫中構建20個表,並且每個表中構建出100萬條測試資料,表的名字會類似sbtest1,sbtest2這種格式
oltp_read_write:表示執行oltp資料庫的讀寫測試
--db-ps-mode=disable:禁止ps模式
prepare:表示按照命令設定去構建出我們的資料,也就是對前面所有命令的執行方案
4.全方位測試
1.綜合讀寫測試
測試資料庫的綜合讀寫TPS,使用oltp_read_write模式
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_read_write--db-ps-mode=disablerun
注意:命令最後不再是之前的prepare,這裡是run,表示執行壓測,前面的是準備資料
效果
上面是直接輸出到控制檯,我們也可以將其全部記錄在檔案中,通過管道,|tee/tmp/mysysbench.log整個命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_read_write--db-ps-mode=disablerun|tee/tmp/mysysbench.log
2.只讀效能測試
測試資料庫的只讀效能,使用oltp_read_only模式,命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_read_only--db-ps-mode=disablerun
結果:
如果要輸出到檔案如上
3.刪除效能測試
測試資料庫的刪除效能,使用模式:oltp_delete,命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_delete--db-ps-mode=disablerun
4.更新索引欄位測試
測試資料庫的更新索引欄位的效能,使用模式:oltp_update_index,命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_update_index--db-ps-mode=disablerun
5.更新非索引欄位測試
測試資料庫中更新非索引欄位的效能,使用模式:oltp_update_non_index,命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_update_non_index--db-ps-mode=disablerun
6.插入效能測試
測試資料庫的資料插入效能,使用模式:oltp_insert,命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_insert--db-ps-mode=disablerun
7.寫入效能測試
測試資料庫的寫入效能,使用模式:oltp_write_only,命令如下:
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_write_only--db-ps-mode=disablerun
8.清理資料
前面命令進行了各種測試,在測試完之後我們可以通過下面的cleanup命令來清除構建的測試資料
sysbench--db-driver=mysql--time=300--threads=10--report-interval=1--mysql-host=192.168.56.10--mysql-port=3306--mysql-user=root--mysql-password=root--mysql-db=test_db--tables=20--table_size=1000000oltp_read_write--db-ps-mode=disablecleanup
9.壓測結果分析
通過上面的命令我們可以全方位的得到測試的結果,我們直接每個一秒輸出一次結果,在控制檯會輸出類似下面的東西:
[31s]thds:10tps:350.35qps:5575.50(r/w/o:4874.81/0.00/700.69)lat(ms,95%):36.89err/s:0.00reconn/s:0.00
我們來解釋一下其中的含義,首先[31s]表示這是在第31秒的時候輸出的一段壓測統計結果,其他欄位如下:
thds:10:表示當前有10個執行緒正在壓測
tps:350.35:表示當前每秒執行了350.35個事務
qps:5575.50:表示當前每秒可以執行5575.50個請求
(r/w/o:4874.81/0.00/700.69):表示在每秒5575.50個請求中,有4874.81個讀請求,0.00個寫請求,700.69個其他請求,其實就是對qps的細化
lat(ms,95%):36.89:表示95%的請求的延遲都在36.89毫秒以下
err/s:0.00reconn/s:0.00:表示有0個請求失敗,發生了0次的網路重連
在壓測結束後會輸出一個總的壓測結果,如下:
其中的引數的解釋:
10.常用監控命令
在壓測過程中我們要時刻關注伺服器的CPU、磁碟I/O、網路負載等資訊,一旦發現任何一個超出一定負荷,則不適合再繼續加大執行緒數來壓測了
一定要注意,壓測的過程是要保證機器各項指標在正常範圍內的最大負載,而不是我們不斷的增大sysbench的執行緒數,不關係其他指標,這樣即使機器每秒抗住了很高的qps,但是這時候的機器已經是滿負荷執行了,記憶體,cpu,網路頻寬等都幾乎被打滿,這種情況機器隨時可能掛掉,這時候的測壓就沒有什麼代表性了,因為你不可能在生產者讓它達到這樣的負荷
觀察CPU的的負荷
在Linux下最常見的命令就是top命令,可以輸出詳細的情況,如下:
對於上面的輸出,我們詳細來分析一下,首先看第一行的輸出
top-16:24:21up13:41,4users,loadaverage:0.11,3.10,3.72
16:24:21:表示當前的時間
up13:41:表示已經執行了多長時間
4users:當前機器有幾個使用者在使用
loadaverage:0.11,3.10,3.72:這是核心。
表示CPU在一分鐘、五分鐘、十五分鐘內的平均負載情況,簡單解釋一下,假設我們是一個四核的CPU,此時如果我們的CPU負載是0.15,那麼表示這四個核心中連一個核心都沒使用滿,表明整體比較空閒;如果整個負載是1,則表示四個核中有一個已經使用的比較繁忙了,但是其他三個還是比較空閒的;如果負載是4,則說明當前四個核心都處於跑滿的狀態,如果負載大於四,假設6,那說明四核的CPU被超負荷使用也無法處理完當前的任務,有很多執行緒與要等待CPU資源
後面有記憶體的使用情況,
KiBMem:498684total,6216free,366620used,125848buff/cache
498684total:總的記憶體,差不多490M
6216free:當前可用記憶體,6M
366620used:已使用記憶體
125848buff/cache:用於IO緩衝的記憶體
磁碟IO檢測
在檢測CPU和記憶體使用的同時,我們還需要檢測磁碟的使用狀況,包括IO吞吐量,IOPS等資訊
主要通過dstat命令來檢視,如果系統沒有裝可以通過yuminstalldstat進行安裝
執行dstat-d命令,可以看到如下:
上面顯示的記憶體可以看到儲存的IO吞吐量的詳細資料,每秒讀19M資料,每秒寫6521K的資料,這個吞吐量並不是很高,一般普通的機械硬碟可以到達上百MB的讀寫量
使用命令dstat-r來檢視IOPS的情況,如下:
如上面結果可以看到,讀寫分別的IOPS的值,也就是說隨即磁碟讀取/寫入每秒多少次,通常來說磁碟的讀寫每秒在兩三百次是可接受的
網路卡流量檢測
同樣我們可以通過dstat-n來檢視網路卡的具體流量情況,如下:
可以看到上面所示,網路卡每秒接收和傳送的資料量。
通常來說如果我們電腦是千兆網路卡,那麼每秒鐘網路卡的總流量也就在100M左右,甚至更低
本文由AnonyStar釋出,可轉載但需宣告原文出處。
歡迎關注微信公賬號:雲棲簡碼獲取更多優質文章
更多文章關注筆者部落格:雲棲簡碼i-code.online
相關文章
面試資料-作業系統
2020-12-30
面試
commons-lang包常用工具類的基本使用
2020-12-30
win10最強注入工具,遠端執行緒注入、訊息鉤子注入、輸入法注入、EIP注入、登錄檔注入、APC注入(APC好像不能用)
2020-12-30
Win10
淘榜單&淘寶直播:2020淘寶直播雙11商家直播資料包告(附下載)
2020-12-30
Django中ORM找出內容不為空的資料
2020-12-30
Django
磁力數觀:2020年快手手機行業資料價值報告(附下載)
2020-12-30
Django5—資料庫
2020-12-30
資料庫Django
基於STM32的OLED的SPI介面資料顯示
2020-12-30
資料型別——集合與while迴圈
2020-12-30
jmeter_彙總報告_資料解讀
2020-12-30
SpringBoot的多資料來源配置
2020-12-30
Spring
今日資料行業日報(2020.12.30)『2020年1-11月汽車製造業累計實現利潤4781.1億元,同比增長7.2%』
2020-12-30
日本PSE認證需要什麼資料
2020-12-30
Asp.netMVC4模型的資料註釋
2020-12-30
.Net
大資料框架原理簡介
2020-12-30
框架
小型前端腳手架工具Plop
2020-12-30
前端
液晶的COM和SEG。
COM是公共行掃描行。
SEG是列。
位元組的讀寫操作通過並口D0-D8(12232,32COM分4頁)或者序列口時鐘和資料(A25/wr脈衝輸入,不是寫控制,DATA序列資料入出口)
2020-12-30
vue+elementUI中el-table資料匯出Excel表格
2020-12-30
VueExcel
NodeMySQL打造關係型資料庫
2020-12-30
資料庫MySQLNode.js
最新文章
TypeScript之IndexedAccessTypes
分享一個無需定義結構體解析json的包
[原始碼解析]PyTorch分散式Autograd(3)----上下文相關
SQL92標準四種隔離級別
專案管理常用工具有哪些個呢?
[Skill]圖形化元件在註冊UserTrigger時需要注意的事情
phpNginx修改上傳視訊或者大圖片的配置
JavaSE複習鞏固
Gin如何動態生成模型swagger文件
Redis|第7章Redis伺服器《Redis設計與實現》
JavaScriptWebGL基礎概念
如何在Docker容器中使用Arthas
延伸文章資訊
- 1MySQL壓力測試工具mysqlslap @ 網頁程式- coke750101
MySQL從5.1.4版開始帶有一個壓力測試工具mysqlslap,通過模擬多個併發用戶端 ... 可以看到最後由刪除一開始創建的schema的動作,整個測試完成後不會在資料庫中留下痕跡 ...
- 2[資料庫]000 - Sysbench 資料庫壓力測試工具 - IT人
000 - Sysbench 資料庫壓力測試工具sysbench 是一個開源的、模組化的、跨平臺的多執行緒效能測試工具,可以用來進行CPU、記憶體、磁碟I/O、執行緒、 ...
- 3資料庫壓力測試方法小結
在前面的壓力測試過程中,主要關注的是對介面以及伺服器硬體效能進行壓力測試,評估請求介面和硬體效能對服務的影響。但是對於多數Web應用來說,整個系統 ...
- 4一個快要被忘記的資料庫開發崗位,但值得被尊重 - Medium
資料庫測試,似乎是被人遺忘的資料庫職業,但依然是不錯的選擇。 ... 如果要測試併發壓力,就不能用單元測試;要測試新功能,就不能執行迴歸測試。
- 5關於資料庫壓力測試的故事 - - CodingNote.cc
此前也做過很多次壓力測試,對於資料庫方面來說,主要是搜集伺服器當時的CPU,記憶體使用,以及關注AWR報告SQL執行部分是否有異常,便於正式上線後, ...