文章会有【原创】或者【转载】标示,部分来自Google Baidu的学习结果 {Java/PHP/Python/Ruby/Go}

MySQL监控【原创】  


MySQL监控

MySQL官方的 http://www.mysql.com/products/enterprise/monitor.html

Hyperic HQ http://www.innovatedigital.com/mysql-monitoring.html


一):mysqlreport 监控命令

mysqlreport http://imysql.com/node/335

http://hackmysql.com/mysqlreport


mysqlreport 的好处是可以快速的查看各种状态参数组,从而了解服务器的运行状态情况,而无需从 SHOW STATUS 的结果中人工计算。例如索引读取比率是个重要的参数,但是 SHOW STATUS 中并没有显示;它是一个推断值(key_reads key_read_requests 的比值)


wget http://hackmysql.com/scripts/mysqlreport-3.5.zip 最新版

该程序是perl perl-DBI模块 ubuntu 默认是安装好的


mysqlreport --user root --password 123456


apt-get install sendmail


mysqlreport --user root --password 123456 --email phper.yang@gmail.com


官方解释各项参数的含义:http://hackmysql.com/mysqlreportguide

工具使用的是:http://dev.mysql.com/doc/refman/5.0/en/server-status-variables.html

http://blog.csdn.net/qiuyepiaoling/article/details/6891212

http://translate.google.com.hk/translate?act=url&hl=zh-CN&ie=UTF8&prev=_t&sl=en&tl=zh-CN&u=http://hackmysql.com/mysqlreportguide


下面是报告说明

MySQL 5.5.28-0ubuntu0.1 uptime 2 4:37:2 Wed Nov 21 14:37:38 2012

//MySQL服务器的版本,MySQL服务器的正常运行时间,以及服务器的当前日期和时间。

__ Key _________________________________________________________________

/*

MySQL ServerBuffer分为Global BufferThread Buffer

计算 Server 至少需使用的总内存数量的方式为:

min_memory_needed = global_buffer + (thread_buffers * max_connection)

Buffer used:指出 MySQL “曾经” 耗用过的最大内存数量,因此目前 “正在使用” 的内存数量有可能少于(甚至大于)这个数字。MySQL 称此数值为 “High Water Mark” .

如果你的 MySQL 已经使用了 80~90% 以上的 Key Buffer,你就应该要调高 key_buffer_size.

Current表示 Key_blocks_unused 这个系统变量来决定目前 MySQL “正在使用” 的 Share Key Buffer 大小。

Write hit: 写命中

Read hit:读命中

*/

Buffer used 2.00k of 16.00M %Used: 0.01

Current 2.92M %Usage: 18.25

Write hit 0.00%

Read hit 75.00%

__ Questions ___________________________________________________________

/*

Total :MySQL 总共响应过多少查询,第二个字段则记录响应的频率(QPS)

DMS:数据操作语句

QC:查询缓存命中率

*/

Total 762 0.0/s

Com_ 417 0.0/s %Total: 54.72

COM_QUIT 227 0.0/s 29.79

DMS 158 0.0/s 20.73

-Unknown 44 0.0/s 5.77

QC Hits 4 0.0/s 0.52

Slow 10 s 0 0/s 0.00 %DMS: 0.00 Log: OFF

DMS 158 0.0/s 20.73

SELECT 158 0.0/s 20.73 100.00

REPLACE 0 0/s 0.00 0.00

DELETE 0 0/s 0.00 0.00

INSERT 0 0/s 0.00 0.00

UPDATE 0 0/s 0.00 0.00

Com_ 417 0.0/s 54.72

set_option 192 0.0/s 25.20

show_tables 113 0.0/s 14.83

admin_comma 40 0.0/s 5.25

__ SELECT and Sort _____________________________________________________

/*

MySQL的选择和排序状态变量的状态值

扫描和全连接。扫描显示多少SELECT语句导致了全表扫描,这是一个缓慢的过程。全连接扫描,它适用于加入一个多表查询的表像。这些表都加入了一个全表扫描的过程中,但在一个连接的情况下,表扫描更慢。因此,这两个值应尽可能的低,但为“低”在这里也没有真正的标准。服务器正在运行的非常好,有一个相对较高的比例扫描到的所有SELECT语句(第三列)。

*/

Scan 197 0.0/s %SELECT: 124.68

Range 0 0/s 0.00

Full join 0 0/s 0.00

Range check 0 0/s 0.00

Full rng join 0 0/s 0.00

Sort scan 0 0/s

Sort range 0 0/s

Sort mrg pass 0 0/s

__ Query Cache _________________________________________________________

/*

一,MySQL服务器版本支持查询缓存,2,启用查询缓存。

第一行表示多少的查询缓存存储器正在被使用。

Block Fragmnt 磁盘碎片。query_cache_min_res_unit变量的默认值是4KB。在大多数情况下,这应该是足够的。 ... 如果你有很多的小结果的查询,缺省的块大小可能会导致内存碎片,如通过大量的空闲块。碎片会强制查询缓存从缓存中由于缺乏内存修剪(删除)查询。在这种情况下,你应该减少query_cache_min_res_unit变量的值。空闲块的数量和查询,删除,由于修剪Qcache_free_blocksQcache_lowmem_prunes状态变量的值。这个值是一个百分比的QC块总块。的比例越高,越QC内存碎片。 10%至20%是平均水平。

*/

Memory usage 21.11k of 16.00M %Used: 0.13

Block Fragmnt 11.11%

Hits 4 0.0/s

Inserts 3 0.0/s

Insrt:Prune 3:1 0.0/s

Hit:Insert 1.33:1

__ Table Locks _________________________________________________________

/*

表锁

*/

Waited 0 0/s %Total: 0.00

Immediate 145 0.0/s

__ Tables ______________________________________________________________

/*


*/

Open 75 of 400 %Cache: 18.75

Opened 301 0.0/s

__ Connections _________________________________________________________

/*

mysql 的链接数如果所使用的连接的最大数目是接近100%(第一行,第三列中),max_connections的系统变量的可能需要增加。

*/

Max used 4 of 151 %Max: 2.65

Total 229 0.0/s

__ Created Temp ________________________________________________________

/*

系统变量tmp_table_size

*/

Disk table 59 0.0/s

Table 379 0.0/s Size: 16.0M

File 6 0.0/s

__ Threads _____________________________________________________________

/*

Threads_Created

*/

Running 1 of 3

Cached 1 of 8 %Hit: 98.25

Created 4 0.0/s

Slow 0 0/s

__ Aborted _____________________________________________________________

/*

thread_cache_size

*/

Clients 0 0/s

Connects 2 0.0/s

__ Bytes _______________________________________________________________

/*


*/

Sent 173.41k 0.9/s

Received 39.23k 0.2/s

__ InnoDB Buffer Pool __________________________________________________

/*


*/

Usage 18.03M of 127.98M %Used: 14.09

Read hit 91.53%

Pages

Free 7.04k %Total: 85.91

Data 1.15k 14.09 %Drty: 0.00

Misc 0 0.00

Latched 0 0.00

Reads 13.64k 0.1/s

From file 1.16k 0.0/s 8.47

Ahead Rnd 0 0/s

Ahead Sql 0/s

Writes 1 0.0/s

Flushes 1 0.0/s

Wait Free 0 0/s

__ InnoDB Lock _________________________________________________________

/*

Innodb

*/

Waits 0 0/s

Current 0

Time acquiring

Total 0 ms

Average 0 ms

Max 0 ms

__ InnoDB Data, Pages, Rows ____________________________________________

/*

InnoDB数据,页,行

*/

Data

Reads 1.35k 0.0/s

Writes 7 0.0/s

fsync 7 0.0/s

Pending

Reads 0

Writes 0

fsync 0

Pages

Created 0 0/s

Read 1.15k 0.0/s

Written 1 0.0/s

Rows

Deleted 0 0/s

Inserted 0 0/s

Read 42 0.0/s

Updated 0 0/s







































二):Mysql ststus:

如果系统有一个从复制服务器,这个值指明了从服务器的健康度.

mysql> show status like 'Slave_running';

当前客户端已连接的数量。这个值会少于预设的值,但你也能监视到这个值较大,这可保证客户端是处在活跃状态.

mysql> show status like 'Threads_connected';

如果数据库超负荷了,你将会得到一个正在(查询的语句持续)增长的数值。这个值也可以少于预先设定的值。这个值在很短的时间内超过限定值是没问题的。当Threads_running值超过预设值时并且该值在5秒内没有回落时,要同时监视其他的一些值.

mysql> show status like 'Threads_running';

客户端被异常中断的数值,即连接到MySQL服务器的客户端没有正常地断开或关闭。对于一些应用程序是没有影响的,但对于另一些应用程序可能你要跟踪该值,因为异常中断连接可能表明了一些应用程序有问题.

mysql> show status like 'Aborted_clients';

每秒钟获得的查询数量,也可以是全部查询的数量,根据你输入不同的命令会得到你想要的不同的值.

mysql> show status like 'Questions';

MySQL底层(low-level)数据库负载.

mysql> show status like 'Handler_%';

表缓存没有命中的数量。如果该值很大,你可能需要增加table_cache的数值。你可能想要这个值每秒打开的表数量少于12.

mysql> show status like 'Opened_tables';

没有主键(key)联合(Join)的执行。该值可能是零。这是捕获开发错误的好方法,因为一些这样的查询可能降低系统的性能.

mysql> show status like 'Select_full_join';

执行全表搜索查询的数量。在某些情况下是没问题的,但占总查询数量该比值应该是常量(即Select_scan/总查询数量商应该是常数)。如果你发现该值持续增长,说明需要优化,缺乏必要的索引或其他问题.

mysql> show status like 'Select_scan';

超过该值(--long-query-time)的查询数量,或没有使用索引查询数量。对于全部查询会有小的冲突。如果该值增长,表明系统有性能问题.

mysql> show status like 'Slow_queries';

该值应该是低的。较高的值可能意味着你需要增加thread_cache的数值,或你遇到了持续增加的连接,表明了潜在的问题.

mysql> show status like 'Threads_created';

得到已连接线程数量和正在运行线程的数量.

mysql> show processlist;

mysql> show full processlist;

QPS每秒QueryQPS = Questions(or Queries) / seconds

mysql> show /* global */ status like 'Question';

TPS(每秒事务量) TPS = (Com_commit + Com_rollback) / seconds

mysql> show status like 'Com_commit';

mysql> show status like 'Com_rollback';

key Buffer 命中率

key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%

key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%

mysql> show status like 'Key%';

InnoDB Buffer命中率

Innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%

mysql> show status like 'innodb_buffer_pool_read%';

Query Cache命中率

Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;

mysql> show status like 'Qcache%';

Table Cache状态量

mysql> show status like 'open%';

Thread Cache 命中率 Thread_cache_hits = (1 - Threads_created / connections ) * 100%

mysql> show status like 'Thread%';

mysql> show status like 'Connections';

锁定状态

mysql> show status like '%lock%';

复制延时量

mysql > show slave status

Tmp Table状况(临时表状况)

mysql > show status like 'Create_tmp%';

Binlog Cache使用状况

mysql > show status like 'Binlog_cache%';

Innodb_log_waits

mysql > show status like 'innodb_log_waits';