MySQL實時性能監控工具doDBA tools

操做系統及MySQL數據庫的實時性能狀態數據尤其重要,特別是在有性能抖動的時候,這些實時的性能數據能夠快速幫助你定位系統或MySQL數據庫的性能瓶頸,就像你在Linux系統上使用「top,sar,iostat」等命令工具同樣,能夠馬上定位OS的性能瓶頸是在IO仍是CPU上,因此收集/展現這些性能數據就更爲重要,那都有哪些重要的實時性能狀態指標能夠反應出系統和MySQL數據庫的性能負載呢?mysql

目前在Linux跑MySQL是大多數互聯網公司的標配,以上圖片的性能數據指標項是我認爲在Linux,MySQL,InnoDB中較爲重要的實時狀態數據,然而在以上圖片Doing一欄其實更爲重要,之因此把它叫作Doing,是由於「processlist,engine innodb status,locks」等指標項才真正反映了MySQL此時正在作什麼。linux

 

咱們來對標Oracle數據庫看一下,在Oracle數據庫中提供了「AWR,ASH,SQL Monitor」等衆多診斷工具,能夠一眼望穿數據庫正在作什麼,甚至均可以知道在過去30天內任何一個時間區間的性能負載和當時數據庫正在作什麼。ios

在MySQL中雖然有像「zabbix,PMM」等優秀的監控工具,但它們只能反映數據庫歷史的一些性能數據曲線,例如,TPS高了,臨時表使用多了,有InnoDB Deadlocks,但對於MySQL當時的Doing,我只能說不夠直接。若是你在現場,你能夠抓到MySQL正在作什麼,可是,你總有不在現場的時候,若是問你昨天晚上數據庫的性能抖動是什麼緣由?怎樣快速重現現場找到引發抖動的緣由呢?git

答案是能夠使用「doDBA tools」,這是一款免費的基於控制檯的監控工具。github

doDBA tools是什麼?

doDBA tools是一個基於控制檯的遠程監控工具,它不須要在本地/遠程系統上安裝任何軟件,它能夠實時收集操做系統、MySQL、InnoDB的實時性能狀態數據,並能夠生成Doing日誌文件,來幫助你快速瞭解/優化系統及MySQL數據庫。golang

特色:sql

  • golang語言開發。
  • 可收集Linux、MySQL相關性能數據。
  • 可本地或遠程收集,可多臺。
  • 提供相似Linux top的mytop的功能。
  • 基於併發生成Doing日誌,還原現場。
  • 可記錄到日誌文件。

doDBA tools工做原理數據庫

遠程收集系統信息是經過ssh(需提供用戶名和密碼)的方式鏈接到遠程服務器上收集,收集的方法都是經過讀取Linux的proc下的等meminfo,diskstats,uptime,net,vmstat ,cpuinfo ,loadavg等文件,這和pmm,zabbix收集方式一致。服務器

遠程收集MySQL信息是經過 MySQL tcp鏈接到MySQL數據庫上收集,只須要授予鏈接用戶PROCESS、SELECT權限便可。併發

系統信息和MySQL信息的收集能夠分離,若是隻想收集系統信息,只須要提供系統用戶名密碼便可,若是隻收集MySQL能夠只提供MySQL鏈接信息,若是是rds用戶,能夠使用-rds參數,在使用mytop時會自動忽略系統信息的收集。

如何使用doDBA?

Github主頁:https://github.com/dblucyne/dodba_tools

1
2
3
wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA --no-check-certificate
wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA.conf --no-check-certificate
chmod +x doDBA

下載下來就能夠直接使用,不依賴於任何環境。但能夠在doDBA.conf配置文件中先把須要設置的信息填寫好。

1
2
3
4
5
6
7
8
9
{
  "Host":"",
  "Huser": "root",
  "Hport": "22",
  "Hpwd":  "",
  "Muser": "root",
  "Mpwd":  "123456",
  "Mport":"3306"
}

使用幫助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$ ./doDBA --help
Usage of ./doDBA:
-c string
configuration file. (default "doDBA.conf")
-h string
Connect to host/IP.
-hP string
Connect host port. (default "22")
-help
Display this help.
-hp string
Connect host password.
-hu string
Connect host user. (default "root")
-i duration
refresh interval in seconds. (default 1ns)
-innodb
Print innodb info.
-log
Print to file by day.
-mP string
Connect mysql port. (default "3306")
-mp string
Connect mysql password.
-mu string
Connect mysql user.
-myall
Print system and mysql info.
-mysql
Print mysql info.
-mytop
Print mysql prcesslist info , like top.
-nocolor
Print nocolor.
-rds
Ignore system info.
-sys
Print system info.
-t int
mysql trace on Threads_running. (default 50)

使用實例

1. 收集Linux性能數據

1
2
3
4
5
6
7
8
$ ./doDBA -h=127.0.0.1 -sys
 
DoDBA tools on host 127.0.0.1
---------+----load--avg----+-----cpu-usage-----+--swap--+----net----+-----------IO-----------
time     |   1m    5m   10m| usr  sys  iow  ide|  si  so| recv  send|   r/s   w/s  rb/s  wb/s
---------+-----------------+-------------------+--------+-----------+------------------------
19:23:51 | 1.35  0.72  0.41| 4.2  3.0  3.2 89.6|   0   0|16384.0P16384.0P|    48  2396  768K 69.2M
19:23:52 | 1.35  0.72  0.41| 4.8  2.9  3.1 89.2|   0   0|16384.0P16384.0P|    68  2502  1.1M 71.1M

 

2. 收集MySQL性能數據

1
2
3
4
5
6
7
8
9
$ ./doDBA -h=127.0.0.1 -mysql
 
DoDBA tools on host 127.0.0.1
---------+-------mysql-status-------+-----threads-----+-----slow-----+---bytes---+---------locks----------
time     |   QPS  TPS  ins  upd  del| run  con cre cac| sql  tmp Dtmp| recv  send| lockI lockW openT openF
---------+--------------------------+-----------------+--------------+-----------+------------------------
19:27:32 |    25   11    0   11    0|   3   99   0   6|   0    1    0|   5K   37K|    36     0   538    93
19:27:33 |    37  152   13    5  134|   3   99   0   6|   0    5    1|  35K  396K|   216     0   538    93
19:27:34 |    39   60    8    8   44|   4   99   0   6|   0    5    0|  26K  220K|   115     0   538    93

 

3. 收集InnoDB性能數據

 

1
2
3
4
5
6
7
8
9
$ ./doDBA -h=127.0.0.1 -innodb
 
DoDBA tools on host 127.0.0.1
---------+------innodb--rows-----+---------innodb--pages--------+-------innodb--data-------+--innodb-log--
time     |    read  ins  upd  del|    data    free   dirty flush|reads writes  read written|fsyncs written
---------+-----------------------+------------------------------+--------------------------+--------------
19:30:00 |    4741  458   32    0|  350602    8195   18869   125|    0    141    0K    4.0M|     1     66K
19:30:01 |     106  521    3    0|  350602    8195   18858   137|    0    151    0K    4.4M|     1     72K
19:30:02 |    7982  406   40    2|  350603    8194   18860   160|    0    202    0K    5.1M|     3     84K

 

4. 收集MySQL及Linux性能數據

1
$ ./doDBA -h 127.0.0.1 -myall

 

5. mytop –like linux top

1
2
3
4
5
6
7
8
9
10
11
$ ./doDBA -h 127.0.0.1 -mytop
 
DoDBA tools -19:32:36 on host 127.0.0.1 UP 61 days  Load: 0.64 0.75 0.63
CPU: 1.99% user, 2.84% sys, 0.00% nice, 0.28% iowait, 94.89% idle
Mem:  23.3G total, 23.0G used, 317.6M free, 0K buffers
Swap:  24.0G total, 0K used, 24.0G free, 13.2G Cached
MySQL: 16 QPS, 20 TPS, 0 slowSQL, 2 run
 
         ID          USER      IP/HOST          DB     Time           State                            SQL
         --          ----      -------          --     ----           -----                            ---
    2495440        zabbix    127.0.0.1                    0            init          show full processlist

 

6. 藉助Shell收集多臺

1
2
3
$ cat ip.txt
10.1.x.x1
10.1.x.x2

Shell

1
2
3
4
5
$ cat ip.txt |
while read ip; do
echo $ip;
./doDBA -h=$ip -mysql -log </dev/null &
done

 

7. 收集到日誌文件

1
2
3
4
5
6
7
8
9
$ ./doDBA -h=127.0.0.1 -mysql -log
 
$ cat 127001_dodba_mysql_20161219.log
DoDBA tools on host 127.0.0.1
---------+-------mysql-status-------+-----threads-----+-----slow-----+---bytes---+---------locks----------
time     |   QPS  TPS  ins  upd  del| run  con cre cac| sql  tmp Dtmp| recv  send| lockI lockW openT openF
---------+--------------------------+-----------------+--------------+-----------+------------------------
19:35:30 |    23   15   10    5    0|   3   98   0   7|   0    2    1|   9K  8.0M|    43     0   538    95
19:35:31 |    53   19    5   14    0|   2   98   0   7|   0    3    0|  38K  1.7M|    86     0   538    93

 

8. 開啓Doing功能

使用【-t】參數能夠基於Threads_running的數量設置閾值,設置後可記錄「processlist,engine innodb status」信息到dodba.log日誌中,–重現現場。

1
$ ./doDBA -h=127.0.0.1 -mysql -t=3

 

9. 查看Doing日誌

1
2
3
4
5
6
7
8
9
10
$ tail -f dodba.log
2016/12/19 19:51:52 ----------------processlist---------------
ID:2314306
User:zabbix
Host:localhost
DB:zabbix
Command:Query
Time:0
State:update
Info:insert into history_uint (itemid,clock,ns,value) values (35632,1482148312,240404292,274)
相關文章
相關標籤/搜索