【巨杉數據庫SequoiaDB】巨杉Tech | 分佈式數據庫Sysbench測試最佳實踐

引言mysql

做爲一名DBA,時常須要對某些數據庫進行一些基準測試,進而掌握數據庫的性能狀況。本文就針對sysbench展開介紹,幫助你們瞭解sysbench的通常使用方法。git

sysbench簡介github

  • 什麼是基準線測試

所謂基準測試,就是經過對數據庫的性能指標進行定量的、可重複的和可對比的測試。基準線測試能夠理解爲一種針對系統的壓力測試。但該測試並不關心業務邏輯,所以測試相對簡單和直接。經過測試可分析在當前配置下(包括硬件配置,OS,及數據庫參數設置等)應用的性能表現,實現不一樣應用之間的比較。sql

具體而言,可使用以下指標來進行比對:數據庫

  • TPS/QPS:衡量數據庫的吞吐量;
  • 響應時間:包括平均響應時間,最小響應時間以及不一樣百分位數的響應時間(如p90,p95);
  • 併發量: 同時處理請求的數量。
  • sysbench介紹

sysbench是開源的,基於LuaJIT框架,可自定義腳本的多線程基準線測試工具。服務器

sysbench下載連接:https://github.com/akopytov/s...多線程

該工具可進行以下方面的測試:併發

  • 數據庫性能測試(OLTP基準線測試)
  • CPU運算性能測試
  • 磁盤IO性能測試
  • 內存分配及傳輸速度測試
  • POSIX線程性能測試
  • sysbench 安裝

1.  操做系統系統安裝依賴包框架

yum -y install make automake libtool pkgconfig libaio-devel

Note:

如需測試數據庫性能,還須要另外安裝數據庫相關軟件,本文以mysql爲例工具

2. 從 https://github.com/akopytov/s...

上下載sysbench安裝包

3.  解壓zip包

zip master.zip

4. 進入被解壓的文件夾,執行以下命令:

​​​​​​​

./autogen.sh

Note:

  • --prefix 參數定義 sysbench編譯後安裝的路徑
  • --with-mysql-libs和--with-mysql-includes 定義的是mysql相關文件的路徑

編譯並安裝sysbench:

make && make install

  • sysbench命令介紹

sysbench的命令格式以下:

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

  • testname: 能夠指定一個lua的腳本進行測試,或是指定關鍵字(fileio, cpu,memory)來使用sysbench內置的方法測試相關項目
  • command: 定義了測試須要執行的行爲。下表描述了command包含的通常命令:

命令樣例:

​​​​​​​

./sysbench  --mysql-host=127.0.0.1 --mysql-db=sbtest --table-size=500000

其中:

options: --mysql-host , --mysql-db, --table-size, --mysql-user, --mysql-password

testname:/data/sysbench1.1/share/sysbench/oltp_read_only.lua 腳本

command: prepare

sysbench 測試

如上所述,sysbench能針對數據庫,cpu,磁盤I/O, 內存性能等方面進行基準測試。現就這幾方面分別講解。

  • 數據庫性能測試

當sysbench用於測試數據庫性能時,能夠經過使用sysbench內置相關lua腳原本快速測試數據庫(另外因爲sysbench支持自定義腳本,也能夠自定義數據庫測試腳本,自定義功能本文中不做展開)。

 

 這些內置腳本存放在 $SYSBENCH_HOME/share/sysbench目錄下,該目錄下包含以下文件:

經過以下命令查看這些腳本的輸入參數說明:

./sysbench  $SYSBENCH_HOME/share/sysbench /share/sysbench /oltp_xxxx.lua  help 

Note:

  • $SYSBENCH_HOME爲sysbench的安裝目錄.    
  • oltp_xxx.lua 爲lua相關腳本

數據庫測試主要分爲三步:

Step1:鏈接Mysql數據庫,建立相關用戶並賦予相應權限

mysql> create  database sbtest;

Step2: 使用lua腳本,初始化數據庫(prepare)

​​​​​​​

./sysbench --mysql-host=127.0.0.1  --mysql-port=3306 --mysql-db=sbtest

上述命令中--mysql_storage_engine和--create_table_options 指定了建表時使用巨杉數據庫引擎建立了hash分區表。若是隻是想建立普通表,去除這兩個選項便可。

在此階段sysbench按照指令建立了10張表(--tables參數指定建立表的個數),這些表均有相同的表結構,其結構以下:

​​​​​​​

| Field | Type      | Null | Key | Default | Extra          |

同時每張表插入了80萬條數據(--table_size參數指定了每張表的數據量)。

​​​​​​​

mysql> select count(1) from sbtest1;

並在每張表的id列建立主鍵索引。k列建立b-tree索引:

​​​​​​​

+---------+------------+----------+--------------+-------------+

Step3: 使用lua腳本執行測試(run)

​​​​​​​

./sysbench --mysql-host=192.168.56.101,192.168.56.102  --time=600

本次測試,鏈接了兩個mysql數據庫實例(--mysql-host參數指定了兩個地址),開啓了10個線程(--threads參數指定),並運行300秒(--time參數指定),每5秒打印一次報告(--report-interval)。

在真實測試環境中建議測試時間不要小於30分鐘。數據表建議不低於10個,單表數據量不低於500萬行,若是配備了SSD設備的話,則建議單表數據量不低於1億行。

結果解析:

SQL statistics:

queries performed:

這些測試報告中,須要特別注意幾項:

  • transactions中的TPS,本報告中TPS爲153.99
  • queries中的QPS,本報告中的QPS爲2771.84
  • 95th percentile,本報告中爲125.52

如還需測試別的場景,只需修改testname和options相關參數便可。

Note: 

  • QPS: (Queries-per-second)每秒查詢率,是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準 
  • TPS: (Transaction-Per-Second) 每秒事務處理量,是一個表達系統處理能力的性能指標,每秒處理的消息數
  • CPU測試

sysbench的CPU測試,主要是經過生成特定數量的質數所須要的時間來判斷CPU的性能。

這裏能夠經過兩步來完成CPU的測試。

Step1:確認CPU的線程數

cat /proc/cpuinfo|grep processor|wc -l

Step2: 執行CPU的測試命令

./sysbench cpu --cpu-max-prime=20000 --threads=2

--cpu-max-prime :指定質數的個數,默認爲10000

--threads:指定開啓的線程數,這和第一步的cpu查詢得到的cpu線程數保持一致

結果解析:

CPU speed:

events per second:   425.11

結果中的execution time爲所須要關注的數據,本例中結果爲 9.9947。

  • 磁盤I/O測試

以下命令能夠查看I/O測試選項:

/sysbench fileion help

在衆多參數中經常使用到的一些參數爲:

--file-num: 建立的文件數,默認爲128個,若是想測試io的最大性能,該參數需設置爲1

--file-total-size: 每一個文件的大小,默認是2GB

--file-io-mode: 文件測試模式,包含seqwr(順序寫)、seqrewr(順序讀寫)、seqrd(順序讀)、rndrd(隨機讀)、rndwr(隨機寫)、rndrw(隨機讀寫)

sysbench測試磁盤I/O測試主要分爲三步:

Step1:準備數據

./sysbench  fileio --file-num=1 --file-total-size=2G --file-test-mode=rndrw prepare

此時在當前目錄下sysbench會產生一些用於測試的文件。

Step2:測試速度

./sysbench  fileio --file-num=1 --file-total-size=2G --file-test-mode=rndrw run

Step3:  刪除文件

./sysbench  fileio --file-num=1 --file-total-size=2G --file-test-mode=rndrw cleanup

結果分析:Throughput:

read:  IOPS=2025.48 31.65 MiB/s (33.19 MB/s)

這裏須要關注的是讀寫的IOPS,以及fsync。IOPS值越高說明,磁盤讀寫越快。

Note:

  • IOPS(Input/OutputOperations Per Second)是一個用於定義存儲設備性能的指標,能夠視爲是每秒的讀寫次數。 
  • fsync把全部已修改的內容已經正確同步到硬盤上,該調用會阻塞等待直到設備報告IO完成
  • 內存測試

當testname指定爲memory時,用戶可使用sysbench來測試內存訪問的性能。

首先來看一下測試內存有哪些選項。

./sysbench memory help

 

經常使用選項爲:

--memory-block-size: 測試時使用的內存塊大小,默認爲1K。實際測試建議使用1M

--memory-total-size: 測試時使用的的數據總大小

--memory-oper: 內存操做類型。{read, write, none} 默認是write

--memory-access-mode: 指定內存訪問方式,seq: 爲順序訪問,rnd:爲隨機訪問

內存測試相對簡單,用戶只需肯定好參數直接執行便可。

./sysbench memory --memory-block-size=1M --memory-total-size=100G --threads=1 --memory-access-mode=rnd run

結果分析:​​​​​​​

Throughput:

測試結果能夠關注Throughput裏的幾項:eps, time elapsed 和 total number of events

本文對內存的寫進行了測試,若是比較關注讀性能(數據庫中主從分離後,從庫對讀性能要求較高),能夠修改參數memory-oper爲read,進行測試。

總結

整體來講sysbench是一款功能比較豐富的基準線測試工具。平常工做中較常使用的是數據庫oltp能力的測試功能。本文就sysbench的一些經常使用方法作了介紹,並重點對其內置的測試方法進行了用法演示,但願能對你們有所幫助。

相關文章
相關標籤/搜索