Mysql基準測試

1、基準測試php

基準測試的做用:mysql

  • 瞭解當前系統的性能,創建MySQL服務器性能基準線(爲以後的性能優化提供一個超始線)linux

  • 模擬比當前系統更高的負載,找出系統的擴展瓶頸,爲系統擴展與優化提供參考條件git

  • 測試不一樣的硬件、軟件和操做系統配置github

  • 證實新的硬件設備是否配置正確和是不是最優配置web

基準測試能夠分爲集成式測試和單組件式測試。sql

  • 集成式測試就是對整個應用系統進行測試,如一個網站應用系統,對整個網站系統進行測試。數據庫

  • 單組件式測試是對系統中的某個組件進行測試,如對網站中的數據庫這個組件進行測試,或對web服務器這個組件進行測試等。apache

(一)、集成式測試工具性能優化

有http_load,ab,jMeter,wrk等

一、ab的使用

ab即apache bench,是apache httpd包含的一個http壓測工具

(1)ab的安裝

安裝apache httpd便可(詳細安裝教程請參照:Linux下安裝apache httpd及httpd常見用法

(2)ab的經常使用用法

ab [options] url

  • options表示參數

       -n:請求數

       -c:併發數(請求人數)

       -s:超時時間

  • url表示壓力測試的地址

如:

1
ab -n 2000 -c 10000 http: //localhost/hello .php

 結果以下:

ab.png

二、wrk的使用

wrk是一款簡單的http壓測工具,安裝和使用都比較簡單(推薦使用)

(1)安裝

下載地址:http://github.com/wg/wrk

1
2
3
  cd  wrk
  make
  cp  wrk  /usr/local/bin/wrk

(2)使用

wrk <options> url

  • - options:參數

    -c:鏈接數

       -d:壓測時間(可使用m(分鐘)、s(秒)這種單位)

       -t:使用的線程數

  • - url:壓測地址

1
  wrk -c20000 -t10 -d1m http: //localhost/index .php

  結果以下:

wrk.png

三、jMeter的使用

jmeter相對於其餘工具來講相對複雜,以後會有專門的文章來介紹jMeter的使用

(二)、單組件式測試工具

有mysqlslap,sysbench等

一、mysqlslap

它是mysql自帶的壓測工具

使用:mysqlslap <options>

經常使用options詳解:

  • --auto-generate-sql(或者使用-a),表示使用mysqlslap工具本身生成的sql腳原本測試併發壓力

  • --concurency(或者使用-c),表示模擬的多少個客戶端同時執行操做

  • --engine(或者使用-e),表示要測試的存儲引擎

  • --iterations(或者使用-i),表示在不一樣的併發環境下,各自測試多少次

  • --number-of-queries=N,表示總的測試查詢次數

如:測試單個用戶

1
./mysqlslap -a

或:模擬多個用戶(100個)

1
./mysqlslap -a -c200

 

二、sysbench

詳細使用請參照:mysql優化調優之一:發現問題-基準測試之sysbench的使用

2、性能分析

與測試同樣,性能分析也包括對整個應用的性能分析和對單個組件的性能分析,針對整個應用,針對不一樣的開發平臺,有不一樣的解決方案。如openresty中能夠經過火焰圖來分析,PHP中可使用xhprof來分析,或者藉助第三方的性能分析工具(通常是收費的,搜索APM便可)

一、應用級性能分析

針對整個應用級的性能分析,非本文的重點,能夠根據項目特性選擇或開發對應的工具來分析。

二、MySQL性能分析

(1)分析慢查詢日誌

可使用mysqldumpslow或者pt-query-digest來分析,具體可參考 mysql慢查詢日誌分析工具的使用

(2)經過show status和show engine innodb status等

show status能夠查看當前服務器的狀態:

查看服務器正在執行的命令

1
show status  like  'Com_%' ;

 查看和服務器之間來往的流量:

1
show status  like  'Bytes_%' ;

查看在查詢執行期間建立的臨時表和文件:

1
show status  like  'Created_%' ;

查看服務器運行時間:

1
show status  like  'uptime' ;

show engine innodb status:查看innodb這種存儲引擎的狀態

(3)經過show profile

經過show profile能夠查看mysql語句的性能損耗在哪些地方

第一步:要打開profiling(能夠先查看是否打開)

1
2
show variables  like  'profiling' ;
set  profiling = 1;

第二步:執行sql

第三步:查看執行的sql的性能損耗分析報告

查看最近的一條執行結果:

1
show profile;

查看打開profling後全部的結果:可是隻顯示每條的執行時間:

1
show profiles;

例如:

1
2
3
4
5
mysql> set  profling =1;
mysql> select  from  population  where  country= "cn" ;
mysql> select  from  population  where  city =  "beijing" ;
mysql> select  from  population  where  population>=1000000;
mysql>show profile;

查看結果:

show_profile.png

經過上圖能夠看出整個執行過程每一個階段消耗的時間。

經過show profiles查看:

show_profiles.png

經過上圖能夠查找每條執行語句消耗的時間

(4)經過show processlist

經過show processlist能夠查看目前有哪些線程進行運行,也能夠認爲這是查找當前mysql鏈接數的方法,對於出現too many connections的錯誤,是一個很好的排查方式。

1
show processlist

結果以下:

processlist.png

  •  Id:鏈接的編號

  • User:鏈接的用戶

  • Host:鏈接的主機

  • db:鏈接的數據庫名稱

  • Command:執行的命令

  • Time:鏈接持續時間

  • State:鏈接狀態

  • Info:具體執行的SQL語句

主要的State狀態:(這個狀態值有不少,這裏只列舉經常使用的幾個,能夠根據名稱很容易知道其含義)

  • Locked:被其餘查詢鎖定

  • Sending data:正在處理Select查詢的記錄,時時正在把結果發送給客戶端

  • Connect Out:複製從服務器正在鏈接主服務器

  • Updating:正在搜索匹配的記錄,而且修改這些數據

相關文章
相關標籤/搜索