通過sysbench工具實現MySQL資料庫的性能測試

来源:https://www.cnblogs.com/xuliuzai/archive/2019/07/25/11243376.html
-Advertisement-
Play Games

1.背景 sysbench是一款壓力測試工具,可以測試系統的硬體性能,也可以用來對資料庫進行基準測試。sysbench 支持的測試有CPU運算性能測試、記憶體分配及傳輸速度測試、磁碟IO性能測試、POSIX線程性能測試、互斥性測試測試、資料庫性能測試(OLTP基準測試)。目前支持的資料庫主要是MySQ ...


1.背景

 sysbench是一款壓力測試工具,可以測試系統的硬體性能,也可以用來對資料庫進行基準測試。sysbench 支持的測試有CPU運算性能測試、記憶體分配及傳輸速度測試、磁碟IO性能測試、POSIX線程性能測試、互斥性測試測試、資料庫性能測試(OLTP基準測試)。目前支持的資料庫主要是MySQL資料庫和PG資料庫。

在新伺服器上線時,建議對伺服器的性能做一次測試,最好與既往的同類型的伺服器的性能測試報表做一個橫線比較,發現潛在問題。及新機器上線前,對伺服器做一次體檢。

對資料庫而言,我們可以通過sysbench工具實現對資料庫的基準測試。在現在的系統架構中,前端都比較容易彈性水平拓展,資料庫相對較難,因此,基準測試對資料庫具有很重要的作用。而對資料庫的基準測試的作用,就是分析在當前的配置下(包括硬體配置、OS、資料庫設置等),資料庫的性能表現,從而找出MySQL的性能閾值,並根據實際系統的要求調整配置。

2.sysbench的安裝

1)安裝命令

yum -y install sysbench

2)查看安裝的版本

sysbench --version

3)查看已安裝軟體的信息(主要是通 rpm 命令)。

 查詢sysbench的安裝信息,主要是測試mysql時,需要使用sysbench自帶的lua腳本進行測試。如果使用快速安裝的方式,預設的腳本路徑為:/usr/share/sysbench。

 如果不在這個命令,我們我們執行以下命令查看,查找已安裝在本機Linux系統上面的所有的sysbench軟體的程式:

rpm -qa sysbench

列出該軟體所有的文件與目錄所在完整文件名(list):

rpm -ql sysbench 

3.sysbench 語法

sysbench --help
Usage:
  sysbench [options]... [testname] [command]

Commands implemented by most tests: prepare run cleanup help

General options:
  --threads=N                     number of threads to use [1]
  --events=N                      limit for total number of events [0]
  --time=N                        limit for total execution time in seconds [10]
  --forced-shutdown=STRING        number of seconds to wait after the --time limit before forcing shutdown, or 'off' to disable [off]
  --thread-stack-size=SIZE        size of stack per thread [64K]
  --rate=N                        average transactions rate. 0 for unlimited rate [0]
  --report-interval=N             periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]
  --report-checkpoints=[LIST,...] dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []
  --debug[=on|off]                print more debugging info [off]
  --validate[=on|off]             perform validation checks where possible [off]
  --help[=on|off]                 print help and exit [off]
  --version[=on|off]              print version and exit [off]
  --config-file=FILENAME          File containing command line options
  --tx-rate=N                     deprecated alias for --rate [0]
  --max-requests=N                deprecated alias for --events [0]
  --max-time=N                    deprecated alias for --time [0]
  --num-threads=N                 deprecated alias for --threads [1]

Pseudo-Random Numbers Generator options:
  --rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]
  --rand-spec-iter=N number of iterations used for numbers generation [12]
  --rand-spec-pct=N  percentage of values to be treated as 'special' (for special distribution) [1]
  --rand-spec-res=N  percentage of 'special' values to use (for special distribution) [75]
  --rand-seed=N      seed for random number generator. When 0, the current time is used as a RNG seed. [0]
  --rand-pareto-h=N  parameter h for pareto distribution [0.2]

Log options:
  --verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]

  --percentile=N       percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95]
  --histogram[=on|off] print latency histogram in report [off]

General database options:

  --db-driver=STRING  specifies database driver to use ('help' to get list of available drivers) [mysql]
  --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]
  --db-debug[=on|off] print database-specific debug information [off]


Compiled-in database drivers:
  mysql - MySQL driver
  pgsql - PostgreSQL driver

mysql options:
  --mysql-host=[LIST,...]          MySQL server host [localhost]
  --mysql-port=[LIST,...]          MySQL server port [3306]
  --mysql-socket=[LIST,...]        MySQL socket
  --mysql-user=STRING              MySQL user [sbtest]
  --mysql-password=STRING          MySQL password []
  --mysql-db=STRING                MySQL database name [sbtest]
  --mysql-ssl[=on|off]             use SSL connections, if available in the client library [off]
  --mysql-ssl-cipher=STRING        use specific cipher for SSL connections []
  --mysql-compression[=on|off]     use compression, if available in the client library [off]
  --mysql-debug[=on|off]           trace all client library calls [off]
  --mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205]
  --mysql-dry-run[=on|off]         Dry run, pretend that all MySQL client API calls are successful without executing them [off]

pgsql options:
  --pgsql-host=STRING     PostgreSQL server host [localhost]
  --pgsql-port=N          PostgreSQL server port [5432]
  --pgsql-user=STRING     PostgreSQL user [sbtest]
  --pgsql-password=STRING PostgreSQL password []
  --pgsql-db=STRING       PostgreSQL database name [sbtest]

Compiled-in tests:
  fileio - File I/O test
  cpu - CPU performance test
  memory - Memory functions speed test
  threads - Threads subsystem performance test
  mutex - Mutex performance test

 

基本語法如下:

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

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

testname  指定了要進行的測試,在老版本的sysbench中,可以通過--test參數指定測試的腳本;而在新版本中,--test參數已經聲明為廢棄,可以不使用--test,而是直接指定腳本。測試時使用的腳本為lua腳本,可以使用sysbench自帶腳本,也可以自己開發。

options 關於MySQL的主要包括MySQL 連接信息參數 和 MySQL 執行相關的參數。

4 測試 

Step 1 準備壓測數據

sysbench /usr/share/sysbench/oltp_insert.lua  --mysql-host=XXX.XXX.XXX.XXX  --mysql-port=3306 --mysql-user=testsbuser  --mysql-password='textpwd' --mysql-db=tssysbench --db-driver=mysql  --tables=15  --table-size=500000  --report-interval=10 --threads=128   --time=120 prepare

step 2  壓測

sysbench /usr/share/sysbench/oltp_insert.lua  --mysql-host=XXX.XXX.XXX.XXX  --mysql-port=3306 --mysql-user=testsbuser  --mysql-password='textpwd' --mysql-db=tssysbench --db-driver=mysql  --tables=15  --table-size=500000  --report-interval=10 --threads=128   --time=120 run

也可以將測試結果導出到文件中,便於後續分析。

 sysbench /usr/share/sysbench/oltp_insert.lua  --mysql-host=XXX.XXX.XXX.XXX  --mysql-port=3306 --mysql-user=testsbuser  --mysql-password='testpwd' --mysql-db=tssysbench --db-driver=mysql  --tables=15  --table-size=500000  --report-interval=10 --threads=128   --time=120 run >> ./mysysbench.log

step 3 清理壓測數據

sysbench /usr/share/sysbench/oltp_insert.lua  --mysql-host=XXX.XXX.XXX.XXX  --mysql-port=3306 --mysql-user=testsbuser  --mysql-password='testpwd' --mysql-db=tssysbench --db-driver=mysql  --tables=15  --table-size=500000  --report-interval=10 --threads=128   --time=120 cleanup

補充

OLTP基準測試模擬了一個簡單的事務處理系統的工作負載。若要對資料庫性能進行測試就要使用OLTP相關的腳本。

在/usr/share/sysbench/目錄下有相關的lua腳本:

壓測結果中包含了很多的信息,其中重點需要我們關註的信息是:
A:總的事務數 (total number of events);
B:每秒事務數;
C:時間統計信息(最小,平均,最大響應時間,以及95%百分比響應時間);
D:線程公平性統計信息,表示負載的公平性(thread-fairness)。

5.註意事項

(1) 測試資料庫需要提前創建,及時測試賬號擁有創建資料庫的許可權。

     --mysql-db 參數指定了測試的數據,預設是sbtest。

    不提前創建,報錯信息如下;

FATAL: `sysbench.cmdline.call_command' function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed
(last message repeated 3 times)
FATAL: error 1049: Unknown database 'sysbench_db'
FATAL: `sysbench.cmdline.call_command' function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed
FATAL: unable to connect to MySQL server on host 'XXX.XXX.XXX.XXX', port 3306, aborting...
(last message repeated 1 times)
FATAL: error 1049: Unknown database 'sysbench_db'
(last message repeated 1 times)

或是(不指定資料庫)

FATAL: `sysbench.cmdline.call_command' function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed
FATAL: error 1049: Unknown database 'sbtest'
FATAL: unable to connect to MySQL server on host 'XXX.XXX.XXX.XXX', port 3306, aborting...

(2)不要在MySQL伺服器運行的機器上進行測試,一方面可能無法體現網路(哪怕是區域網)的影響,另一方面,sysbench的運行(尤其是設置的併發數較高時)會影響MySQL伺服器的表現.

(3)逐步增加客戶端的併發連接數(--thread參數),觀察在連接數不同情況下,MySQL伺服器的表現。

(4)如果連續進行多次測試,註意確保之前測試的數據已經被清理乾凈。

(5)如果生成的報告,圖形化分析,可以通過gnuplot工具進行分析。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在.net core已經跨平臺了,大家也都用上了linux用上了docker。跟.net經常配套使用的SQL SERVER以前一直是windows only,但是從SQL Server 2017開始已經支持運行在docker上,也就說現在SQL Serer已經可以運行在linux下了。 下麵在Ub ...
  • 創建和操縱表 創建表 輸入 分析 表名緊跟在CREATE TABLE 關鍵字後面 ,實際的表定義括在圓括弧中。各列之間用逗號分隔。這個表由9列組成。每列的定義以列名開始,後跟列的數據類型。表的主鍵可以在創建表時用PRIMARY KEY關鍵字指定,這裡,列cust_id指定作為主鍵列。整條語句由右圓括 ...
  • 第一篇隨筆,暫水平有限,僅作學習記錄。如果能幫助到你那就更好了! 登陸Mysql服務mysql -u root -p ... 一、基礎命令 (命令以' ; '號結束)資料庫列表show databases; 切換/使用某個庫use 庫名; 查看數據表列表 (需切換至某個庫使用,否則會報錯ERROR ...
  • 資料庫概述 本菜鳥使用的資料庫軟體為Mariadb,以下內容都是以Mariadb資料庫軟體來寫的學習總結。 資料庫 所謂的資料庫就是用於存儲、管理數據的倉庫,資料庫根據底層存儲數據結構的不同可以分為很多類,但現在流行的是關係型資料庫和非關係型資料庫。 關係型資料庫 關係型資料庫底層是以二維表的形式保 ...
  • MySQL常用工具、日誌及讀寫分離 1.MySQL中常用工具 1.1 mysql 1.1.1連接選項 1.1.2 執行選項 1.2 mysqladmin 1.3 mysqlbinlog 1.4 mysqldump 1.4.1 連接選項 1.4.2 輸出內容選項 1.5 mysqlimport/sou ...
  • "個人博客:mysql數據恢復,binlog詳解" binlog日誌恢複數據,是輓救錯誤操作和數據損壞一根救命稻草,所以認識和使用binglog對於技術人員還是很有必要的 binlog一般用於 主從複製 中 master節點開啟binlog把二進位日誌傳遞給slave節點達到主從數據一致 第二點自然 ...
  • 1.eDelivery中下載Oracle Database 19C和Oel的安裝介質,並安裝好操作系統2.安裝Oracle環境準備工具[root@localhost ~]# yum -y install oracle-database-preinstall-19cLoaded plugins: la... ...
  • 錯誤 TRIGGER **** 編譯錯誤 錯誤:PLS-00103: 出現符號 "END"在需要下列之一時: ( begin case declare exit for goto if loop mod null pragma raise return select update while wit ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...