Mysql 監控性能狀態 QPS/TPS【轉】


QPS(Query per second) 每秒查詢量

TPS(Transaction per second)每秒事務量

這是Mysql的兩個重要性能指標,需要經常查看,和Mysql基准測試的結果對比,如果值過高,就要盡快處理了

計算方法

 

01

QPS


QPS = Queries / Seconds

Queries 是系統狀態值--總查詢次數,可以通過 show status 查詢得出



Seconds 是監控的時間區間,單位為秒

例如采樣10秒內的查詢次數,那么先查詢一次Queries值(Q1),等待10秒,再查詢一次Queries值(Q2)

QPS = (Q2 - Q1) / 10

02

TPS


mysql中沒有直接的事務計數器,需要通過事務提交數事務回滾數來計算

TPS = (Com_commit + Com_rollback) / Seconds

Com_commit、Com_rollback 的值通過 show status 查詢得出





計算思路與 QPS 相似


統計腳本


上面是QPS/TPS的統計思路,實際操作中如果用手動方式計算很不方便,最好用程序實現

mysqladmin 的 extended-status 指令和 show status 差不多,可以查看mysql的狀態值,如

# mysqladmin -uroot -p'密碼' extended-status



其中含有我們需要的狀態值,那么就可以分析extended-status的結果信息,然后計算,最后顯示出來

統計目標


每隔一秒統計一次 QPS、TPS

mysql 還有兩個信息比較重要:

Threads_connected 當前連接的線程的個數
Threads_running 運行狀態的線程的個數

這兩個值也在extended-status的結果中,所以可以一道顯示出來

最后統計結果信息包括:

 

QPS、TPS、Threads_connected、Threads_running

先看下統計結果的展現形式



基本思路


每秒鍾運行一次extended-status,使用awk分析結果值,從中篩選出我們需要的值:

Queries、Com_commit、Com_rollback、Threads_connected、Threads_running

QPS = Queries值 - 上一次的值

TPS = (Com_commit值 - 上一次的值) + (Com_rollback值 - 上一次的值)

因為是1秒鍾統計一次,所以計算QPS/TPS時就不用除以秒數了

腳本代碼




代碼分析

 

awk是代碼中的重點,mysqladmin 的執行結果通過管道傳給 awk 進行分析

'BEGIN{flag=0;
print "";
print "QPS   TPS    Threads_con Threads_run ";
print "------------------------------------- "}

這部分是初始設置,打印出表頭

flag=0 是設置一個標識位,后面用到

$2 ~ /Queries$/  {q=$4-lq;lq=$4;}

其中 $2 $4 代表某列的內容

awk是按行分析並按空格分割的,例如行信息為:

| Queries | 213263713 |

按空格分割后得到5列:

'|', 'Queries', '|', '213263713', '|'

$2 : Queries

$4 : 213263713

那么這句的意思就是:

當第2列的值匹配‘Queries’時,

變量q = 第4列的值 - 變量lq的值,

變量lq = 第4列的值

變量q 就是 QPS值,用這一次的 Queries值 減去 上一次的值

$2 ~ /Com_commit$/   {c=$4-lc;lc=$4;}
$2 ~ /Com_rollback$/   {r=$4-lr;lr=$4;}
$2 ~ /Threads_connected$/  {tc=$4;}
$2 ~ /Threads_running$/    {tr=$4;

這幾句的意思與上一句類似

if(flag==0){
    flag=1;
}

這里用到了flag這個標識位,意思是對第一次的分析結果什么都不做,因為這句

{q=$4-lq;lq=$4;}

q=$4-lq; 中的 lq 在第一次分析中還沒有值

else {
    printf "%-6d %-8d %-10d %d \n", q,c+r,tc,tr;
}

這部分就是打印統計結果信息


下面是腳本代碼下載地址,有興趣的話可以下來實驗一下

http://devdd.oss-cn-beijing.aliyuncs.com/mysql_QPS_TPS.txt

#!/bin/bash
mysqladmin -uroot -p'瀵嗙爜' extended-status -i1|awk \
'BEGIN{flag=0;
print "";
print "QPS   TPS    Threads_con Threads_run ";
print "------------------------------------- "}
$2 ~ /Queries$/            {q=$4-lq;lq=$4;}
$2 ~ /Com_commit$/         {c=$4-lc;lc=$4;}
$2 ~ /Com_rollback$/       {r=$4-lr;lr=$4;}
$2 ~ /Threads_connected$/  {tc=$4;}
$2 ~ /Threads_running$/    {tr=$4;

if(flag==0){
    flag=1; count=0
}else {
    printf "%-6d %-8d %-10d %d \n", q,c+r,tc,tr;
}

}'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM