MySQL的瑞士军刀_MySQL

WBOY
リリース: 2016-06-01 13:01:30
オリジナル
1440 人が閲覧しました

MySQL的瑞士军刀

 

这里主要讲mysql运维中的一些主要工具,这些工具可能大家都用过,特别是系统管理员或者做linux服务器维护的同学可能都知道这些小工具,这里讲得会比较多一些,除了系统监控的小工具,还包括一些mysql的工具,甚至深入一些的工具也会讲到,重点是大家听完了后,一定要去自己动手实践一下,这样才有意义,熟能生巧。

 

光听说过是不行的,还得都要去实践,实践出真知,面试过很多朋友,问他们他们都说知道用过,但是细问下他们都关注哪些重要的点,他们就说得比较模糊,这样是不行的,这样会被别人一种感觉,就是你不专业,我们做技术的,一定要专业,特别是这些工具,要在实践过程中形成自己独有的看法和理解。

 

1,大概会讲述的内容

vmstat/iostat/mpstat/ifstat/dstat : stat类,查看系统状况,

pstack:此命令可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。对内核和源码有研究的人来说,这个还是相对比较容易理解的。

 

测试的时候使用下面来模拟product状况,压力测试:

sysbench --test=fileio --file-total-size=10G--file-test-mode=rndrw --max-time=3600 --max-requests=0 run

 

tcprstat:tcprstat是免费开源tcp分析工具,通过监控网络传输来统计分析请求的响应时间

 

tcpdump:抓包工具

perf:从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找,用来进行软件性能分析。

pt-stalk:出现问题的时候收集mysql的用于诊断的数据

orzdba:Perl脚本,用于对Linux主机和MySQL相关指标进行实时监控。

2,vmstat工具

通过yum方式安装sysstat(yum -y install sysstat),就可以使用vmstat了,vmstat:搜集内存、进程,paging等信息。

主要是看虚拟内存方面的,要详细的看虚拟内存的话,用vmstat是一个不错的选择。

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如下所示,间隔2秒,采样3次:

[root@data01 ~]# vmstat 2 3

procs-----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 1434092 83364 133292 207336 0 2 9 25 33 47 0 099 1 0

1 0434092 82604 133300 208076 0 0 200 2064 1833 3695 1 17 72 9 0

2 0434092 80876 133300 209512 0 0 0 302 193 64 2 12 82 4 0

[root@data01~]#

参数介绍:

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

PS:看得比较多的参数依次是,最基本的(swpd、free、buff、cache)、内存读写(si、so)、cpu方面(in、cs);cs需要经常关注,它是上下文切换的,尤其是我们单机线程数非常多的时候,就会产生大量的上下文切换,而cpu去不断的上下文切换本身就非常消耗资源,比如你的执行任务被频繁切换来切换去没有实际被执行。

 

3,iostat工具

和vmstat一样,通过yum方式安装sysstat(yum -y install sysstat),就可以使用它了。我们主要是看io状况的。

3.1 iostat参数说明

-c 仅显示CPU统计信息.与-d选项互斥.

 

3.2 iostat输出项目说明

<strong>Blk_read:  读入块的当总数.
 Blk_wrtn:  写入块的总数
kB_read/s:  每秒从驱动器读入的数据量,单位为K.
kB_wrtn/s:  每秒向驱动器写入的数据量,单位为K.
 kB_read:  读入的数据总量,单位为K.
 kB_wrtn:  写入的数据总量,单位为K.
 rrqm/s:  将读入请求合并后,每秒发送到设备的读入请求数.
wrqm/s:  将写入请求合并后,每秒发送到设备的写入请求数.
 r/s:  每秒发送到设备的读入请求数.
w/s:  每秒发送到设备的写入请求数.
 rsec/s:  每秒从设备读入的扇区数.
wsec/s:  每秒向设备写入的扇区数.
 rkB/s:  每秒从设备读入的数据量,单位为K.
wkB/s:  每秒向设备写入的数据量,单位为K.
avgrq-sz:  发送到设备的请求的平均大小,单位是扇区.
avgqu-sz:  发送到设备的请求的平均队列长度.
await:  I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒.
svctm:  发送到设备的I/O请求的平均执行时间.单位是毫秒.
%util:  在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率.当这个值接近100%时,表示设备带宽已经占满.</strong>
ログイン後にコピー

3.3 iostat实例

<strong># iostat: 显示一条统计记录,包括所有的CPU和设备.
# iostat -d 2: 每隔2秒,显示一次设备统计信息.
# iostat -d 2 6: 每隔2秒,显示一次设备统计信息.总共输出6次.
# iostat -x sda1 sda2 2 6: 每隔2秒显示一次hda,hdb两个设备的扩展统计信息,共输出6次.
# iostat -p sda1 2 6: 每隔2秒显示一次sda及上面所有分区的统计信息,共输出6次.</strong>
ログイン後にコピー

PS:主要查看avgqu-sz、await、svctm

4,mpstat工具

另一个用于获取 CPU 相关统计信息的有用的命令是 mpstat。

通过yum方式安装sysstat(yum -y install sysstat),就可以使用mpstat了

4.1 样例

<strong> [root@data01 ~]# mpstat  -P ALL 2 2</strong>
ログイン後にコピー
<strong>Linux 2.6.32-220.el6.x86_64 (data01)     2015年04月03日    _x86_64_  (2 CPU)</strong>
ログイン後にコピー
<strong> </strong>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
<strong>23时11分43秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle</strong>
ログイン後にコピー
<strong>23时11分45秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong>23时11分45秒    0    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.50</strong>
ログイン後にコピー
<strong>23时11分45秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong> </strong>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
<strong>23时11分45秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle</strong>
ログイン後にコピー
<strong>23时11分47秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong>23时11分47秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong>23时11分47秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong> </strong>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
<strong>平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle</strong>
ログイン後にコピー
<strong>平均时间:  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong>平均时间:    0    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75</strong>
ログイン後にコピー
<strong>平均时间:    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00</strong>
ログイン後にコピー
<strong>[root@data01 ~]#</strong>
ログイン後にコピー

它显示了系统中 CPU 的各种统计信息。–P ALL 选项指示该命令显示所有 CPU 的统计信息,

而不只是特定 CPU 的统计信息。参数 2 2 指示该命令每隔 2 秒运行一次,共运行 2 次。

以上输出首先显示了所有 CPU 的合计指标,然后显示了每个 CPU 各自的指标。最后,在结尾处显示所有 CPU 的平均值。

4.2 各参数的意义

<strong> %user     表示处理用户进程所使用 CPU 的百分比。用户进程是用于应用程序(如 Oracle 数据库)的非内核进程。     </strong>
ログイン後にコピー
<strong>%nice     表示使用 nice 命令对进程进行降级时 CPU 的百分比。在之前的部分中已经对 nice 命令进行了介绍。简单来说,nice 命令更改进程的优先级。    </strong>
ログイン後にコピー
<strong>%system   表示内核进程使用的 CPU 百分比    </strong>
ログイン後にコピー
<strong>%iowait   表示等待进行 I/O 所使用的 CPU 时间百分比    </strong>
ログイン後にコピー
<strong>%irq      表示用于处理系统中断的 CPU 百分比    </strong>
ログイン後にコピー
<strong>%soft     表示用于软件中断的 CPU 百分比    </strong>
ログイン後にコピー
<strong>%idle     显示 CPU 的空闲时间    </strong>
ログイン後にコピー
<strong>%intr/s   显示每秒 CPU 接收的中断总数</strong>
ログイン後にコピー

当您拥有前面所述的 vmstat 时,您可能想知道 mpstat 命令的作用。差别很大:mpstat 可以显示每个处理器的统计,而 vmstat 显示所有处理器的统计。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。

PS:针对 Oracle 用户的用法

与 vmstat 相似,mpstat 命令还产生与 CPU 有关的统计信息,因此所有与CPU 问题有关的讨论也都适用于 mpstat。

当您看到较低的 %idle 数字时,您知道出现了 CPU 不足的问题。当您看到较高的 %iowait 数字时,

您知道在当前负载下 I/O 子系统出现了某些问题。该信息对于解决 Oracle 数据库性能问题非常方便。

5,ifstat工具

查看网络流量的小工具

5.1下载安装

下载 ifstat安装包

yum install gcc* -y #预先安装好gcc组件

tar -xvf ifstat-1.1.tar.gz

cd ifstat-1.1

./configure

make

make install

5.2 测试查看检测结果

[root@data01 ifstat-1.1]# ifstat -t -i eth1-T

Time eth1 Total

HH:MM:SS KB/s in KB/s out KB/s in KB/s out

23:37:38 0.12 0.30 0.12 0.30

23:37:39 0.06 0.15 0.06 0.15

23:37:40 0.06 0.15 0.06 0.15

23:37:41 0.06 0.15 0.06 0.15

6,dstat工具

dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是, dstat也可以收集指定的性能资源, 譬如 dstat-c 即显示CPU的使用情况.

运行dstat,如下所示

<strong> [root@data01 ifstat-1.1]# dstat 3</strong>
ログイン後にコピー
<strong>----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--</strong>
ログイン後にコピー
<strong>usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw </strong>
ログイン後にコピー
<strong>  0   0  99   0   0   0|  24k 9603B|   0     0 | 254B 4410B|  38    48 </strong>
ログイン後にコピー
<strong>  0   0 100   0   0   0|   0  5461B|  80B  525B|   0     0 |  50    53 </strong>
ログイン後にコピー
<strong>  0   0 100   0   0   0|   0     0 |  70B  359B|   0     0 |  33    44 </strong>
ログイン後にコピー
<strong>  0   0 100   0   0   0|   0    21k| 146B  341B|   0     0 |  61    63 </strong>
ログイン後にコピー
<strong>  0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  31    44 ^C</strong>
ログイン後にコピー
<strong>[root@data01 ifstat-1.1]#</strong>
ログイン後にコピー

下面对显示出来的部分信息作一些说明:

1. cpu:hiq,siq分别为硬中断和软中断次数。

2. system:int,csw分别为系统的中断次数(interrupt)和上下文切换(context switch)

其他的都很好理解。

通过dstat --help可以看到常用参数选项

PS:这个软件和vmstat很像, 不过和vmstat相比好像少了io部份的显示, dstat只能显示磁盘的吞吐量而不是显示负载情况, dstat和几乎所有监控软件一样, 只能对整个系统进行监控而不能对某一个进程或某一个程序进行深入分析. 我常使用的参数是dstat -cdlmnpsy, 做个别名链接alias dstat='dstat -cdlmnpsy'

7,tcprstat工具

检查mysql偶发事件以及性能异常的工具,抓住当时的现场细节状况。

7.1 Bzr方式安装下载

bzr branch lp:tcprstat

tar czvf tcprstat.tar.gz ./tcprstat

cd tcprstat/

chmod +x bootstrap

安装 automake 和 autoconf

yum list|grep automake

yum list|grep autoconf

yum -y install automake

安装成功后,再重新执行bootstrap

./bootstrap

然后编译

./configure

make

7.2 集成方式下载

# 下载地址,wget下载失败,可以在windows下网页下载,然后secure上传到mysql服务器上面

7.3 实例

./tcprstat -p 3306 -t 1 -n 5

-p监控的端口号,-t 间隔时间,-n运行次数

<strong> [root@wgq_idc_dbm_3_61 ~]# chmod a+x tcprstat </strong>
ログイン後にコピー
<strong>[root@wgq_idc_dbm_3_61 ~]# ./tcprstat -p 3306 -t 1 -n 5</strong>
ログイン後にコピー
<strong>timestamp count     max       min       avg       med       stddev    95_max    95_avg    95_std    99_max    99_avg          99_std</strong>
ログイン後にコピー
<strong>1428142214          41        548646    28        79647     145       173376    418497    44645     125122    521857          67922     158663</strong>
ログイン後にコピー
<strong>1428142215          25        422953    22        54943     120       118359    201027    25393     65142     366568          39609     93352</strong>
ログイン後にコピー
<strong>1428142216          5         409520    193       155644    223       190817    368069    92175     159287    368069          92175     159287</strong>
ログイン後にコピー
<strong>1428142217          24        881981    45        52977     130       188839    1968      377       556       381189          16934     77661</strong>
ログイン後にコピー
<strong>1428142218          15        356049    49        24126     133       88711     1989      417       549       1989          417       549</strong>
ログイン後にコピー
<strong>[root@wgq_idc_dbm_3_61 ~]#</strong>
ログイン後にコピー

7.4,实际使用案例

如果用户觉得我们的mysql数据库响应时间很慢,查询也突然变慢,我们怎么办,方法肯定有许多种,这里可以选择用tcprstat,我们可以将./tcprstat -l 192.168.52.129 -p 3306 -t 1 -n 0 发给用户,让他在他的应用服务器上做一次啊tcprstat检测看下其中的响应时间是怎么样的,我们就可以知道具体原因是什么了。

8,tcpdump

抓包工具,可以截取到客户端对mysql数据库服务器的所有请求操作。

8.1简介

系统自带的工具包,如果没有的话,就使用yum安装(yum install –y tcpdump)用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

通过tcpdump查看参数信息:

[root@data02 ~]# tcpdump --help

tcpdump version 4.1-PRE-CVS_2010_08_20

libpcap version 1.0.0

Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [-B size ] [ -c count ]

[-C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]

[-i interface ] [ -M secret ] [ -r file ]

[-s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]

[-y datalinktype ] [ -z command ] [ -Z user ]

[expression ]

[root@data02 ~]#

tcpdump -s 0 -l -w - dst xxx.xxx.xxx.xxxand port 3306 |strings

8.2 使用

通过如下命令来监控192.168.52.129服务器mysql当前所执行的一切操作

tcpdump -i eth1 -s 0 -l -w - dst192.168.52.129 and port 3306 |strings,如下所示:

<strong> [root@data01 ~]# tcpdump -i eth1 -s 0 -l -w - dst 192.168.52.129 and port 3306 |strings</strong>
ログイン後にコピー
<strong>tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes</strong>
ログイン後にコピー
<strong>V68@</strong>
ログイン後にコピー
<strong>select * from user_db.UC_USER</strong>
ログイン後にコピー
<strong>469@</strong>
ログイン後にコピー
<strong>5.6.12-log</strong>
ログイン後にコピー
<strong>9?o3MiL}</strong>
ログイン後にコピー
<strong>UmH^~"(APNw-</strong>
ログイン後にコピー
<strong>mysql_native_password</strong>
ログイン後にコピー
<strong>#28000Access denied for user 'repl'@'192.168.52.129' (using password: YES)</strong>
ログイン後にコピー
<strong>J6:@</strong>
ログイン後にコピー
<strong>SELECT DATABASE()</strong>
ログイン後にコピー
<strong>46;@</strong>
ログイン後にコピー
<strong>=6<@</strong>
ログイン後にコピー
<strong>test</strong>
ログイン後にコピー
<strong>46=@</strong>
ログイン後にコピー
<strong> UfN</strong>
ログイン後にコピー
<strong>D6>@</strong>
ログイン後にコピー
<strong>show tables</strong>
ログイン後にコピー
<strong>46?@</strong>
ログイン後にコピー
<strong>S6@@</strong>
ログイン後にコピー
<strong>select * from table_myisam"</strong>
ログイン後にコピー
<strong> UPs</strong>
ログイン後にコピー
<strong>46A@</strong>
ログイン後にコピー

从中可以看出tcpdump可以暴露出mysql客户端连接mysql数据库的所有包的信息。Tcpdump可以做审计,把下游客户端对mysql数据库所做的所有操作都记录统计汇总出来有助于我们分析问题,tcpdump产生的信息比较多,大家可以自己做扩展过滤出自己需要的信息记录。

9,perf工具

直接yum安装即可:yum install perf –y

Perf是一个包含22种子工具的工具集,以下是最常用的5种:

perf list:显示性能事件

perf top:实时显示性能统计信息

大多数是在内核层面

perf stat:分析整体性能

perf record:分析一段时间内的性能

perf report:根据record记录,统计报告

10,pt-stalk

安装:

tar -xvf percona-toolkit_2.2.13.tar.gz

cdpercona-toolkit-2.2.13

perl Makefile.PL

make

make test

make install

使用

pt-stalk--collect-tcpdump --function status --variable Threads_connected --threshold 2500--daemonize --user=root --host=127.0.0.1 --port=3306

主要是用来抓现场的,比如:MySQL Server 性能波动出现的频率很低、例如、几天一次,MySQL Server 性能波动出现的机率很快、例如、几秒闪过,我想输出一些信息,触发这些阈值的时候,就打印一下,那我们有了抓住这个现场之后,我们就可以知道到底是做了什么操作导致这些性能波动的尖刀出现了。

--daemonize:在后台运行。

pt-stalk --collect-tcpdump --functionstatus --variable handler_connected --threshold 3 --user=root --host=127.0.0.1--port=3306

<strong> [root@data01 percona-toolkit-2.2.13]# pt-stalk --collect-tcpdump --function status --variable handler_connected --threshold 3 --user=root --host=127.0.0.1 --port=3306</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_21 Starting /usr/local/bin/pt-stalk --function=status --variable=handler_connected --threshold=3 --match= --cycles=5 --interval=1 --iterations= --run-time=30 --sleep=300 --dest=/var/lib/pt-stalk --prefix= --notify-by-email= --log=/var/log/pt-stalk.log --pid=/var/run/pt-stalk.pid --plugin=</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_21 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_22 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_23 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_24 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_25 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_26 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_27 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_28 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー
<strong>2015_04_04_19_01_29 Detected value is empty; something failed?  Trigger exit status: 0</strong>
ログイン後にコピー

当你发现mysql服务器性能有波动,遇到性能问题遇到偶发事件了,但是你又无法查出这段时间mysql做了什么,你可以使用pt-stalk来抓取这些现场的所有行为,来帮助你分析查询。

11,orzdba

先需要安装svn客户端以及tcprstat,yum安装即可:yum install -y svn;yum install -y tcprstat;

然后下载orzdba包:

cd trunk/

chmod a+x orzdba

大概包括Sys、mysql、innodb、lazy 4个方面的,是一个集大成者,是淘宝的一个工程师写的,它把系统的,我们需要记住lazy就足够用了,用lazy就基本可以满足我们大部分的应用需要了。Lazy命令如下:

./orzdba -lazy -rt -S/usr/local/mysql/mysql.sock

<strong> -------- -----load-avg---- ---cpu-usage--- ---swap---                     -QPS- -TPS-         -Hit%- --------tcprstat(us)-------- </strong>
ログイン後にコピー
<strong>  time  |  1m    5m   15m |usr sys idl iow|   si   so|  ins   upd   del    sel   iud|     lor    hit|  count    avg 95-avg 99-avg|</strong>
ログイン後にコピー
<strong>21:00:17| 0.32  0.28  0.37|  0   0  99   0|    0    0|    0     0     0      0     0|       0 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:18| 0.32  0.28  0.37|  2  24  43  30|    0  128|  903     0     0      1   903|    4774 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:19| 0.32  0.28  0.37|  2  21  49  27|    0    0|  742     0     0      1   742|    3922 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:20| 0.32  0.28  0.37|  3  28  53  17|    0    0| 1108     0     0      1  1108|    5861 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:21| 0.32  0.28  0.37|  3  29  52  17|    0    0| 1037     0     0      1  1037|    5492 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:22| 0.29  0.28  0.37|  3  29  52  16|    0    0| 1003     0     0      1  1003|    5276 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:23| 0.29  0.28  0.37|  3  28  54  15|    8    0|  744     0     0      2   744|    5097 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:24| 0.29  0.28  0.37|  3  28  51  19|    0   18|  777     0     0      1   777|    4222 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:25| 0.29  0.28  0.37|  3  30  51  16|    0    0|  997     0     0      1   997|    5291 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:00:27| 0.27  0.27  0.36|  3  29  52  17|    0    0| 1160     0     0      1  1160|    6121 100.00|      0      0      0      0|</strong>
ログイン後にコピー
<strong>^C</strong>
ログイン後にコピー
ログイン後にコピー
<strong>Exit Now...</strong>
ログイン後にコピー
ログイン後にコピー
<strong>[root@data01 trunk]#</strong>
ログイン後にコピー

这个时候,如果你还想看更详细的信息,可以不用lazy,可以用innodb的参数来,可以就看到buffer pool里面的data、free、dirty等,非常全的信息,大家可以作为非常重要的参考,命令如下:

./orzdba -innodb -rt -S/usr/local/mysql/mysql.sock

<strong> -------- ---innodb bp pages status-- -----innodb data status---- --innodb log--   his --log(byte)--  read ---query--- --------tcprstat(us)-------- </strong>
ログイン後にコピー
<strong>  time  |   data   free  dirty flush| reads writes  read written|fsyncs written| list uflush  uckpt  view inside  que|  count    avg 95-avg 99-avg|</strong>
ログイン後にコピー
<strong>21:01:13|      0      0      0     0|     0      0      0      0|     0       0|    0      0      0     0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:14|   4245  12137    815     0|     0     46      0    55k|     0     55k|  593      0   11.6m    0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:15|   4248  12134    818     0|     0    104      0   131k|     0    131k|  593      0   11.7m    0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:16|   4251  12131    821     0|     0    129      0   153k|     0    153k|  593     68   11.8m    0     1     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:17|   4256  12126    826     0|     0    145      0   182k|     0    182k|  593      0   11.9m    0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:19|   4258  12124    828     0|     0     85      0   110k|     0    110k|  593      0   11.9m    0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:20|   4261  12121    831     0|     0     71      0    91k|     0     89k|  593    576   12.0m    0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>21:01:21|   4265  12117    841     0|     0    161      0   203k|     0    203k|  597     17   12.1m    0     0     0|      0      0      0      0|</strong>
ログイン後にコピー
<strong>^C</strong>
ログイン後にコピー
ログイン後にコピー
<strong>Exit Now...</strong>
ログイン後にコピー
ログイン後にコピー

其它监控项:

网络:./orzdba -n eth1 -rt -S /usr/local/mysql/mysql.sock

Mysql:./orzdba -mysql -rt-S /usr/local/mysql/mysql.sock

所以说orzdba基本监控了所有的mysql状态以及系统状态了,大家可以考虑在线上使用orzdba来监控线上mysql库

12,orztop

实时查看当前的processlist和full processlist;

可以查看mysql数据库实时运行的sql状况的工具,以前苦于通过show processlist/show full processlist抓取sql的同志们现在只要盯一盯屏幕就可以了,非常的方便,

安装:先进入cpan窗口,安装dbi、dbd,然后退出解压缩orztop.rar包即可使用

命令如下:

orztop -h=192.168.52.129 -P=3006 -u=orztop-p=orztop -t=1

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート