1. 程式人生 > 其它 >mysql 時間計算_使用mysqladmin工具統計mysql當前的T/QPS

mysql 時間計算_使用mysqladmin工具統計mysql當前的T/QPS

技術標籤:mysql 時間計算mysql 統計mysql比較時間mysql能抗住多少tps

0c79591e8d8cc6db3955d9407cdf9d17.png

c6deb0809dff3cf0f9bf95ae60e95cac.gif//使用mysqladmin工具統計mysql當前的T/QPS//

mysqladmin是mysql官方的一款執行管理端的客戶端程式,可以利用它對MySQL資料庫服務進行操作,在MySQL5.5及以前的版本中,最常用的方法是用它來關閉mysql例項:

mysqladmin -uxxx -pxxx -Pxxx -hxxx shutdown

隨著mysql版本的升級,mysql5.7中已經可以直接使用shutdown命令來進行mysql服務的關閉了。mysql8.0版本中,可以使用restart命令來對mysql服務進行重啟,mysqladmin這個工具在日常的運維場景中用的越來越少。

今天來看如何使用mysqladmin這個工具來獲取一個mysql例項當前的TPS和QPS呢?要解決這個問題,首先得知道TPS和QPS的參考指標。在MySQL中,我們可以使用show global status命令來檢視mysql當前的指標情況,如下:

[email protected]:(none)13:37:50>>showglobalstatus;
+------------------------------------------+----------------+
|Variable_name|Value|
+------------------------------------------+----------------+
|Aborted_clients|85032|
|Aborted_connects|176|
|Binlog_cache_disk_use|3293|
|Binlog_cache_use|14631673326|
|Binlog_stmt_cache_disk_use|13|
|Binlog_stmt_cache_use|9948429|
|Bytes_received|19921975442457|
|Bytes_sent|13553543054684|
|Com_admin_commands|913630|
|Com_assign_to_keycache|0|
|Com_alter_db|0|
|Com_alter_db_upgrade|0|

有這麼幾個指標比較重要:

1、Questions:

MySQL伺服器執行的語句數,它僅包含客戶端傳送給伺服器的語句,不包含儲存過程中執行的語句,該引數不計算Com_ping,Com_statistics,Com_stmt_prepare,Com_stmt_close以及Com_stat_reset命令,但是包含show命令、dml命令。不包含主從複製的語句。

2、Queries:

伺服器執行的語句數,與Questions引數不同,他包含了在儲存過程中執行的語句以及內建的主從複製語句,它不計算Com_ping和Com_statistics命令

3、Com_xxx:

代表xxx語句已經執行的次數,每種型別都有一個狀態變數,舉例有Com_select,Com_insert,Com_delete,Com_update,Com_commit,Com_rollback等等。

通常情況下,計算TPS和QPS的方案有如下幾個:

方案一、如果考慮的是MySQL伺服器上執行的所有SQL,基於Queries來計算QPS,基於Com_commit和Com_rollback的代數和來計算TPS

方案二、如果僅僅考慮業務方通過命令列執行的所有SQL,基於Question來計算QPS,基於Com_commit和Com_rollback的代數和來計算TPS

方案三、基於Com_xxx的status來計算QPS和TPS

以下是使用mysqladmin的方案來看TPS和QPS的命令:

[root~]#./mysqladmin-r-i2-uroot-pxxxxxx-P4306--socket=/data/mysql_4306/tmp/mysql.sockext|awk'/Queries/{printf("QPS:%d\n",$4)}'
mysqladmin:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
QPS:55668415
QPS:1
QPS:34
QPS:32
QPS:108
QPS:6
QPS:7

[root~]#./mysqladmin-r-i2-uroot-pxxxxxx-P4306--socket=/data/mysql_4306/tmp/mysql.sockext|awk'/Com_commit/{printf("TPS:%d\n",$4)}'
mysqladmin:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
TPS:27449691
TPS:56
TPS:1
TPS:2
TPS:28

這裡針對引數-r和-i進行解釋,我們使用mysqladmin --help指令,過濾這兩個引數:

-r, --relative

Show difference between current and previous values whenused with -i. Currently only works with extended-status.

翻譯一下,就是現實當前和之前的值之間的差距,需要配合-i使用,再來看-i引數:

-i, --sleep=# Execute commands repeatedly with a sleep between.

也就是時間間隔

除此之外,後面還有一個ext的選項,看這個選項的解釋:

extended-status:

Gives an extended status message from the server #翻譯一下,就是給出更多的MySQL伺服器的狀態資訊

這樣上面的命令就很容易進行解釋了。使用-r引數來計算不同的狀態變數之間的差值,然後-i引數控制時間長度,設定為1代表每秒鐘的差值,ext代表輸出更多MySQL的狀態資訊。可以方便的計算TPS和QPS,不同的計算方法略有差異,可以根據不同場景,來計算更為準確的TPS和QPS值。

計算TPS和QPS的時候,有幾個標準,可以酌情替換:

1、com_commit不會記錄隱式提交的事務,所以如果開了隱式提交使用com_commit計算tps會不準。

2、如果資料庫中存在比較多的myisam表,則計算還是questions 比較合適。

3、如果資料庫中存在比較多的innodb表,則計算以com_*資料來源比較合適。

4、Questions 是記錄了從mysqld啟動以來所有的select,dml 次數包括show 命令的查詢的次數。這樣多少有失準確性,比如很多資料庫有監控系統在執行,每5秒對資料庫進行一次show 查詢來獲取當前資料庫的狀態,而這些查詢就被記錄到QPS,TPS統計中,造成一定的"資料汙染".

5、TPS在某些隱式提交開啟的情況下,可以使用Com_insert+Com_update+Com_delete來檢視。

最後,給出判斷mysql是否存活的一種方法:

[root~]#./mysqladmin-r-i2-uroot[email protected]-P4306--socket=/data/mysql_4306/tmp/mysql.sockping
mysqladmin:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
mysqldisalive
mysqldisalive
mysqldisalive

使用mysqladmin的ping命令來檢視mysql的存活情況。

隨著MySQL的升級,mysqladmin工具的使用頻率會越來越少,幾乎都是通過通過mysql工具來實現日常的需求,mysql8.0版本的mysqladmin工具在mysql5.7的基礎上略有調整,有興趣可以自己研究。

4cc7ff9bec4ea5f66902281bd074fdb7.png a1cef3550c059983b8e8f339c52e8807.png有幫助的話還希望點下再看哈