[資料庫]000 - Sysbench 資料庫壓力測試工具 - IT人

文章推薦指數: 80 %
投票人數:10人

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



請為這篇文章評分?