高性能MySQL(二)
MySQL基準測試
為什么需要benchmark
策略
一是針對整個系統(tǒng)的整體測試,另外是單獨測試MySQL,也稱為集成式和單組件式基準測試
測試什么指標(biāo)
方法
常見錯誤:
設(shè)計和規(guī)劃基準測試
提出問題并明確目標(biāo),決定是標(biāo)準測試還是專用測試
對連接使用獨立線程重現(xiàn),多次測試,詳細記錄
基準測試運行時間
應(yīng)該運行足夠長時間
獲取系統(tǒng)性能和狀態(tài)
記錄系統(tǒng)狀態(tài)、性能指標(biāo)、CPU使用率、磁盤IO、網(wǎng)絡(luò)流量統(tǒng)計等
#! /bin/shINTERVAL=5 PREFIX=$INTERVAL-sec-status RUNFILE=/home/benchmarks/running mysql -e 'SHOW GLOBAL VARIABLES' >> mysql-variables while test -e $RUNFILE; dofile=$(date +%F_%I)sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")sleep $sleepts="$(date +"TS %s.%N %F %T")"loadavg="$(uptime)"echo "$ts $loadavg" >> $PREFIX-${file}-statusmysql -e 'SHOW GLOBAL VARIABLES' >> $PREFIX-${file}-status &echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatusmysql -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &echo "$ts $loadavg" >> $PREFIX-${file}-processlistmysql -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist & echo $ts done echo Exiting because $RUNFILE does not exist.獲得準確的測試結(jié)果
外部影響很多,盡可能降低這種影響,同時修改參數(shù)也盡量一點一點修改
運行基準測試并分析結(jié)果
自動化腳本測試是比較好的方式,結(jié)果最好用圖表的格式繪制出來,這樣可以直觀看到很多光看數(shù)據(jù)無法被發(fā)現(xiàn)的問題
基準測試工具
集成式測試工具
ab
針對Web應(yīng)用服務(wù),結(jié)果轉(zhuǎn)換成每秒能滿足多少請求,只能針對單個URL進行盡可能快的壓力測試
http_load
與ab類似,也被設(shè)計為對Web服務(wù)器進行測試,比ab更加靈活,通過一個輸入文件提供多個URL,在這些URL中隨機測試
JMeter
Java應(yīng)用程序,可以加載其它應(yīng)用并測試其性能,雖然設(shè)計用來測試Web應(yīng)用,但也可用于測試FTP服務(wù)器,或JDBC數(shù)據(jù)庫查詢測試,比ab和http_load復(fù)雜得多,擁有繪圖接口
單組件式測試工具
mysqlsalp
可模擬服務(wù)器的負載并輸出即時信息
MySQL benchmark suite(sql-bench)
單線程的,主要用于測試服務(wù)器執(zhí)行查詢的速度,結(jié)果顯示哪種類型的操作在服務(wù)器上執(zhí)行得更快,包含了大量預(yù)定義的測試,也可用于高層次測試,缺點是單用戶模式,數(shù)據(jù)集很小且無法使用指定的數(shù)據(jù),無法測試多CPU能力,還需要Perl和BDB的支持
Super Smack
用于MySQL和PostgreSQL的肌醇測試工具,可提供壓力測試和負載生成,可模擬多用戶訪問,可加載測試數(shù)據(jù)到數(shù)據(jù)庫,支持使用隨機數(shù)據(jù)填充測試表
sysbench
多線程系統(tǒng)壓測工具,可用來測試文件IO、操作系統(tǒng)調(diào)度器、內(nèi)存分配和傳輸速度、POSIX線程以及數(shù)據(jù)庫服務(wù)器,支持Lua腳本語言
MySQL內(nèi)置的BENCHMARK()函數(shù)
測試某些特定操作的執(zhí)行速度,參數(shù)是需要執(zhí)行的次數(shù)和表達式,返回值永遠是0,但可通過返回時間判斷執(zhí)行的時間,不適合用來做真正的測試
案例
http_load
http_load -parallel 1 -seconds 10 [filename] # 單用戶 http_load -parallel 5 -seconds 10 [filename] # 5個并發(fā)用戶 http_load -rate 5 -seconds 10 [filename] # 每秒5次請求sysbench
CPU基準測試
sysbench --test=cpu --cpu-max-prime=20000 run文件IO基準測試
# 準備階段 sysbench --test=fileio --file-total-size=150G prepare # 運行階段 sysbench --test=fileio --file-total-size=150G --file-test-mode=[seqwr/seqrewr/seqrd/rndrd/rndwr/rdnrw] \ --init-rng=on --max-time=300 --max-requests=0 run # 清楚測試文件 sysbench --test=fileio --file-total-size=150G cleanupOLTP基準測試
# 生成百萬行記錄的表 sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test/ --mysql-user=root prepare # 測試(8個并發(fā)線程,只讀模式,測試60秒) sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root \ --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run其他特性
內(nèi)存連續(xù)讀寫/線程調(diào)度器/互斥鎖/順序?qū)懶阅?/p>
轉(zhuǎn)載于:https://www.cnblogs.com/ikct2017/p/9530315.html
總結(jié)
以上是生活随笔為你收集整理的高性能MySQL(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery.uploadify参数
- 下一篇: Mysql 休眠连接过多,有可能导致“T