mysql是一款比較優秀的免費數據庫軟件,目前很多大企業都有用到,個人的一點學習筆記,如果有不足錯誤之處請指出
作爲技術人員,不僅要能夠正確使用mysql,還應該懂得一些mysql的基本監控。mysql的監控分爲兩部分:第一部分是硬件的監控,能夠用基本的linux命令查看cpu、內存、硬盤、網絡等的一些基本情況;第二部分,運用mysql的命令,監控我們的mysql是否正常運行,例如索引是否得當,sql語句是否執行太慢等。
1.1 linux上監控cpu,主要是監控cpu上進程的活動。
(1) top 命令提供系統信息的摘要和按任務的cpu密集度排序的系統進程的動態視圖
top
top - 16:57:21 up 161 days, 22:56, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 57 total, 1 running, 56 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 98.3%id, 1.3%wa, 0.3%hi, 0.0%si, 0.0%st
Mem: 2059580k total, 1945712k used, 113868k free, 247464k buffers
Swap: 786424k total, 9064k used, 777360k free, 662752k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 10348 592 556 S 0.0 0.0 0:12.17 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/0
4 root 10 -5 0 0 0 S 0.0 0.0 14:31.44 events/0
5 root 10 -5 0 0 0 S 0.0 0.0 0:23.32
這個命令中可以看到系統的概要信息,最上面的一行,下面是一些進程的這些進程依據cpu佔用時間的多少降序排列的,包含進程的id、使用者、優先級、cpu佔用百分比、以及進程的耗時等。
(2)進程處理的第二個常用命令,ps
# ps -A
PID TTY TIME CMD
1 ? 00:00:12 init
2 ? 00:00:00 migration/0
3 ? 00:00:00 ksoftirqd/0
4 ? 00:14:31 events/0
1797 ? 00:00:00 kmpathd/0
2430 tty2 00:00:00 mingetty
2431 tty3 00:00:00 mingetty
2432 tty4 00:00:00 mingetty
2433 tty5 00:00:00 mingetty
2434 tty6 00:00:00 mingetty
2584 tty1 00:00:00 mingetty
10560 ? 00:01:01 java
26570 ? 00:00:00 mysqld_safe
26690 ? 00:11:47 mysqld
28927 ? 00:00:00 sshd
28931 pts/1 00:00:00 bash
29663 pts/1 00:00:00 ps
輸出這些結果的一個用途是:通過它可以瞭解是否存在一些未知進程或者單個用戶是否運行了多個進程。如果有些腳本正在大量產生進程,也許是因爲這個腳本以不合理的方式建立的,甚至系統可能存在危險。
還可以通過 ps -A|grep mysqld 命令只檢索出mysqlld的進程。
1.2 linux上監控內存的使用情況
(1)free命令顯示可用的物理內存量,其中包括總物理內存量、已用物理內存量、可用物理內存量,還顯示了內核使用的內存緩存大小和緩衝區大小。它還顯示了交換分區的這些信息
free -t
total used free shared buffers cached
Mem: 2059580 1970552 89028 0 248168 680048
-/+ buffers/cache: 1042336 1017244
Swap: 786424 9064 777360
Total: 2846004 1979616 866388
(2)pmap命令提供一個進程所使用的內存的詳細映射。使用這個命令前,可以通過ps(例如ps -A|grep mysqld)命令先找到這個進程的id
pmap -d 26570
26570: /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql
Address Kbytes Mode Offset Device Mapping
0000000000400000 712 r-x-- 0000000000000000 0fd:00000 bash
00000000006b2000 40 rw--- 00000000000b2000 0fd:00000 bash
00000000006bc000 20 rw--- 00000000006bc000 000:00000 [ anon ]
00000000008bb000 32 rw--- 00000000000bb000 0fd:00000 bash
0000000013bd2000 132 rw--- 0000000013bd2000 000:00000 [ anon ]
000000397e000000 112 r-x-- 0000000000000000 0fd:00000 ld-2.5.so
000000397e21b000 4 r---- 000000000001b000 0fd:00000 ld-2.5.so
000000397e21c000 4 rw--- 000000000001c000 0fd:00000 ld-2.5.so
000000397e400000 1336 r-x-- 0000000000000000 0fd:00000 libc-2.5.so
000000397e54e000 2044 ----- 000000000014e000 0fd:00000 libc-2.5.so
000000397e74d000 16 r---- 000000000014d000 0fd:00000 libc-2.5.so
000000397e751000 4 rw--- 0000000000151000 0fd:00000 libc-2.5.so
000000397e752000 20 rw--- 000000397e752000 000:00000 [ anon ]
000000397ec00000 8 r-x-- 0000000000000000 0fd:00000 libdl-2.5.so
000000397ec02000 2048 ----- 0000000000002000 0fd:00000 libdl-2.5.so
000000397ee02000 4 r---- 0000000000002000 0fd:00000 libdl-2.5.so
000000397ee03000 4 rw--- 0000000000003000 0fd:00000 libdl-2.5.so
0000003981c00000 12 r-x-- 0000000000000000 0fd:00000 libtermcap.so.2.0.8
0000003981c03000 2044 ----- 0000000000003000 0fd:00000 libtermcap.so.2.0.8
0000003981e02000 4 rw--- 0000000000002000 0fd:00000 libtermcap.so.2.0.8
00002b6380331000 8 rw--- 00002b6380331000 000:00000 [ anon ]
00002b6380356000 12 rw--- 00002b6380356000 000:00000 [ anon ]
00007fff2fda8000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 16896K writeable/private: 364K shared: 0K
pmap命令的輸出結果顯示了所有內存地址的詳細信息,且在報告產生的瞬間顯示進程使用的內存的大小。它還顯示了啓動進程的命令,其中包括完整的路徑和參數,可以確定進程是從什麼地方開始的和進程使用了哪些選項。pmap命令可以用於診斷一個特殊的進程爲什麼消耗非常多的內存和診斷哪個部分消耗內存最多。最後一行顯示了有多少內存被映射到文件、私有內存空間量和與其他進程共享的內存量。
1.3 linux查看磁盤空間大小
df -h 可以查看磁盤空間的大小,易用空間,還剩餘空間等信息
du -h 可以查看當前文件夾下各個文件的大小
2 mysql服務器性能的監控,具體而言是設置和讀取系統變量及讀取狀態變量。show和set命令是僅有的兩個可以用於監控mysql服務器的工具
2.1 sql監控命令,所有的sql監控命令都是show命令的變體,他們顯示系統及其子系統的內部信息。
(1)show processlist顯示系統上運行的所有線程。這個命令與主操作系統上的進程命令類似。顯示信息如下,如果那些僵死進程,便可以通過kill命令將此進程殺死
show processlist;
+-------+------+-----------------------+-------------+---------+-------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+-----------------------+-------------+---------+-------+-------+------------------+
| 30877 | root | 192.168.200.201:2491 | xlgamepm | Sleep | 11019 | | NULL |
| 31209 | root | 192.168.233.181:51978 | xlngomp | Sleep | 16436 | | NULL |
| 31210 | root | 192.168.233.181:51979 | NULL | Sleep | 19736 | | NULL |
| 31738 | root | 192.168.233.181:53391 | xlngomp | Sleep | 25 | | NULL |
| 31776 | root | 192.168.200.116:3060 | xlngomp | Sleep | 9715 | | NULL |
| 31777 | root | 192.168.200.116:3061 | NULL | Sleep | 9983 | | NULL |
| 31958 | root | 10.11.9.30:47966 | xlngomp | Sleep | 59 | | NULL |
| 31959 | root | 10.11.9.30:47967 | xlngchannel | Sleep | 49 | | NULL |
| 31960 | root | 10.11.9.30:47968 | xlngchannel | Sleep | 32 | | NULL |
| 31968 | root | 192.168.233.181:55456 | xlgamepub | Sleep | 33 | | NULL |
| 31970 | root | 10.11.9.30:41233 | xunleilib3 | Sleep | 21 | | NULL |
| 31983 | root | 10.11.9.30:54211 | xlgamemk | Sleep | 40 | | NULL |
| 31987 | root | 10.11.9.30:54233 | xlgamemk | Sleep | 42 | | NULL |
| 31990 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+-------+------+-----------------------+-------------+---------+-------+-------+------------------+
(2)show plugins;顯示mysql所有已知插件信息。它顯示插件的名稱和當前狀態。mysql最新發行中的存儲引擎是以插件形式實現的。實用這些命令獲取當前可用插件及其狀態的快照
show plugins;
+------------+----------+----------------+---------+---------+
| Name | Status | Type | Library | License |
+------------+----------+----------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ndbcluster | DISABLED | STORAGE ENGINE | NULL | GPL |
+------------+----------+----------------+---------+---------+
(3)show index from <表名> 顯示指定表的索引基數統計信息,在優化程序中使用它評估連接選擇性(及索引類中非重複值)。這個命令有助於診斷性能低下的查詢,尤其是查詢是否使用了可用索引
對於mysql中show語句的詳細使用,可以參考我分享的下一篇mysql調優