有一些有用的工具可以測(cè)試MySQL 和基于MySQL 的系統(tǒng)的性能。這里將演示如何利用這些工具進(jìn)行測(cè)試。
固安ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
mysqlslap
mysqlslap可以模擬服務(wù)器的負(fù)載,并輸出計(jì)時(shí)信息。它包含在MySQL 5.1 的發(fā)行包中,應(yīng)該在MySQL 4.1或者更新的版本中都可以使用。測(cè)試時(shí)可以執(zhí)行并發(fā)連接數(shù),并指定SQL 語(yǔ)句(可以在命令行上執(zhí)行,也可以把SQL 語(yǔ)句寫入到參數(shù)文件中)。如果沒有指定SQL 語(yǔ)句,mysqlslap 會(huì)自動(dòng)生成查詢schema 的SELECT 語(yǔ)句。
MySQL Benchmark Suite (sql-bench)
在MySQL 的發(fā)行包中也提供了一款自己的基準(zhǔn)測(cè)試套件,可以用于在不同數(shù)據(jù)庫(kù)服務(wù)器上進(jìn)行比較測(cè)試。它是單線程的,主要用于測(cè)試服務(wù)器執(zhí)行查詢的速度。結(jié)果會(huì)顯示哪種類型的操作在服務(wù)器上執(zhí)行得更快。
這個(gè)測(cè)試套件的主要好處是包含了大量預(yù)定義的測(cè)試,容易使用,所以可以很輕松地用于比較不同存儲(chǔ)引擎或者不同配置的性能測(cè)試。其也可以用于高層次測(cè)試,比較兩個(gè)服務(wù)器的總體性能。當(dāng)然也可以只執(zhí)行預(yù)定義測(cè)試的子集(例如只測(cè)試UPDATE 的性能)。這些測(cè)試大部分是CPU 密集型的,但也有些短時(shí)間的測(cè)試需要大量的磁盤I/O 操作。
這個(gè)套件的最大缺點(diǎn)主要有:它是單用戶模式的,測(cè)試的數(shù)據(jù)集很小且用戶無法使用指定的數(shù)據(jù),并且同一個(gè)測(cè)試多次運(yùn)行的結(jié)果可能會(huì)相差很大。因?yàn)槭菃尉€程且串行執(zhí)行的,所以無法測(cè)試多CPU 的能力,只能用于比較單CPU 服務(wù)器的性能差別。使用這個(gè)套件測(cè)試數(shù)據(jù)庫(kù)服務(wù)器還需要Perl 和BDB 的支持,相關(guān)文檔請(qǐng)參考.
Super Smack
Super Smack是一款用于MySQL 和PostgreSQL的基準(zhǔn)測(cè)試工具,可以提供壓力測(cè)試和負(fù)載生成。這是一個(gè)復(fù)雜而強(qiáng)大的工具,可以模擬多用戶訪問,可以加載測(cè)試數(shù)據(jù)到數(shù)據(jù)庫(kù),并支持使用隨機(jī)數(shù)據(jù)填充測(cè)試表。測(cè)試定義在"smack"文件中,smack 文件使用一種簡(jiǎn)單的語(yǔ)法定義測(cè)試的客戶端、表、查詢等測(cè)試要素。
Database Test Suite
Database Test Suite 是由開源軟件開發(fā)實(shí)驗(yàn)室(OSDL,Open Source DevelopmentLabs)設(shè)計(jì)的,發(fā)布在SourceForge 網(wǎng)站上,這是一款類似某些工業(yè)標(biāo)準(zhǔn)測(cè)試的測(cè)試工具集,例如由事務(wù)處理性能委員會(huì)(TPC,Transaction Processing Performance Council)制定的各種標(biāo)準(zhǔn)。特別值得一提的是,其中的dbt2 就是一款免費(fèi)的TPC-C OLTP 測(cè)試工具(未認(rèn)證)。之前本書作者經(jīng)常使用該工具,不過現(xiàn)在已經(jīng)使用自己研發(fā)的專用于MySQL 的測(cè)試工具替代了。
Percona's TPCC-MySQL Tool
我們開發(fā)了一個(gè)類似TPC-C 的基準(zhǔn)測(cè)試工具集,其中有部分是專門為MySQL 測(cè)試開發(fā)的。在評(píng)估大壓力下MySQL 的一些行為時(shí),我們經(jīng)常會(huì)利用這個(gè)工具進(jìn)行測(cè)試(簡(jiǎn)單的測(cè)試,一般會(huì)采用sysbench 替代),在源碼庫(kù)中有一個(gè)簡(jiǎn)單的文檔說明。
sysbench
sysbench是一款多線程系統(tǒng)壓測(cè)工具。它可以根據(jù)影響數(shù)據(jù)庫(kù)服務(wù)器性能的各種因素來評(píng)估系統(tǒng)的性能。例如,可以用來測(cè)試文件I/O、操作系統(tǒng)調(diào)度器、內(nèi)存分配和傳輸速度、POSIX 線程,以及數(shù)據(jù)庫(kù)服務(wù)器等。sysbench 支持Lua 腳本語(yǔ)言,Lua 對(duì)于各種測(cè)試場(chǎng)景的設(shè)置可以非常靈活。sysbench 是我們非常喜歡的一種全能測(cè)試工具,支持MySQL、操作系統(tǒng)和硬件的硬件測(cè)試。(節(jié)選自《高性能MySQL》)
1、mysqlslap
安裝:簡(jiǎn)單,裝了mysql就有了
作用:模擬并發(fā)測(cè)試數(shù)據(jù)庫(kù)性能。
優(yōu)點(diǎn):簡(jiǎn)單,容易使用。
不足:不能指定生成的數(shù)據(jù)規(guī)模,測(cè)試過程不清楚針對(duì)十萬級(jí)還是百萬級(jí)數(shù)據(jù)做的測(cè)試,感覺不太適合做綜合測(cè)試,比較適合針對(duì)既有數(shù)據(jù)庫(kù),對(duì)單個(gè)sql進(jìn)行優(yōu)化的測(cè)試。
使用方法:
可以使用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ù)量,多個(gè)可以用逗號(hào)隔開,concurrency=10,50,100, 并發(fā)連接線程數(shù)分別是10、50、100個(gè)并發(fā)。
--engines代表要測(cè)試的引擎,可以有多個(gè),用分隔符隔開。
--iterations代表要運(yùn)行這些測(cè)試多少次。
--auto-generate-sql 代表用系統(tǒng)自己生成的SQL腳本來測(cè)試。
--auto-generate-sql-load-type 代表要測(cè)試的是讀還是寫還是兩者混合的(read,write,update,mixed)
--number-of-queries 代表總共要運(yùn)行多少次查詢。每個(gè)客戶運(yùn)行的查詢數(shù)量可以用查詢總數(shù)/并發(fā)數(shù)來計(jì)算。
--debug-info 代表要額外輸出CPU以及內(nèi)存的相關(guān)信息。
--number-int-cols :創(chuàng)建測(cè)試表的 int 型字段數(shù)量
--auto-generate-sql-add-autoincrement : 代表對(duì)生成的表自動(dòng)添加auto_increment列,從5.1.18版本開始
--number-char-cols 創(chuàng)建測(cè)試表的 char 型字段數(shù)量。
--create-schema 測(cè)試的schema,MySQL中schema也就是database。
--query 使用自定義腳本執(zhí)行測(cè)試,例如可以調(diào)用自定義的一個(gè)存儲(chǔ)過程或者sql語(yǔ)句來執(zhí)行測(cè)試。
--only-print 如果只想打印看看SQL語(yǔ)句是什么,可以用這個(gè)選項(xiàng)。
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ù)庫(kù)和sql語(yǔ)句:
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個(gè)客戶端同時(shí)運(yùn)行要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
安裝時(shí)候可能會(huì)報(bào)錯(cuò),后來baidu發(fā)現(xiàn)個(gè)好文 怕以后找不到,也貼過來吧
1.如果mysql不是默認(rèn)路徑安裝,那么需要通過指定--with-mysql-includes和--with-mysql-libs參數(shù)來加載mysql安裝路徑
2.如果報(bào)錯(cuò):
../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.如果報(bào)錯(cuò):
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時(shí),報(bào)如下錯(cuò)誤:
./autogen.sh: line 3: aclocal: command not found
那么需要安裝一個(gè)軟件:
yum install automake
然后需要增加一個(gè)參數(shù):查找: AC_PROG_LIBTOOL 將其注釋,然后增加AC_PROG_RANLIB
作用:模擬并發(fā),可以執(zhí)行CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫(kù)等方面的性能測(cè)試。數(shù)據(jù)庫(kù)目前支持MySQL/Oracle/PostgreSQL
優(yōu)點(diǎn):可以指定測(cè)試數(shù)據(jù)的規(guī)模,可以單獨(dú)測(cè)試讀、寫的性能,也可以測(cè)試讀寫混合的性能。
不足:測(cè)試的時(shí)候,由于網(wǎng)絡(luò)原因,測(cè)試的非常慢,但是最終給的結(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í)行測(cè)試
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)站上下載源碼比較麻煩,需要工具、注冊(cè)、生成證書等。這里提供一個(gè)下載包
export C_INCLUDE_PATH=/usr/include/mysql
export PATH=/usr/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/mysql
cd /tmp/tpcc/src
make
然后就會(huì)在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start
作用:測(cè)試mysql數(shù)據(jù)庫(kù)的整體性能
優(yōu)點(diǎn):符合tpcc標(biāo)準(zhǔn),有標(biāo)準(zhǔn)的方法,模擬真實(shí)的交易活動(dòng),結(jié)果比較可靠。
不足:不能單獨(dú)測(cè)試讀或者寫的性能,對(duì)于一些以查詢?yōu)橹骰蛘咧粚懙膽?yīng)用,就沒有這么大的意義了。
使用方法:
加載數(shù)據(jù)
創(chuàng)建庫(kù)
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
|主機(jī)||數(shù)據(jù)庫(kù)||用戶||密碼||warehouse|
2、并發(fā)加載:(推薦,但需要修改一下)
shell./load.sh tpcc300 300
|數(shù)據(jù)庫(kù)||warehouse|
3、測(cè)試
./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.
測(cè)試何種指標(biāo)
在開始執(zhí)行甚至是在設(shè)計(jì)基準(zhǔn)測(cè)試之前 需要先明確測(cè)試的目標(biāo) 測(cè)試目標(biāo)決定了選擇什么樣的測(cè)試工具和技術(shù) 以獲得精確而有意義的測(cè)試結(jié)果 可以將測(cè)試目標(biāo)細(xì)化為一系列的問題 比如 這種CPU 是否比另外一種要快? 或 新索引是否比當(dāng)前索引性能更好?
有時(shí)候需要用不同的方法測(cè)試不同的指標(biāo) 比如 針對(duì)延遲(latency)和吞吐量(throughput)就需要采用不同的測(cè)試方法
請(qǐng)考慮以下指標(biāo) 看看如何滿足測(cè)試的需求
吞吐量
吞吐量指的是單位時(shí)間內(nèi)的事務(wù)處理數(shù) 這一直是經(jīng)典的數(shù)據(jù)庫(kù)應(yīng)用測(cè)試指標(biāo) 一些標(biāo)準(zhǔn)的基準(zhǔn)測(cè)試被廣泛地引用 如TPC C(參考// tpc ) 而且很多數(shù)據(jù)庫(kù)廠商都努力爭(zhēng)取在這些測(cè)試中取得好成績(jī) 這類基準(zhǔn)測(cè)試主要針對(duì)在線事務(wù)處理(OLTP)的吞吐量 非常適用于多用戶的交互式應(yīng)用 常用的測(cè)試單位是每秒事務(wù)數(shù)(TPS) 有些也采用每分鐘事務(wù)數(shù)(TPM)
響應(yīng)時(shí)間或者延遲
這個(gè)指標(biāo)用于測(cè)試任務(wù)所需的整體時(shí)間 根據(jù)具體的應(yīng)用 測(cè)試的時(shí)間單位可能是微秒 毫秒 秒或者分鐘 根據(jù)不同的時(shí)間單位可以計(jì)算出平均響應(yīng)時(shí)間 最小響應(yīng)時(shí)間 最大響應(yīng)時(shí)間和所占百分比 最大響應(yīng)時(shí)間通常意義不大 因?yàn)闇y(cè)試時(shí)間越長(zhǎng) 最大響應(yīng)時(shí)間也可能越大 而且其結(jié)果通常不可重復(fù) 每次測(cè)試都可能得到不同的最大響應(yīng)時(shí)間 因此 通??梢允褂冒俜直软憫?yīng)時(shí)間(percentile responsetime)來替代最大響應(yīng)時(shí)間 例如 如果 % 的響應(yīng)時(shí)間都是 毫秒 則表示任務(wù)在 % 的時(shí)間段內(nèi)都可以在 毫秒之內(nèi)完成
使用圖表有助于理解測(cè)試結(jié)果 可以將測(cè)試結(jié)果繪制成折線圖(比如平均值折線或者 % 百分比折線)或者散點(diǎn)圖 直觀地表現(xiàn)數(shù)據(jù)結(jié)果集的分布情況 通過這些圖可以發(fā)現(xiàn)長(zhǎng)時(shí)間測(cè)試的趨勢(shì) 本章后面將更詳細(xì)地討論這一點(diǎn)
并發(fā)性
并發(fā)性是一個(gè)非常重要又經(jīng)常被誤解和誤用的指標(biāo) 例如 它經(jīng)常被表示成多少用戶在同一時(shí)間瀏覽一個(gè)Web 站點(diǎn) 經(jīng)常使用的指標(biāo)是有多少個(gè)會(huì)話注 然而 HTTP協(xié)議是無狀態(tài)的 大多數(shù)用戶只是簡(jiǎn)單地讀取瀏覽器上顯示的信息 這并不等同于Web 服務(wù)器的并發(fā)性 而且 Web 服務(wù)器的并發(fā)性也不等同于數(shù)據(jù)庫(kù)的并發(fā)性 而僅僅只表示會(huì)話存儲(chǔ)機(jī)制可以處理多少數(shù)據(jù)的能力 Web 服務(wù)器的并發(fā)性更準(zhǔn)確的度量指標(biāo) 應(yīng)該是在任意時(shí)間有多少同時(shí)發(fā)生的并發(fā)請(qǐng)求
在應(yīng)用的不同環(huán)節(jié)都可以測(cè)量相應(yīng)的并發(fā)性 Web 服務(wù)器的高并發(fā) 一般也會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的高并發(fā) 但服務(wù)器采用的語(yǔ)言和工具集對(duì)此都會(huì)有影響 注意不要將創(chuàng)建數(shù)據(jù)庫(kù)連接和并發(fā)性搞混淆 一個(gè)設(shè)計(jì)良好的應(yīng)用 同時(shí)可以打開成百上千個(gè)MySQL 數(shù)據(jù)庫(kù)服務(wù)器連接 但可能同時(shí)只有少數(shù)連接在執(zhí)行查詢 所以說 一個(gè)Web 站點(diǎn) 同時(shí)有 個(gè)用戶 訪問 卻可能只有 ~ 個(gè)并發(fā)請(qǐng)求到MySQL 數(shù)據(jù)庫(kù)
換句話說 并發(fā)性基準(zhǔn)測(cè)試需要關(guān)注的是正在工作中的并發(fā)操作 或者是同時(shí)工作中的線程數(shù)或者連接數(shù) 當(dāng)并發(fā)性增加時(shí) 需要測(cè)量吞吐量是否下降 響應(yīng)時(shí)間是否變長(zhǎng) 如果是這樣 應(yīng)用可能就無法處理峰值壓力
并發(fā)性的測(cè)量完全不同于響應(yīng)時(shí)間和吞吐量 它不像是一個(gè)結(jié)果 而更像是設(shè)置基準(zhǔn)測(cè)試的一種屬性 并發(fā)性測(cè)試通常不是為了測(cè)試應(yīng)用能達(dá)到的并發(fā)度 而是為了測(cè)試應(yīng)用在不同并發(fā)下的性能 當(dāng)然 數(shù)據(jù)庫(kù)的并發(fā)性還是需要測(cè)量的 可以通過sy *** ench 指定 或者 個(gè)線程的測(cè)試 然后在測(cè)試期間記錄MySQL 數(shù)據(jù)庫(kù)的Threads_running 狀態(tài)值 在第 章將討論這個(gè)指標(biāo)對(duì)容量規(guī)劃的影響
可擴(kuò)展性
在系統(tǒng)的業(yè)務(wù)壓力可能發(fā)生變化的情況下 測(cè)試可擴(kuò)展性就非常必要了 第 章將更進(jìn)一步討論可擴(kuò)展性的話題 簡(jiǎn)單地說 可擴(kuò)展性指的是 給系統(tǒng)增加一倍的工作 在理想情況下就能獲得兩倍的結(jié)果(即吞吐量增加一倍) 或者說 給系統(tǒng)增加一倍的資源(比如兩倍的CPU 數(shù)) 就可以獲得兩倍的吞吐量 當(dāng)然 同時(shí)性能(響應(yīng)時(shí)間)也必須在可以接受的范圍內(nèi) 大多數(shù)系統(tǒng)是無法做到如此理想的線性擴(kuò)展的 隨著壓力的變化 吞吐量和性能都可能越來越差
可擴(kuò)展性指標(biāo)對(duì)于容量規(guī)范非常有用 它可以提供其他測(cè)試無法提供的信息 來幫助發(fā)現(xiàn)應(yīng)用的瓶頸 比如 如果系統(tǒng)是基于單個(gè)用戶的響應(yīng)時(shí)間測(cè)試(這是一個(gè)很糟糕的測(cè)試策略)設(shè)計(jì)的 雖然測(cè)試的結(jié)果很好 但當(dāng)并發(fā)度增加時(shí) 系統(tǒng)的性能有可能變得非常糟糕 而一個(gè)基于不斷增加用戶連接的情況下的響應(yīng)時(shí)間測(cè)試則可以發(fā)現(xiàn)這個(gè)問題
一些任務(wù) 比如從細(xì)粒度數(shù)據(jù)創(chuàng)建匯總表的批量工作 需要的是周期性的快速響應(yīng)時(shí)間 當(dāng)然也可以測(cè)試這些任務(wù)純粹的響應(yīng)時(shí)間 但要注意考慮這些任務(wù)之間的相互影響 批量工作可能導(dǎo)致相互之間有影響的查詢性能變差 反之亦然
歸根結(jié)底 應(yīng)該測(cè)試那些對(duì)用戶來說最重要的指標(biāo) 因此應(yīng)該盡可能地去收集一些需求 比如 什么樣的響應(yīng)時(shí)間是可以接受的 期待多少的并發(fā)性 等等 然后基于這些需求來設(shè)計(jì)基準(zhǔn)測(cè)試 避免目光短淺地只關(guān)注部分指標(biāo) 而忽略其他指標(biāo)
返回目錄 高性能MySQL
編輯推薦
ASP NET開發(fā)培訓(xùn)視頻教程
數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)挖掘培訓(xùn)視頻教程
lishixinzhi/Article/program/MySQL/201311/29741
容量: 看硬件
InnoDB?最大容量64TB ,存儲(chǔ)引擎將 InnoDB 表 保存在一個(gè) 表空間內(nèi)( 原始磁盤分區(qū),由數(shù)個(gè)文件創(chuàng)建)。這樣, 表大小 能超過 單獨(dú)文件最大容量 。
MySQL 3.22( MyISAM )限制表大小 4GB ,最大表尺寸增加到65536TB(2567 – 1字節(jié))。最大有效表尺寸通常是由 操作系統(tǒng) 對(duì) 文件大小限制 決定的, 不是 由MySQL內(nèi)部限制決定。
最多 20億個(gè)表 ,一個(gè)表允許定義1024列,每行的最大長(zhǎng)度為8092字節(jié)(不包括文本和圖像類型的長(zhǎng)度);
阿里《Java 開發(fā)手冊(cè)》提出 單表行 500w 容量2GB ,才分庫(kù)分表
與 MySQL 配置及硬件 有關(guān),實(shí)際記錄的條數(shù)無關(guān)。因?yàn)楸?索引 裝載 到內(nèi)存,InnoDB buffer size 足夠 ,才能全加載進(jìn)內(nèi)存,查沒問題。達(dá)量級(jí)限時(shí),導(dǎo)致 內(nèi)存無法存儲(chǔ)索引 ,產(chǎn)生磁盤 IO,性能下降。增加硬件配置解決。500w算折中
QPS在8400左右 :400個(gè)線程并發(fā),插入100萬條記錄(4核2.33G、3G內(nèi)存、SATA硬盤)
寫: 90-100M/S(機(jī)械硬盤,7200轉(zhuǎn))預(yù)計(jì)kB_wrtn/s在90M左右
show variables like 'max_connections' ?mysql當(dāng)前最大連接數(shù)
set global max_connections=1000; ?設(shè)置當(dāng)前最大連接數(shù)為1000;mysql重啟時(shí)失效,需要長(zhǎng)期生效在my.ini 添加 max_connections=1000
從業(yè)務(wù)使用場(chǎng)景出發(fā),根據(jù)RDS套餐類型和線上實(shí)際訪問流量,來衡量性能指標(biāo),以便方便對(duì)標(biāo)實(shí)際業(yè)務(wù)場(chǎng)景。
MySQL 5.7.21 Group Replication
MySQL 5.7.21 Group Replication with Consistent Read
同機(jī)房3節(jié)點(diǎn)、跨機(jī)房3節(jié)點(diǎn)
網(wǎng)絡(luò)異常:長(zhǎng)時(shí)間延時(shí)0.5ms,長(zhǎng)時(shí)間延時(shí)2ms,丟包0.01%
場(chǎng)景1、2的差異可以衡量 跨機(jī)房網(wǎng)絡(luò) 帶來的 性能損耗
場(chǎng)景3關(guān)注在 網(wǎng)絡(luò)質(zhì)量變化 時(shí)帶來的 性能變化
同機(jī)房3節(jié)點(diǎn)為 05 06 03????跨機(jī)房3節(jié)點(diǎn)為 05 06 01
機(jī)器部署:同IDC3臺(tái)(永順ys 03 05 06),跨IDC1臺(tái)(廣州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ò)耗時(shí)是同 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ò)耗時(shí)是 同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語(yǔ)言gorm框架MySQL實(shí)踐,其中對(duì)gorm框架在操作MySQL的各種基礎(chǔ)實(shí)踐,下面分享一下如何使用gorm框架對(duì)MySQL直接進(jìn)行性能測(cè)試的簡(jiǎn)單實(shí)踐。
這里我使用了一個(gè)原始的Go語(yǔ)言版本的 FunTester 測(cè)試框架,現(xiàn)在只有一個(gè)基本的方法,實(shí)在是因?yàn)镚o語(yǔ)言特性太強(qiáng)了??蚣茉O(shè)計(jì)的主要思路之一就是利用Go語(yǔ)言的閉包和方法參數(shù)特性,將一個(gè) func() 當(dāng)做性能測(cè)試的主題,通過不斷運(yùn)行這個(gè) func() 來實(shí)現(xiàn)性能測(cè)試。當(dāng)然還有另外一個(gè)思路就是運(yùn)行一個(gè)多線程任務(wù)類,類似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象類,這樣可以設(shè)置一些類的屬性,綁定一些測(cè)試資源,適配更多的測(cè)試場(chǎng)景。
下面演示select的性能測(cè)試,這里我用了隨機(jī)ID查詢的場(chǎng)景。
這里我使用從35開始遞增的ID進(jìn)行刪除。
這里使用了select的用例部分,隨機(jī)ID,然后更新name字段,隨機(jī)10個(gè)長(zhǎng)度的字符串。
這里用到了 FunTester 字段都是隨機(jī)生成。
到這里可以看出,性能測(cè)試框架用到的都是gorm框架的基礎(chǔ)API使用,這里MySQL連接池的管理工作完全交給了gorm框架完成,看資料說非常牛逼,我們只需要設(shè)置幾個(gè)參數(shù)。這個(gè)使用體現(xiàn)很像 HttpClient 設(shè)置 HTTP 連接池類似,這里我們也可以看出這些優(yōu)秀的框架使用起來都是非常簡(jiǎn)單的。
PS:關(guān)于gorm的基礎(chǔ)使用的請(qǐng)參考上一期的文章Go語(yǔ)言gorm框架MySQL實(shí)踐。
使用語(yǔ)法如下:
# mysqlslap [options]
常用參數(shù) [options] 詳細(xì)說明:
--auto-generate-sql, -a 自動(dòng)生成測(cè)試表和數(shù)據(jù),表示用mysqlslap工具自己生成的SQL腳本來測(cè)試并發(fā)壓力。
--auto-generate-sql-load-type=type 測(cè)試語(yǔ)句的類型。代表要測(cè)試的環(huán)境是讀操作還是寫操作還是兩者混合的。取值包括:read,key,write,update和mixed(默認(rèn))。
--auto-generate-sql-add-auto-increment 代表對(duì)生成的表自動(dòng)添加auto_increment列,從5.1.18版本開始支持。
--number-char-cols=N, -x N 自動(dòng)生成的測(cè)試表中包含多少個(gè)字符類型的列,默認(rèn)1
--number-int-cols=N, -y N 自動(dòng)生成的測(cè)試表中包含多少個(gè)數(shù)字類型的列,默認(rèn)1
--number-of-queries=N 總的測(cè)試查詢次數(shù)(并發(fā)客戶數(shù)×每客戶查詢次數(shù))
--query=name,-q 使用自定義腳本執(zhí)行測(cè)試,例如可以調(diào)用自定義的一個(gè)存儲(chǔ)過程或者sql語(yǔ)句來執(zhí)行測(cè)試。
--create-schema 代表自定義的測(cè)試庫(kù)名稱,測(cè)試的schema,MySQL中schema也就是database。
--commint=N 多少條DML后提交一次。
--compress, -C 如果服務(wù)器和客戶端支持都?jí)嚎s,則壓縮信息傳遞。
--concurrency=N, -c N 表示并發(fā)量,也就是模擬多少個(gè)客戶端同時(shí)執(zhí)行select??芍付ǘ鄠€(gè)值,以逗號(hào)或者--delimiter參數(shù)指定的值做為分隔符。例如:--concurrency=100,200,500。
--engine=engine_name, -e engine_name 代表要測(cè)試的引擎,可以有多個(gè),用分隔符隔開。例如:--engines=myisam,innodb。
--iterations=N, -i N 測(cè)試執(zhí)行的迭代次數(shù),代表要在不同并發(fā)環(huán)境下,各自運(yùn)行測(cè)試多少次。
--only-print 只打印測(cè)試語(yǔ)句而不實(shí)際執(zhí)行。
--detach=N 執(zhí)行N條語(yǔ)句后斷開重連。
--debug-info, -T 打印內(nèi)存和CPU的相關(guān)信息。
說明:
測(cè)試的過程需要生成測(cè)試表,插入測(cè)試數(shù)據(jù),這個(gè)mysqlslap可以自動(dòng)生成,默認(rèn)生成一個(gè)mysqlslap的schema,如果已經(jīng)存在則先刪除??梢杂?-only-print來打印實(shí)際的測(cè)試過程,整個(gè)測(cè)試完成后不會(huì)在數(shù)據(jù)庫(kù)中留下痕跡。
各種測(cè)試參數(shù)實(shí)例(-p后面跟的是mysql的root密碼):
單線程測(cè)試。測(cè)試做了什么。
# mysqlslap -a -uroot -p123456
多線程測(cè)試。使用–concurrency來模擬并發(fā)連接。
# mysqlslap -a -c 100 -uroot -p123456
迭代測(cè)試。用于需要多次執(zhí)行測(cè)試得到平均值。
# 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
測(cè)試同時(shí)不同的存儲(chǔ)引擎的性能進(jìn)行對(duì)比:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info -uroot -p123456
執(zhí)行一次測(cè)試,分別50和100個(gè)并發(fā),執(zhí)行1000次總查詢:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info -uroot -p123456
50和100個(gè)并發(fā)分別得到一次測(cè)試結(jié)果(Benchmark),并發(fā)數(shù)越多,執(zhí)行完所有查詢的時(shí)間越長(zhǎng)。為了準(zhǔn)確起見,可以多迭代測(cè)試幾次:
# mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info -uroot -p123456
網(wǎng)頁(yè)題目:mysql怎么做性能測(cè)試 查看mysql性能
鏈接地址:http://m.rwnh.cn/article28/doopscp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)