首頁  >  文章  >  資料庫  >  MySQL基準測試和sysbench工具的詳解

MySQL基準測試和sysbench工具的詳解

coldplay.xixi
coldplay.xixi轉載
2020-09-11 17:30:422588瀏覽

MySQL基準測試和sysbench工具的詳解

相關學習推薦:mysql教學

#   什麼是基準測試

#    資料庫的基準測試是對資料庫的效能指標進行定量的、可重複的、可比較的測試。基準測試與壓力測試 基準測試可以理解為針對系統的一種壓力測試。但基準測試不關心業務邏輯,更加簡單、直接、易於測試,數據可以由工俱生成,不要求真實;而壓力測試一般考慮業務邏輯(如購物車業務),要求真實的數據。

   基準測試的功能

    對於多數Web應用,整個系統的瓶頸在於資料庫;原因很簡單:Web應用中的其他因素,例如網路頻寬、負載平衡節點、應用伺服器(包括CPU、記憶體、硬碟燈、連線數等)、緩存,都很容易透過水平的擴展(俗稱加機器)來實現性能的提高。而對於MySQL,由於資料一致性的要求,無法透過增加機器來分散向資料庫寫入資料帶來的壓力;雖然可以透過前置快取(Redis等)、讀寫分離、分庫分錶來減輕壓力,但是與系統其它組件的水平擴展相比,受到了太多的限制。

    而對資料庫的基準測試的作用,就是分析在目前的配置下(包括硬體配置、OS、資料庫設定等),資料庫的效能表現,從而找出MySQL的效能閾值,並根據實際系統的要求調整配置。

   基準測試的指標

    常見的資料庫指標包括:

    TPS/QPS:衡量吞吐量。回應時間:包括平均回應時間、最小回應時間、最大回應時間、時間百分比等,其中時間百分比參考意義較大,如前95%的請求的最大回應時間。 。並發量:同時處理的查詢請求的數量。

   基準測試的分類

    對MySQL的基準測試,有以下兩種想法:

  •        整個系統的基準測試:透過http請求進行測試,如透過瀏覽器、APP或postman等測試工具。此方案的優點是能夠更好的針對整個系統,測試結果更加準確;缺點是設計複雜實現困難。
  •        只針對MySQL的基準測試:優點和缺點與整個系統的測試剛好相反。

    在針對MySQL進行基準測試時,一般會使用專門的工具進行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更強大,且更適合Innodb(因為模擬了許多Innodb的IO特性),以下介紹使用sysbench進行基準測試的方法。

   sysbench簡介

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

    1.cpu效能2.磁碟io效能3.調度程式效能4.記憶體分配及傳輸速度5.POSIX執行緒效能6.資料庫效能(OLTP基準測試)7.本文主要介紹資料庫效能的測試。

   sysbench安裝

#    本文所使用的環境時CentOS 6.5;在其他Linux系統上的安裝方法大同小異。 MySQL版本是5.6。

1.下载解压
wget https://github.com/akopytov/sysbench/archive/1.0.zip -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.安装成功
[[email protected] sysbench-1.0]# sysbench --version
sysbench 1.0.9

   sysbench文法

#    執行sysbench –help,可以看到sysbench的詳細使用方法。 sysbench的基本文法如下:

sysbench [options]... [testname] [command]

    以下說明實際使用中,常用的參數和指令。

   1.command command是sysbench要執行的命令,包括prepare、run和cleanup,顧名思義,prepare是為測試提前準備數據,run是執行正式的測試,cleanup是在測試完成後對資料庫進行清理。

   2.testname 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類型。

   3.options sysbench的參數很多,其中較常用的包括: MySQL連接資訊參數:

##    1.--mysql-host:MySQL伺服器主機名,預設localhost;如果在本機上使用localhost報錯,提示無法連接MySQL伺服器,改成本機的IP位址應該就可以了。 2.--mysql-port:MySQL伺服器端口,預設33063.--mysql-user:使用者名稱4.--mysql-password:密碼

   

MySQL執行參數:

    1.--oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。2.--oltp-tables-count:测试的表数量,根据实际情况选择3.--oltp-table-size:测试的表的大小,根据实际情况选择4.--threads:客户端的并发连接数5.--time:测试执行的时间,单位是秒,该值不要太短,可以选择1206.--report-interval:生成报告的时间间隔,单位是秒,如10

   sysbench使用举例

    在执行sysbench时,应该注意:

    1.尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。2.可以逐步增加客户端的并发连接数(--thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。3.一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。4.如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

   下面是sysbench使用的一个例子:

   1.准备数据

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秒生成一次报告。 

   2.执行测试 将测试结果导出到文件中,便于后续分析。

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

   3.清理数据 执行完测试后,清理数据,否则后面的测试会受到影响。

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.測試必須模擬多執行緒的情況,單執行緒情況不但無法模擬真實的效率,也無法模擬阻塞甚至死鎖情況。

想了解更多程式設計學習,請關注php培訓欄位!

#

以上是MySQL基準測試和sysbench工具的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:phpxs.com。如有侵權,請聯絡admin@php.cn刪除