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调优