高性能MySQL(二)
MySQL基準測試
為什么需要benchmark
策略
一是針對整個系統的整體測試,另外是單獨測試MySQL,也稱為集成式和單組件式基準測試
測試什么指標
方法
常見錯誤:
設計和規劃基準測試
提出問題并明確目標,決定是標準測試還是專用測試
對連接使用獨立線程重現,多次測試,詳細記錄
基準測試運行時間
應該運行足夠長時間
獲取系統性能和狀態
記錄系統狀態、性能指標、CPU使用率、磁盤IO、網絡流量統計等
#! /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.獲得準確的測試結果
外部影響很多,盡可能降低這種影響,同時修改參數也盡量一點一點修改
運行基準測試并分析結果
自動化腳本測試是比較好的方式,結果最好用圖表的格式繪制出來,這樣可以直觀看到很多光看數據無法被發現的問題
基準測試工具
集成式測試工具
ab
針對Web應用服務,結果轉換成每秒能滿足多少請求,只能針對單個URL進行盡可能快的壓力測試
http_load
與ab類似,也被設計為對Web服務器進行測試,比ab更加靈活,通過一個輸入文件提供多個URL,在這些URL中隨機測試
JMeter
Java應用程序,可以加載其它應用并測試其性能,雖然設計用來測試Web應用,但也可用于測試FTP服務器,或JDBC數據庫查詢測試,比ab和http_load復雜得多,擁有繪圖接口
單組件式測試工具
mysqlsalp
可模擬服務器的負載并輸出即時信息
MySQL benchmark suite(sql-bench)
單線程的,主要用于測試服務器執行查詢的速度,結果顯示哪種類型的操作在服務器上執行得更快,包含了大量預定義的測試,也可用于高層次測試,缺點是單用戶模式,數據集很小且無法使用指定的數據,無法測試多CPU能力,還需要Perl和BDB的支持
Super Smack
用于MySQL和PostgreSQL的肌醇測試工具,可提供壓力測試和負載生成,可模擬多用戶訪問,可加載測試數據到數據庫,支持使用隨機數據填充測試表
sysbench
多線程系統壓測工具,可用來測試文件IO、操作系統調度器、內存分配和傳輸速度、POSIX線程以及數據庫服務器,支持Lua腳本語言
MySQL內置的BENCHMARK()函數
測試某些特定操作的執行速度,參數是需要執行的次數和表達式,返回值永遠是0,但可通過返回時間判斷執行的時間,不適合用來做真正的測試
案例
http_load
http_load -parallel 1 -seconds 10 [filename] # 單用戶 http_load -parallel 5 -seconds 10 [filename] # 5個并發用戶 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個并發線程,只讀模式,測試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其他特性
內存連續讀寫/線程調度器/互斥鎖/順序寫性能
轉載于:https://www.cnblogs.com/ikct2017/p/9530315.html
總結
以上是生活随笔為你收集整理的高性能MySQL(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery.uploadify参数
- 下一篇: Mysql 休眠连接过多,有可能导致“T