作為一名後台開發,對資料庫進行基準測試,以掌握資料庫的效能情況是非常必要的。本文介紹了mysql基準測試的基本概念,以及使用sysbench對mysql進行基準測試的詳細方法。
資料庫的基準測試是對資料庫的效能指標進行定量的、可復現的、可對比的測試。
基準測試與壓力測試
基準測試可以理解為針對系統的一種壓力測試。但基準測試不關心業務邏輯,更加簡單、直接、易於測試,資料可以由工具生成,不要求真實;而壓力測試一般考慮業務邏輯(如購物車業務),要求真實的資料。
對於多數web應用,整個系統的瓶頸在於資料庫;原因很簡單:web應用中的其他因素,例如網路頻寬、負載均衡節點、應用伺服器(包括cpu、記憶體、硬碟燈、連線數等)、快取,都很容易通過水平的擴充套件(俗稱加機器)來實現效能的提高。而對於mysql,由於資料一致性的要求,無法通過增加機器來分散向資料庫寫資料帶來的壓力;雖然可以通過前置快取(redis等)、讀寫分離、分庫分表來減輕壓力,但是與系統其它元件的水平擴充套件相比,受到了太多的限制。
而對資料庫的基準測試的作用,就是分析在當前的配置下(包括硬體配置、os、資料庫設定等),資料庫的效能表現,從而找出mysql的效能閾值,並根據實際系統的要求調整配置。
常見的資料庫指標包括:
對mysql的基準測試,有如下兩種思路:
(2)只針對mysql的基準測試:優點和缺點與針對整個系統的測試恰好相反。
在針對mysql進行基準測試時,一般使用專門的工具進行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更強大,且更適合innodb(因為模擬了許多innodb的io特性),下面介紹使用sysbench進行基準測試的方法。
sysbench是跨平台的基準測試工具,支援多執行緒,支援多種資料庫;主要包括以下幾種測試:
本文主要介紹對資料庫效能的測試。
本文使用的環境時centos 6.5;在其他linux系統上的安裝方法大同小異。mysql版本是5.6。
wget -o "sysbench-1.0.zip"
unzip sysbench-1.0.zip
cd sysbench-1.0
(2)安裝依賴
yum install automake libtool –y
(3)安裝
安裝之前,確保位於之前解壓的sysbench目錄中。
./autogen.sh
./configure
export ld_library_path=/usr/local/mysql/include #這裡換成機器中mysql路徑下的include
make
make install
(4)安裝成功
[root@test sysbench-1.0]# sysbench --version
sysbench 1.0.9
執行sysbench –help,可以看到sysbench的詳細使用方法。
sysbench的基本語法如下:
sysbench [options]... [testname] [command]
下面說明實際使用中,常用的引數和命令。
command是sysbench要執行的命令,包括prepare、run和cleanup,顧名思義,prepare是為測試提前準備資料,run是執行正式的測試,cleanup是在測試完成後對資料庫進行清理。
testname指定了要進行的測試,在老版本的sysbench中,可以通過--test引數指定測試的指令碼;而在新版本中,--test引數已經宣告為廢棄,可以不使用--test,而是直接指定指令碼。
例如,如下兩種方法效果是一樣的:
sysbench --test=./tests/include/oltp_legacy/oltp.lua
sysbench ./tests/include/oltp_legacy/oltp.lua
測試時使用的指令碼為lua指令碼,可以使用sysbench自帶指令碼,也可以自己開發。對於大多數應用,使用sysbench自帶的指令碼就足夠了。不同版本的sysbench中,lua指令碼的位置可能不同,可以自己在sysbench路徑下使用find命令搜尋oltp.lua。p.s.:大多數資料服務都是oltp型別的,如果你不了解什麼是oltp,那麼大概率你的資料服務就是oltp型別的。
sysbench的引數有很多,其中比較常用的包括:
mysql連線資訊引數
mysql執行引數
在執行sysbench時,應該注意:
(1)盡量不要在mysql伺服器執行的機器上進行測試,一方面可能無法體現網路(哪怕是區域網)的影響,另一方面,sysbench的執行(尤其是設定的併發數較高時)會影響mysql伺服器的表現。
(2)可以逐步增加客戶端的併發連線數(--thread引數),觀察在連線數不同情況下,mysql伺服器的表現;如分別設定為10,20,50,100等。
(3)一般執行模式選擇complex即可,如果需要特別測試伺服器唯讀效能,或不使用事務時的效能,可以選擇******模式或nontrx模式。
(4)如果連續進行多次測試,注意確保之前測試的資料已經被清理乾淨。
下面是sysbench使用的乙個例子:
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 prepare
其中,執行模式為complex,使用了10個表,每個表有10萬條資料,客戶端的併發執行緒數為10,執行時間為120秒,每10秒生成一次報告。
將測試結果匯出到檔案中,便於後續分析。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> /home/test/mysysbench.log
執行完測試後,清理資料,否則後面的測試會受到影響。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 cleanup
測試結束後,檢視輸出檔案,如下所示:
其中,對於我們比較重要的資訊包括:
queries:查詢總數及qps
transactions:事務總數及tps
latency-95th percentile:前95%的請求的最大響應時間,本例中是344毫秒,這個延遲非常大,是因為我用的mysql伺服器效能很差;在正式環境中這個數值是絕對不能接受的。
下面是使用sysbench的一些建議。
1、在開始測試之前,應該首先明確:應採用針對整個系統的基準測試,還是針對mysql的基準測試,還是二者都需要。
2、如果需要針對mysql的基準測試,那麼還需要明確精度方面的要求:是否需要使用生產環境的真實資料,還是使用工具生成也可以;前者實施起來更加繁瑣。如果要使用真實資料,盡量使用全部資料,而不是部分資料。
3、基準測試要進行多次才有意義。
4、測試時需要注意主從同步的狀態。
5、測試必須模擬多執行緒的情況,單執行緒情況不但無法模擬真實的效率,也無法模擬阻塞甚至死鎖情況。
mysql基準測試例項 mysql基準測試
toc 單位時間內所處理的事務數 tps 單位時間內所處理的查詢數 qps 響應時間 平均響應時間,最小響應時間,最大響應時間,各時間所佔百分比 併發量 同時處理的查詢請求的數量 併發量不等於連線數 正在工作的併發的操作或同時工作的數量 工具 mysqlslap mysql自帶的 特點 可以模擬伺服...
mysql 基準測試指令碼 MySQL基準測試
常見指標 tps transaction per second qps query per second 響應時間 併發量步驟 計畫和設計基準測試 準備基準測試及資料收集指令碼 容易忽略的問題 使用生產環境資料時只使用了部分資料 在多使用者場景中,只做單使用者的測試 在單伺服器上測試分布式應用 反覆...
mysql 基準測試報告 Mysql基準測試
一 基準測試 基準測試的作用 了解當前系統的效能,建立mysql伺服器效能基準線 為之後的效能優化提供乙個超始線 模擬比當前系統更高的負載,找出系統的擴充套件瓶頸,為系統擴充套件與優化提供參考條件 測試不同的硬體 軟體和作業系統配置 證明新的硬體裝置是否配置正確和是否是最優配置 基準測試可以分為整合...