1. 程式人生 > >Mysql 監控性能狀態 QPS/TPS【轉】

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

第一次 admin running 下載地址 次數 等待 線程 代碼 beijing

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;
}

}

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