《Mysql入門MySQL壓力測(cè)試方法 如何使用mysqlslap測(cè)試MySQL的壓力?》要點(diǎn):
本文介紹了Mysql入門MySQL壓力測(cè)試方法 如何使用mysqlslap測(cè)試MySQL的壓力?,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
其實(shí)mysql測(cè)試也沒(méi)有這么復(fù)雜,除了一些常用的select\insert\update\deletc這些外,其實(shí)測(cè)試他的并發(fā)量才是最重要的.比如在連接數(shù)1K的時(shí)候,并發(fā)量能否滿足當(dāng)前哀求\服務(wù)器性能、內(nèi)存CPU使用情況.說(shuō)白了,測(cè)試mysql就是測(cè)試他的配置文件和并發(fā)量及服務(wù)器性能.MYSQL必讀
一、工具
首選工具mysql自帶的:mysqlslapMYSQL必讀
Cauto-generate-sql, -a
自動(dòng)生成測(cè)試表和數(shù)據(jù)MYSQL必讀
Cauto-generate-sql-load-type=type
測(cè)試語(yǔ)句的類型.取值包括:read,key,write,update和mixed(默認(rèn)).MYSQL必讀
Cnumber-char-cols=N, -x N
自動(dòng)生成的測(cè)試表中包含多少個(gè)字符類型的列,默認(rèn)1MYSQL必讀
Cnumber-int-cols=N, -y N
自動(dòng)生成的測(cè)試表中包含多少個(gè)數(shù)字類型的列,默認(rèn)1MYSQL必讀
Cnumber-of-queries=N
總的測(cè)試查詢次數(shù)(并發(fā)客戶數(shù)×每客戶查詢次數(shù))MYSQL必讀
Cquery=name,-q
使用自定義腳本執(zhí)行測(cè)試,例如可以調(diào)用自定義的一個(gè)存儲(chǔ)過(guò)程或者sql語(yǔ)句來(lái)執(zhí)行測(cè)試.MYSQL必讀
Ccreate-schema
測(cè)試的schema,MySQL中schema也就是databaseMYSQL必讀
Ccommint=N
多少條DML后提交一次MYSQL必讀
Ccompress, -C
如果服務(wù)器和客戶端支持都?jí)嚎s,則壓縮信息傳遞MYSQL必讀
Cconcurrency=N, -c N
并發(fā)量,也就是模擬多少個(gè)客戶端同時(shí)執(zhí)行select.可指定多個(gè)值,以逗號(hào)或者Cdelimiter參數(shù)指定的值做為分隔符MYSQL必讀
Cengine=engine_name, -e engine_name
創(chuàng)建測(cè)試表所使用的存儲(chǔ)引擎,可指定多個(gè)MYSQL必讀
Citerations=N, -i N
測(cè)試執(zhí)行的迭代次數(shù)MYSQL必讀
Cdetach=N
執(zhí)行N條語(yǔ)句后斷開重連MYSQL必讀
Cdebug-info, -T
打印內(nèi)存和CPU的信息MYSQL必讀
Conly-print
只打印測(cè)試語(yǔ)句而不實(shí)際執(zhí)行MYSQL必讀
―――――――――――――――――――――――――――――――-
測(cè)試的過(guò)程需要生成測(cè)試表,插入測(cè)試數(shù)據(jù),這個(gè)mysqlslap可以自動(dòng)生成,默認(rèn)生成一個(gè)mysqlslap的schema,如果已經(jīng)存在則先刪除,這里要注意了,不要用Ccreate-schema指定已經(jīng)存在的庫(kù),否則后果可能很嚴(yán)重.可以用Conly-print來(lái)打印實(shí)際的測(cè)試過(guò)程:MYSQL必讀
# mysqlslap -a Conly-printMYSQL必讀
DROP SCHEMA IF EXISTS `mysqlslap`;
CREATE SCHEMA `mysqlslap`;
use mysqlslap;
CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRD9rdxBL');
…
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (364531492,'qMa5SuKo4M5OM7ldvisSc6WK9rsNTGFxkDJ4EAwW');
DROP SCHEMA IF EXISTS `mysqlslap`;
可以看到最后由刪除一開始創(chuàng)建的schema的動(dòng)作,整個(gè)測(cè)試完成后不會(huì)在數(shù)據(jù)庫(kù)中留下痕跡.假如我們執(zhí)行一次測(cè)試,分別50和100個(gè)并發(fā),執(zhí)行1000次總查詢,那么:MYSQL必讀
# mysqlslap -uroot -p123456 -a Cconcurrency=50,100 Cnumber-of-queries 1000 Cdebug-infoMYSQL必讀
Benchmark
Average number of seconds to run all queries: 0.375 seconds
Minimum number of seconds to run all queries: 0.375 seconds
Maximum number of seconds to run all queries: 0.375 seconds
Number of clients running queries: 50
Average number of queries per client: 20MYSQL必讀
Benchmark
Average number of seconds to run all queries: 0.453 seconds
Minimum number of seconds to run all queries: 0.453 seconds
Maximum number of seconds to run all queries: 0.453 seconds
Number of clients running queries: 100
Average number of queries per client: 10MYSQL必讀
User time 0.29, System time 0.11
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 4032, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 7319, Involuntary context switches 681MYSQL必讀
以上結(jié)果可以看出,50和100個(gè)并發(fā)分別得到一次測(cè)試結(jié)果(Benchmark),并發(fā)數(shù)越多,執(zhí)行完所有查詢的時(shí)間越長(zhǎng).為了準(zhǔn)確起見(jiàn),可以多迭代測(cè)試幾次:MYSQL必讀
# mysqlslap -a Cconcurrency=50,100 Cnumber-of-queries 1000 Citerations=5 Cdebug-infoMYSQL必讀
Benchmark
Average number of seconds to run all queries: 0.380 seconds
Minimum number of seconds to run all queries: 0.377 seconds
Maximum number of seconds to run all queries: 0.385 seconds
Number of clients running queries: 50
Average number of queries per client: 20MYSQL必讀
Benchmark
Average number of seconds to run all queries: 0.447 seconds
Minimum number of seconds to run all queries: 0.444 seconds
Maximum number of seconds to run all queries: 0.451 seconds
Number of clients running queries: 100
Average number of queries per client: 10MYSQL必讀
User time 1.44, System time 0.67
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 17922, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 36796, Involuntary context switches 4093MYSQL必讀
測(cè)試同時(shí)不同的存儲(chǔ)引擎的性能進(jìn)行對(duì)比:
# mysqlslap -uroot -p123456 -a -concurrency=50,100 Cnumber-of-queries 1000 Citerations=5 Cengine=myisam,innodb Cdebug-info
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.200 seconds
Minimum number of seconds to run all queries: 0.188 seconds
Maximum number of seconds to run all queries: 0.210 seconds
Number of clients running queries: 50
Average number of queries per client: 20MYSQL必讀
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.238 seconds
Minimum number of seconds to run all queries: 0.228 seconds
Maximum number of seconds to run all queries: 0.251 seconds
Number of clients running queries: 100
Average number of queries per client: 10MYSQL必讀
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.375 seconds
Minimum number of seconds to run all queries: 0.370 seconds
Maximum number of seconds to run all queries: 0.379 seconds
Number of clients running queries: 50
Average number of queries per client: 20MYSQL必讀
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.443 seconds
Minimum number of seconds to run all queries: 0.440 seconds
Maximum number of seconds to run all queries: 0.447 seconds
Number of clients running queries: 100
Average number of queries per client: 10MYSQL必讀
User time 2.83, System time 1.66
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 34692, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 87306, Involuntary context switches 10326MYSQL必讀
# mysqladmin -uroot -p123456 -i 10 extended status 每10秒刷新一次MYSQL必讀
Aborted_connects 嘗試已經(jīng)失敗的MySQL服務(wù)器的連接的次數(shù).
Connections 試圖連接MySQL服務(wù)器的次數(shù).
Created_tmp_tables 當(dāng)執(zhí)行語(yǔ)句時(shí),已經(jīng)被創(chuàng)造了的隱含臨時(shí)表的數(shù)量.
Delayed_insert_threads 正在使用的延遲插入處理器線程的數(shù)量.
Delayed_writes 用INSERT DELAYED寫入的行數(shù).
Delayed_errors 用INSERT DELAYED寫入的發(fā)生某些錯(cuò)誤(可能重復(fù)鍵值)的行數(shù).
Flush_commands 執(zhí)行FLUSH命令的次數(shù).
Handler_delete 哀求從一張表中刪除行的次數(shù).
Handler_read_first 哀求讀入表中第一行的次數(shù).
Handler_read_key 哀求數(shù)字基于鍵讀行.
Handler_read_next 哀求讀入基于一個(gè)鍵的一行的次數(shù).
Handler_read_rnd 哀求讀入基于一個(gè)固定位置的一行的次數(shù).
Handler_update 哀求更新表中一行的次數(shù).
Handler_write 哀求向表中插入一行的次數(shù).
Key_blocks_used 用于關(guān)鍵字緩存的塊的數(shù)量.
Key_read_requests 哀求從緩存讀入一個(gè)鍵值的次數(shù).
Key_reads 從磁盤物理讀入一個(gè)鍵值的次數(shù).
Key_write_requests 哀求將一個(gè)關(guān)鍵字塊寫入緩存次數(shù).
Key_writes 將一個(gè)鍵值塊物理寫入磁盤的次數(shù).
Max_used_connections 同時(shí)使用的連接的最大數(shù)目.
Not_flushed_key_blocks 在鍵緩存中已經(jīng)改變但是還沒(méi)被清空到磁盤上的鍵塊.
Not_flushed_delayed_rows 在INSERT DELAY隊(duì)列中等待寫入的行的數(shù)量.
Open_tables 打開表的數(shù)量.
Open_files 打開文件的數(shù)量.
Open_streams 打開流的數(shù)量(主要用于日志記載)
Opened_tables 已經(jīng)打開的表的數(shù)量.
Questions 發(fā)往服務(wù)器的查詢的數(shù)量.
Slow_queries 要花超過(guò)long_query_time時(shí)間的查詢數(shù)量.
Threads_connected 當(dāng)前打開的連接的數(shù)量.
Threads_running 不在睡眠的線程數(shù)量.
Uptime 服務(wù)器工作了多少秒.MYSQL必讀
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Mysql入門MySQL壓力測(cè)試方法 如何使用mysqlslap測(cè)試MySQL的壓力?》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/13975.html