資料庫壓力測試方法小結

2021-10-17 02:51:11 字數 2935 閱讀 3231

在前面的壓力測試過程中,主要關注的是對介面以及伺服器硬體效能進行壓力測試,評估請求介面和硬體效能對服務的影響。但是對於多數web應用來說,整個系統的瓶頸在於資料庫。

原因很簡單:web應用中的其他因素,例如網路頻寬、負載均衡節點、應用伺服器(包括cpu、記憶體、硬碟、連線數等)、快取,都很容易通過水平的擴充套件(俗稱加機器)來實現效能的提高。而對於mysql,由於資料一致性的要求,無法通過增加機器來分散向資料庫寫資料帶來的壓力;雖然可以通過前置快取(redis等)、讀寫分離、分庫分表來減輕壓力,但是與系統其它元件的水平擴充套件相比,受到了太多的限制。

與介面壓測指標類似,資料庫相關指標如下:

1、基本介紹

sysbench是跨平台的基準測試工具,支援多執行緒,支援多種資料庫;主要包括以下幾種測試:

cpu效能

磁碟io效能

排程程式效能

記憶體分配及傳輸速度

posix執行緒效能

資料庫效能(oltp基準測試)

該工具可以自動幫你在資料庫裡構造出來大量的資料,你想要多少資料,就自動給你構造出來多少條資料。同時還可以模擬幾千個執行緒併發的訪問資料庫,模擬使用各種各樣的 sql 語句,包括模擬出來各種事務提交到你的資料庫裡去,甚至可以模擬出幾十萬的 tps 去壓測資料庫。

2、安裝sysbench:

curl -s | sudo bash

sudo yum -y install sysbench

sysbench --version

3、基於 sysbench 構造測試表和測試資料:

首先需要在自己的資料庫裡建立好乙個測試庫,我們可以取個名字叫做 test,同時建立好對應的測試賬號,可以叫做 root,密碼是 123456,讓這個使用者有許可權可以訪問 test。

基於 sysbench 構建 20 個測試表,每個表裡有 100 萬條資料,接著使用 100 個併發執行緒去對這個資料庫發起訪問,連續訪問 5 分鐘,也就是 300 秒。命令如下:

sysbench --db-driver=mysql --time=300 --threads=100 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare

4、執行測試:

(1)測試資料庫的綜合讀寫 tps,使用的是 oltp_read_write 模式:

sysbench --db-driver=mysql --time=300 --threads=100 --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

(2)測試資料庫的唯讀效能,使用的是 oltp_read_only模式:

sysbench --db-driver=mysql --time=300 --threads=100 --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

(3)測試資料庫的寫入效能,使用的是 oltp_write_only 模式:

sysbench --db-driver=mysql --time=300 --threads=100 --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 工具會根據你的指令構造出各種各樣的 sql 語句去更新或者查詢你的 20 張測試表裡的資料,同時監測出你的資料庫的壓測效能指標,最後完成壓測之後,可以執行 cleanup 命令,清理資料。

按照我們上面的命令,我們是讓它每隔 1 秒都會輸出一次壓測報告的,此時它每隔一秒會輸出類似下面的一段東西:

[ 10s ] thds: 100 tps: 500 qps: 5000 (r/w/o: 3500/1000/500) lat (ms, 95%): 20 err/s: 0.00 reconn/s: 0.00

thds:100,這個意思就是有 100 個執行緒在壓測

tps:500,這個意思就是每秒執行了 500 個事務

qps:5000,這個意思就是每秒可以執行 5000 個請求

(r/w/o: 3500/1000/500):這個意思就是說,在每秒 5000 個請求中,有 3500 個請求是讀請求,1000 個請求是寫請求,500 個請求是其他的請求,就是對 qps 進行了拆解

lat (ms, 95%):20,這個意思就是說,95% 的請求的延遲都在 20 毫秒以下

err/s: 0.00 reconn/s: 0.00:這兩個的意思就是說,每秒有 0 個請求是失敗的,發生了 0 次網路重連

使用sysbench工具可以直接對資料庫效能進行評價,但是在結果展示方面還有待進一步提公升。當然後續可以對結果進行進一步處理,比如寫入**或作圖,會更加直觀。

資料庫壓力測試方法總結

一 前言 在前面的壓力測試過程中,主要關注的是對介面以及伺服器硬體效能進行壓力測試,評估請求介面和硬體效能對服務的影響。但是對於多數web應用來說,整個系統的瓶頸在於資料庫。原因很簡單 web應用中的其他因素,例如網路頻寬 負載均衡節點 應用伺服器 包括cpu 記憶體 硬碟 連線數等 快取,都很容易...

Jmeter資料庫壓力測試

先配置jdbc 資料庫連線 驅動 1 啟動jmeter,開啟介面工具,新增乙個執行緒組,新增驅動 2 新增乙個jdbc connection configuration,連線池配置檔案。右鍵執行緒組 新增 配置元件 jdbc connection configuration variable nam...

資料庫壓力

update造成壓力大的很重要的因素,因為它 在where條件 後面加函式後無視索引,select from tablename where function table 欄位 這條語句會查詢整個表,即便是這個表有索引。所以如果涉及到select,update的情況,資料量少點還好,如果資料量大的話...