有一些有用的工具可以測試MySQL 和基于MySQL 的系統(tǒng)的性能。這里將演示如何利用這些工具進(jìn)行測試。

固安ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
mysqlslap
mysqlslap可以模擬服務(wù)器的負(fù)載,并輸出計時信息。它包含在MySQL 5.1 的發(fā)行包中,應(yīng)該在MySQL 4.1或者更新的版本中都可以使用。測試時可以執(zhí)行并發(fā)連接數(shù),并指定SQL 語句(可以在命令行上執(zhí)行,也可以把SQL 語句寫入到參數(shù)文件中)。如果沒有指定SQL 語句,mysqlslap 會自動生成查詢schema 的SELECT 語句。
MySQL Benchmark Suite (sql-bench)
在MySQL 的發(fā)行包中也提供了一款自己的基準(zhǔn)測試套件,可以用于在不同數(shù)據(jù)庫服務(wù)器上進(jìn)行比較測試。它是單線程的,主要用于測試服務(wù)器執(zhí)行查詢的速度。結(jié)果會顯示哪種類型的操作在服務(wù)器上執(zhí)行得更快。
這個測試套件的主要好處是包含了大量預(yù)定義的測試,容易使用,所以可以很輕松地用于比較不同存儲引擎或者不同配置的性能測試。其也可以用于高層次測試,比較兩個服務(wù)器的總體性能。當(dāng)然也可以只執(zhí)行預(yù)定義測試的子集(例如只測試UPDATE 的性能)。這些測試大部分是CPU 密集型的,但也有些短時間的測試需要大量的磁盤I/O 操作。
這個套件的最大缺點主要有:它是單用戶模式的,測試的數(shù)據(jù)集很小且用戶無法使用指定的數(shù)據(jù),并且同一個測試多次運行的結(jié)果可能會相差很大。因為是單線程且串行執(zhí)行的,所以無法測試多CPU 的能力,只能用于比較單CPU 服務(wù)器的性能差別。使用這個套件測試數(shù)據(jù)庫服務(wù)器還需要Perl 和BDB 的支持,相關(guān)文檔請參考.
Super Smack
Super Smack是一款用于MySQL 和PostgreSQL的基準(zhǔn)測試工具,可以提供壓力測試和負(fù)載生成。這是一個復(fù)雜而強大的工具,可以模擬多用戶訪問,可以加載測試數(shù)據(jù)到數(shù)據(jù)庫,并支持使用隨機數(shù)據(jù)填充測試表。測試定義在"smack"文件中,smack 文件使用一種簡單的語法定義測試的客戶端、表、查詢等測試要素。
Database Test Suite
Database Test Suite 是由開源軟件開發(fā)實驗室(OSDL,Open Source DevelopmentLabs)設(shè)計的,發(fā)布在SourceForge 網(wǎng)站上,這是一款類似某些工業(yè)標(biāo)準(zhǔn)測試的測試工具集,例如由事務(wù)處理性能委員會(TPC,Transaction Processing Performance Council)制定的各種標(biāo)準(zhǔn)。特別值得一提的是,其中的dbt2 就是一款免費的TPC-C OLTP 測試工具(未認(rèn)證)。之前本書作者經(jīng)常使用該工具,不過現(xiàn)在已經(jīng)使用自己研發(fā)的專用于MySQL 的測試工具替代了。
Percona's TPCC-MySQL Tool
我們開發(fā)了一個類似TPC-C 的基準(zhǔn)測試工具集,其中有部分是專門為MySQL 測試開發(fā)的。在評估大壓力下MySQL 的一些行為時,我們經(jīng)常會利用這個工具進(jìn)行測試(簡單的測試,一般會采用sysbench 替代),在源碼庫中有一個簡單的文檔說明。
sysbench
sysbench是一款多線程系統(tǒng)壓測工具。它可以根據(jù)影響數(shù)據(jù)庫服務(wù)器性能的各種因素來評估系統(tǒng)的性能。例如,可以用來測試文件I/O、操作系統(tǒng)調(diào)度器、內(nèi)存分配和傳輸速度、POSIX 線程,以及數(shù)據(jù)庫服務(wù)器等。sysbench 支持Lua 腳本語言,Lua 對于各種測試場景的設(shè)置可以非常靈活。sysbench 是我們非常喜歡的一種全能測試工具,支持MySQL、操作系統(tǒng)和硬件的硬件測試。(節(jié)選自《高性能MySQL》)
1、mysqlslap
安裝:簡單,裝了mysql就有了
作用:模擬并發(fā)測試數(shù)據(jù)庫性能。
優(yōu)點:簡單,容易使用。
不足:不能指定生成的數(shù)據(jù)規(guī)模,測試過程不清楚針對十萬級還是百萬級數(shù)據(jù)做的測試,感覺不太適合做綜合測試,比較適合針對既有數(shù)據(jù)庫,對單個sql進(jìn)行優(yōu)化的測試。
使用方法:
可以使用mysqlslap --help來顯示使用方法:
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
--concurrency代表并發(fā)數(shù)量,多個可以用逗號隔開,concurrency=10,50,100, 并發(fā)連接線程數(shù)分別是10、50、100個并發(fā)。
--engines代表要測試的引擎,可以有多個,用分隔符隔開。
--iterations代表要運行這些測試多少次。
--auto-generate-sql 代表用系統(tǒng)自己生成的SQL腳本來測試。
--auto-generate-sql-load-type 代表要測試的是讀還是寫還是兩者混合的(read,write,update,mixed)
--number-of-queries 代表總共要運行多少次查詢。每個客戶運行的查詢數(shù)量可以用查詢總數(shù)/并發(fā)數(shù)來計算。
--debug-info 代表要額外輸出CPU以及內(nèi)存的相關(guān)信息。
--number-int-cols :創(chuàng)建測試表的 int 型字段數(shù)量
--auto-generate-sql-add-autoincrement : 代表對生成的表自動添加auto_increment列,從5.1.18版本開始
--number-char-cols 創(chuàng)建測試表的 char 型字段數(shù)量。
--create-schema 測試的schema,MySQL中schema也就是database。
--query 使用自定義腳本執(zhí)行測試,例如可以調(diào)用自定義的一個存儲過程或者sql語句來執(zhí)行測試。
--only-print 如果只想打印看看SQL語句是什么,可以用這個選項。
mysqlslap -umysql -p123 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10 --debug-info
或:
指定數(shù)據(jù)庫和sql語句:
mysqlslap -h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select * from test;' --number-of-queries=10 --debug-info -umysql -p123
要是看到底做了什么可以加上:--only-print
Benchmark
Average number of seconds to run all queries: 25.225 seconds
Minimum number of seconds to run all queries: 25.225 seconds
Maximum number of seconds to run all queries: 25.225 seconds
Number of clients running queries: 100
Average number of queries per client: 0
以上表明100個客戶端同時運行要25秒
2、sysbench
安裝:
可以從 下載
tar zxf sysbench-0.4.12.tar.gz
cd sysbench-0.4.12
./autogen.sh
./configure make make install
strip /usr/local/bin/sysbench
安裝時候可能會報錯,后來baidu發(fā)現(xiàn)個好文 怕以后找不到,也貼過來吧
1.如果mysql不是默認(rèn)路徑安裝,那么需要通過指定--with-mysql-includes和--with-mysql-libs參數(shù)來加載mysql安裝路徑
2.如果報錯:
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
那么執(zhí)行下根目錄的:autogen.sh文件,然后重新configure make make install
3.如果報錯:
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
那么執(zhí)行下:
n -s /usr/local/mysql5.5/mysql/lib/libmysqlclient.so.18 /usr/lib64/
4.如果執(zhí)行autogen.sh時,報如下錯誤:
./autogen.sh: line 3: aclocal: command not found
那么需要安裝一個軟件:
yum install automake
然后需要增加一個參數(shù):查找: AC_PROG_LIBTOOL 將其注釋,然后增加AC_PROG_RANLIB
作用:模擬并發(fā),可以執(zhí)行CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫等方面的性能測試。數(shù)據(jù)庫目前支持MySQL/Oracle/PostgreSQL
優(yōu)點:可以指定測試數(shù)據(jù)的規(guī)模,可以單獨測試讀、寫的性能,也可以測試讀寫混合的性能。
不足:測試的時候,由于網(wǎng)絡(luò)原因,測試的非常慢,但是最終給的結(jié)果卻很好,并發(fā)支持很高,所以給我的感覺是并不太準(zhǔn)確。當(dāng)然也可能我沒搞明白原理
使用方法:
準(zhǔn)備數(shù)據(jù)
sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=400000 --mysql-db=dbtest2 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd prepare
執(zhí)行測試
sysbench --num-threads=100 --max-requests=4000 --test=oltp --mysql-table-engine=innodb --oltp-table-size=400000 --mysql-db=dbtest1 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd run
sysbench 0.4.12: multi-threaded system evaluation benchmark
No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 100
Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Maximum number of requests for OLTP test is limited to 4000
Threads started!
Done.
OLTP test statistics:
queries performed:
read: 56014
write: 20005
other: 8002
total: 84021
transactions: 4001 (259.14 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 76019 (4923.75 per sec.)
other operations: 8002 (518.29 per sec.)
Test execution summary:
total time: 15.4393s
total number of events: 4001
total time taken by event execution: 1504.7744
per-request statistics:
min: 33.45ms
avg: 376.10ms
max: 861.53ms
approx. 95 percentile: 505.65ms
Threads fairness:
events (avg/stddev): 40.0100/0.67
execution time (avg/stddev): 15.0477/0.22
3、tpcc-mysql
安裝:
如果從原網(wǎng)站上下載源碼比較麻煩,需要工具、注冊、生成證書等。這里提供一個下載包
export C_INCLUDE_PATH=/usr/include/mysql
export PATH=/usr/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/mysql
cd /tmp/tpcc/src
make
然后就會在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start
作用:測試mysql數(shù)據(jù)庫的整體性能
優(yōu)點:符合tpcc標(biāo)準(zhǔn),有標(biāo)準(zhǔn)的方法,模擬真實的交易活動,結(jié)果比較可靠。
不足:不能單獨測試讀或者寫的性能,對于一些以查詢?yōu)橹骰蛘咧粚懙膽?yīng)用,就沒有這么大的意義了。
使用方法:
加載數(shù)據(jù)
創(chuàng)建庫
mysqlcreate database tpcc10;
創(chuàng)建表:
shellmysql tpcc10 create_table.sql
添加外鍵:
shellmysql tpcc10 add_fkey_idx.sql
加載數(shù)據(jù):
1、單進(jìn)程加載:
shell./tpcc_load 192.168.11.172 tpcc10 root pwd 300
|主機||數(shù)據(jù)庫||用戶||密碼||warehouse|
2、并發(fā)加載:(推薦,但需要修改一下)
shell./load.sh tpcc300 300
|數(shù)據(jù)庫||warehouse|
3、測試
./tpcc_start -h192.168.11.172 -d tpcc -u root -p 'pwd' -w 10 -c 10 -r 10 -l 60 -i 10 -f /mnt/hgfs/mysql/tpcc100_2013522.txt
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '192.168.11.172'
option d with value 'tpcc'
option u with value 'root'
option p with value 'pwd'
option w with value '1'
option c with value '100'
option r with value '120'
option l with value '60'
option i with value '10'
option f with value '/mnt/hgfs/mysql/tpcc100_2013522.txt'
Parameters
[server]: 192.168.11.172
[port]: 3306
[DBname]: tpcc
[user]: root
[pass]: pwd
[warehouse]: 1
[connection]: 100
[rampup]: 120 (sec.)
[measure]: 60 (sec.)
RAMP-UP TIME.(120 sec.)
MEASURING START.
測試何種指標(biāo)
在開始執(zhí)行甚至是在設(shè)計基準(zhǔn)測試之前 需要先明確測試的目標(biāo) 測試目標(biāo)決定了選擇什么樣的測試工具和技術(shù) 以獲得精確而有意義的測試結(jié)果 可以將測試目標(biāo)細(xì)化為一系列的問題 比如 這種CPU 是否比另外一種要快? 或 新索引是否比當(dāng)前索引性能更好?
有時候需要用不同的方法測試不同的指標(biāo) 比如 針對延遲(latency)和吞吐量(throughput)就需要采用不同的測試方法
請考慮以下指標(biāo) 看看如何滿足測試的需求
吞吐量
吞吐量指的是單位時間內(nèi)的事務(wù)處理數(shù) 這一直是經(jīng)典的數(shù)據(jù)庫應(yīng)用測試指標(biāo) 一些標(biāo)準(zhǔn)的基準(zhǔn)測試被廣泛地引用 如TPC C(參考// tpc ) 而且很多數(shù)據(jù)庫廠商都努力爭取在這些測試中取得好成績 這類基準(zhǔn)測試主要針對在線事務(wù)處理(OLTP)的吞吐量 非常適用于多用戶的交互式應(yīng)用 常用的測試單位是每秒事務(wù)數(shù)(TPS) 有些也采用每分鐘事務(wù)數(shù)(TPM)
響應(yīng)時間或者延遲
這個指標(biāo)用于測試任務(wù)所需的整體時間 根據(jù)具體的應(yīng)用 測試的時間單位可能是微秒 毫秒 秒或者分鐘 根據(jù)不同的時間單位可以計算出平均響應(yīng)時間 最小響應(yīng)時間 最大響應(yīng)時間和所占百分比 最大響應(yīng)時間通常意義不大 因為測試時間越長 最大響應(yīng)時間也可能越大 而且其結(jié)果通常不可重復(fù) 每次測試都可能得到不同的最大響應(yīng)時間 因此 通常可以使用百分比響應(yīng)時間(percentile responsetime)來替代最大響應(yīng)時間 例如 如果 % 的響應(yīng)時間都是 毫秒 則表示任務(wù)在 % 的時間段內(nèi)都可以在 毫秒之內(nèi)完成
使用圖表有助于理解測試結(jié)果 可以將測試結(jié)果繪制成折線圖(比如平均值折線或者 % 百分比折線)或者散點圖 直觀地表現(xiàn)數(shù)據(jù)結(jié)果集的分布情況 通過這些圖可以發(fā)現(xiàn)長時間測試的趨勢 本章后面將更詳細(xì)地討論這一點
并發(fā)性
并發(fā)性是一個非常重要又經(jīng)常被誤解和誤用的指標(biāo) 例如 它經(jīng)常被表示成多少用戶在同一時間瀏覽一個Web 站點 經(jīng)常使用的指標(biāo)是有多少個會話注 然而 HTTP協(xié)議是無狀態(tài)的 大多數(shù)用戶只是簡單地讀取瀏覽器上顯示的信息 這并不等同于Web 服務(wù)器的并發(fā)性 而且 Web 服務(wù)器的并發(fā)性也不等同于數(shù)據(jù)庫的并發(fā)性 而僅僅只表示會話存儲機制可以處理多少數(shù)據(jù)的能力 Web 服務(wù)器的并發(fā)性更準(zhǔn)確的度量指標(biāo) 應(yīng)該是在任意時間有多少同時發(fā)生的并發(fā)請求
在應(yīng)用的不同環(huán)節(jié)都可以測量相應(yīng)的并發(fā)性 Web 服務(wù)器的高并發(fā) 一般也會導(dǎo)致數(shù)據(jù)庫的高并發(fā) 但服務(wù)器采用的語言和工具集對此都會有影響 注意不要將創(chuàng)建數(shù)據(jù)庫連接和并發(fā)性搞混淆 一個設(shè)計良好的應(yīng)用 同時可以打開成百上千個MySQL 數(shù)據(jù)庫服務(wù)器連接 但可能同時只有少數(shù)連接在執(zhí)行查詢 所以說 一個Web 站點 同時有 個用戶 訪問 卻可能只有 ~ 個并發(fā)請求到MySQL 數(shù)據(jù)庫
換句話說 并發(fā)性基準(zhǔn)測試需要關(guān)注的是正在工作中的并發(fā)操作 或者是同時工作中的線程數(shù)或者連接數(shù) 當(dāng)并發(fā)性增加時 需要測量吞吐量是否下降 響應(yīng)時間是否變長 如果是這樣 應(yīng)用可能就無法處理峰值壓力
并發(fā)性的測量完全不同于響應(yīng)時間和吞吐量 它不像是一個結(jié)果 而更像是設(shè)置基準(zhǔn)測試的一種屬性 并發(fā)性測試通常不是為了測試應(yīng)用能達(dá)到的并發(fā)度 而是為了測試應(yīng)用在不同并發(fā)下的性能 當(dāng)然 數(shù)據(jù)庫的并發(fā)性還是需要測量的 可以通過sy *** ench 指定 或者 個線程的測試 然后在測試期間記錄MySQL 數(shù)據(jù)庫的Threads_running 狀態(tài)值 在第 章將討論這個指標(biāo)對容量規(guī)劃的影響
可擴(kuò)展性
在系統(tǒng)的業(yè)務(wù)壓力可能發(fā)生變化的情況下 測試可擴(kuò)展性就非常必要了 第 章將更進(jìn)一步討論可擴(kuò)展性的話題 簡單地說 可擴(kuò)展性指的是 給系統(tǒng)增加一倍的工作 在理想情況下就能獲得兩倍的結(jié)果(即吞吐量增加一倍) 或者說 給系統(tǒng)增加一倍的資源(比如兩倍的CPU 數(shù)) 就可以獲得兩倍的吞吐量 當(dāng)然 同時性能(響應(yīng)時間)也必須在可以接受的范圍內(nèi) 大多數(shù)系統(tǒng)是無法做到如此理想的線性擴(kuò)展的 隨著壓力的變化 吞吐量和性能都可能越來越差
可擴(kuò)展性指標(biāo)對于容量規(guī)范非常有用 它可以提供其他測試無法提供的信息 來幫助發(fā)現(xiàn)應(yīng)用的瓶頸 比如 如果系統(tǒng)是基于單個用戶的響應(yīng)時間測試(這是一個很糟糕的測試策略)設(shè)計的 雖然測試的結(jié)果很好 但當(dāng)并發(fā)度增加時 系統(tǒng)的性能有可能變得非常糟糕 而一個基于不斷增加用戶連接的情況下的響應(yīng)時間測試則可以發(fā)現(xiàn)這個問題
一些任務(wù) 比如從細(xì)粒度數(shù)據(jù)創(chuàng)建匯總表的批量工作 需要的是周期性的快速響應(yīng)時間 當(dāng)然也可以測試這些任務(wù)純粹的響應(yīng)時間 但要注意考慮這些任務(wù)之間的相互影響 批量工作可能導(dǎo)致相互之間有影響的查詢性能變差 反之亦然
歸根結(jié)底 應(yīng)該測試那些對用戶來說最重要的指標(biāo) 因此應(yīng)該盡可能地去收集一些需求 比如 什么樣的響應(yīng)時間是可以接受的 期待多少的并發(fā)性 等等 然后基于這些需求來設(shè)計基準(zhǔn)測試 避免目光短淺地只關(guān)注部分指標(biāo) 而忽略其他指標(biāo)
返回目錄 高性能MySQL
編輯推薦
ASP NET開發(fā)培訓(xùn)視頻教程
數(shù)據(jù)倉庫與數(shù)據(jù)挖掘培訓(xùn)視頻教程
lishixinzhi/Article/program/MySQL/201311/29741
容量: 看硬件
InnoDB?最大容量64TB ,存儲引擎將 InnoDB 表 保存在一個 表空間內(nèi)( 原始磁盤分區(qū),由數(shù)個文件創(chuàng)建)。這樣, 表大小 能超過 單獨文件最大容量 。
MySQL 3.22( MyISAM )限制表大小 4GB ,最大表尺寸增加到65536TB(2567 – 1字節(jié))。最大有效表尺寸通常是由 操作系統(tǒng) 對 文件大小限制 決定的, 不是 由MySQL內(nèi)部限制決定。
最多 20億個表 ,一個表允許定義1024列,每行的最大長度為8092字節(jié)(不包括文本和圖像類型的長度);
阿里《Java 開發(fā)手冊》提出 單表行 500w 容量2GB ,才分庫分表
與 MySQL 配置及硬件 有關(guān),實際記錄的條數(shù)無關(guān)。因為表 索引 裝載 到內(nèi)存,InnoDB buffer size 足夠 ,才能全加載進(jìn)內(nèi)存,查沒問題。達(dá)量級限時,導(dǎo)致 內(nèi)存無法存儲索引 ,產(chǎn)生磁盤 IO,性能下降。增加硬件配置解決。500w算折中
QPS在8400左右 :400個線程并發(fā),插入100萬條記錄(4核2.33G、3G內(nèi)存、SATA硬盤)
寫: 90-100M/S(機械硬盤,7200轉(zhuǎn))預(yù)計kB_wrtn/s在90M左右
show variables like 'max_connections' ?mysql當(dāng)前最大連接數(shù)
set global max_connections=1000; ?設(shè)置當(dāng)前最大連接數(shù)為1000;mysql重啟時失效,需要長期生效在my.ini 添加 max_connections=1000
從業(yè)務(wù)使用場景出發(fā),根據(jù)RDS套餐類型和線上實際訪問流量,來衡量性能指標(biāo),以便方便對標(biāo)實際業(yè)務(wù)場景。
MySQL 5.7.21 Group Replication
MySQL 5.7.21 Group Replication with Consistent Read
同機房3節(jié)點、跨機房3節(jié)點
網(wǎng)絡(luò)異常:長時間延時0.5ms,長時間延時2ms,丟包0.01%
場景1、2的差異可以衡量 跨機房網(wǎng)絡(luò) 帶來的 性能損耗
場景3關(guān)注在 網(wǎng)絡(luò)質(zhì)量變化 時帶來的 性能變化
同機房3節(jié)點為 05 06 03????跨機房3節(jié)點為 05 06 01
機器部署:同IDC3臺(永順ys 03 05 06),跨IDC1臺(廣州gz 01)
同IDC RTT(06-05):RTT min/avg/max/mdev =?0.051/0.059/0.070/0.010?ms
跨IDC RTT(01-05):RTT min/avg/max/mdev =?0.739/0.749/0.810/0.027
跨IDC的網(wǎng)絡(luò)耗時是同 IDC的1.3倍 ,在設(shè)置 延遲0.5ms后 的網(wǎng)絡(luò)質(zhì)量:
同IDC RTT(06-05):RTT min/avg/max/mdev =?0.507/0.564/0.617/0.037
跨IDC RTT(01-05):RTT min/avg/max/mdev =?1.199/1.248/1.315/0.046
跨IDC的網(wǎng)絡(luò)耗時是 同IDC的2.2倍 ,在設(shè)置 延遲2ms后 的網(wǎng)絡(luò)質(zhì)量:
同IDC RTT(06-05):RTT min/avg/max/mdev = 1.963/2.054/2.161/0.064 ms
跨IDC RTT(01-05):RTT?min/avg/max/mdev = 2.642/2.732/2.835/0.076 ms
參考:;aliyun
之前寫過了Go語言gorm框架MySQL實踐,其中對gorm框架在操作MySQL的各種基礎(chǔ)實踐,下面分享一下如何使用gorm框架對MySQL直接進(jìn)行性能測試的簡單實踐。
這里我使用了一個原始的Go語言版本的 FunTester 測試框架,現(xiàn)在只有一個基本的方法,實在是因為Go語言特性太強了。框架設(shè)計的主要思路之一就是利用Go語言的閉包和方法參數(shù)特性,將一個 func() 當(dāng)做性能測試的主題,通過不斷運行這個 func() 來實現(xiàn)性能測試。當(dāng)然還有另外一個思路就是運行一個多線程任務(wù)類,類似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象類,這樣可以設(shè)置一些類的屬性,綁定一些測試資源,適配更多的測試場景。
下面演示select的性能測試,這里我用了隨機ID查詢的場景。
這里我使用從35開始遞增的ID進(jìn)行刪除。
這里使用了select的用例部分,隨機ID,然后更新name字段,隨機10個長度的字符串。
這里用到了 FunTester 字段都是隨機生成。
到這里可以看出,性能測試框架用到的都是gorm框架的基礎(chǔ)API使用,這里MySQL連接池的管理工作完全交給了gorm框架完成,看資料說非常牛逼,我們只需要設(shè)置幾個參數(shù)。這個使用體現(xiàn)很像 HttpClient 設(shè)置 HTTP 連接池類似,這里我們也可以看出這些優(yōu)秀的框架使用起來都是非常簡單的。
PS:關(guān)于gorm的基礎(chǔ)使用的請參考上一期的文章Go語言gorm框架MySQL實踐。
使用語法如下:
# mysqlslap [options]
常用參數(shù) [options] 詳細(xì)說明:
--auto-generate-sql, -a 自動生成測試表和數(shù)據(jù),表示用mysqlslap工具自己生成的SQL腳本來測試并發(fā)壓力。
--auto-generate-sql-load-type=type 測試語句的類型。代表要測試的環(huán)境是讀操作還是寫操作還是兩者混合的。取值包括:read,key,write,update和mixed(默認(rèn))。
--auto-generate-sql-add-auto-increment 代表對生成的表自動添加auto_increment列,從5.1.18版本開始支持。
--number-char-cols=N, -x N 自動生成的測試表中包含多少個字符類型的列,默認(rèn)1
--number-int-cols=N, -y N 自動生成的測試表中包含多少個數(shù)字類型的列,默認(rèn)1
--number-of-queries=N 總的測試查詢次數(shù)(并發(fā)客戶數(shù)×每客戶查詢次數(shù))
--query=name,-q 使用自定義腳本執(zhí)行測試,例如可以調(diào)用自定義的一個存儲過程或者sql語句來執(zhí)行測試。
--create-schema 代表自定義的測試庫名稱,測試的schema,MySQL中schema也就是database。
--commint=N 多少條DML后提交一次。
--compress, -C 如果服務(wù)器和客戶端支持都壓縮,則壓縮信息傳遞。
--concurrency=N, -c N 表示并發(fā)量,也就是模擬多少個客戶端同時執(zhí)行select。可指定多個值,以逗號或者--delimiter參數(shù)指定的值做為分隔符。例如:--concurrency=100,200,500。
--engine=engine_name, -e engine_name 代表要測試的引擎,可以有多個,用分隔符隔開。例如:--engines=myisam,innodb。
--iterations=N, -i N 測試執(zhí)行的迭代次數(shù),代表要在不同并發(fā)環(huán)境下,各自運行測試多少次。
--only-print 只打印測試語句而不實際執(zhí)行。
--detach=N 執(zhí)行N條語句后斷開重連。
--debug-info, -T 打印內(nèi)存和CPU的相關(guān)信息。
說明:
測試的過程需要生成測試表,插入測試數(shù)據(jù),這個mysqlslap可以自動生成,默認(rèn)生成一個mysqlslap的schema,如果已經(jīng)存在則先刪除。可以用--only-print來打印實際的測試過程,整個測試完成后不會在數(shù)據(jù)庫中留下痕跡。
各種測試參數(shù)實例(-p后面跟的是mysql的root密碼):
單線程測試。測試做了什么。
# mysqlslap -a -uroot -p123456
多線程測試。使用–concurrency來模擬并發(fā)連接。
# mysqlslap -a -c 100 -uroot -p123456
迭代測試。用于需要多次執(zhí)行測試得到平均值。
# mysqlslap -a -i 10 -uroot -p123456
# mysqlslap ---auto-generate-sql-add-autoincrement -a -uroot -p123456
# mysqlslap -a --auto-generate-sql-load-type=read -uroot -p123456
# mysqlslap -a --auto-generate-secondary-indexes=3 -uroot -p123456
# mysqlslap -a --auto-generate-sql-write-number=1000 -uroot -p123456
# mysqlslap --create-schema world -q "select count(*) from City" -uroot -p123456
# mysqlslap -a -e innodb -uroot -p123456
# mysqlslap -a --number-of-queries=10 -uroot -p123456
測試同時不同的存儲引擎的性能進(jìn)行對比:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info -uroot -p123456
執(zhí)行一次測試,分別50和100個并發(fā),執(zhí)行1000次總查詢:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info -uroot -p123456
50和100個并發(fā)分別得到一次測試結(jié)果(Benchmark),并發(fā)數(shù)越多,執(zhí)行完所有查詢的時間越長。為了準(zhǔn)確起見,可以多迭代測試幾次:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info -uroot -p123456
網(wǎng)頁題目:mysql怎么做性能測試 查看mysql性能
鏈接地址:http://chinadenli.net/article28/doopscp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)