【本文参考自
http://hackmysql.com/mysqlreportguide】
在 mysql 中,我们可以使用 以下命令来获取当前数据库的实时状态,
show status;
show innodb status; 假如你需要跟友好的体验,那么建议使用 mysqlreport,它是一个第三方的 mysql 状态报告工具。
以下是 mysqlreport 完整的报告:
MySQL 5.0.3 uptime 0 0:34:26 Fri Sep 1 19:46:02 2006
__ Key _________________________________________________________________
Buffer used 380.00k of 512.00M %Used: 0.07
Current 59.32M %Usage: 11.59
Write hit 97.04%
Read hit 99.58%
__ Questions ___________________________________________________________
Total 98.06k 47.46/s
DMS 81.23k 39.32/s %Total: 82.84
QC Hits 16.58k 8.02/s 16.91
COM_QUIT 200 0.10/s 0.20
Com_ 131 0.06/s 0.13
-Unknown 82 0.04/s 0.08
Slow 5 s 0 0.00/s 0.00 %DMS: 0.00 Log: ON
DMS 81.23k 39.32/s 82.84
SELECT 64.44k 31.19/s 65.72 79.33
INSERT 16.75k 8.11/s 17.08 20.61
UPDATE 41 0.02/s 0.04 0.05
REPLACE 0 0.00/s 0.00 0.00
DELETE 0 0.00/s 0.00 0.00
Com_ 131 0.06/s 0.13
change_db 119 0.06/s 0.12
show_fields 9 0.00/s 0.01
show_status 2 0.00/s 0.00
__ SELECT and Sort _____________________________________________________
Scan 38 0.02/s %SELECT: 0.06
Range 14 0.01/s 0.02
Full join 3 0.00/s 0.00
Range check 0 0.00/s 0.00
Full rng join 0 0.00/s 0.00
Sort scan 14 0.01/s
Sort range 26 0.01/s
Sort mrg pass 0 0.00/s
__ Query Cache _________________________________________________________
Memory usage 17.81M of 32.00M %Used: 55.66
Block Fragmnt 13.05%
Hits 16.58k 8.02/s
Inserts 48.50k 23.48/s
Prunes 33.46k 16.20/s
Insrt:Prune 1.45:1 7.28/s
Hit:Insert 0.34:1
__ Table Locks _________________________________________________________
Waited 1.01k 0.49/s %Total: 1.24
Immediate 80.04k 38.74/s
__ Tables ______________________________________________________________
Open 107 of 1024 %Cache: 10.45
Opened 118 0.06/s
__ Connections _________________________________________________________
Max used 77 of 600 %Max: 12.83
Total 202 0.10/s
__ Created Temp ________________________________________________________
Disk table 10 0.00/s
Table 26 0.01/s Size: 4.00M
File 3 0.00/s
__ Threads _____________________________________________________________
Running 55 of 77
Cache 0 %Hit: 0.5
Created 201 0.10/s
Slow 0 0.00/s
__ Aborted _____________________________________________________________
Clients 0 0.00/s
Connects 8 0.00/s
__ Bytes _______________________________________________________________
Sent 38.46M 18.62k/s
Received 7.98M 3.86k/s
__ InnoDB Buffer Pool __________________________________________________
Usage 3.95M of 7.00M %Used: 56.47
Read hit 99.99%
Pages
Free 195 %Total: 43.53
Data 249 55.58 %Drty: 0.00
Misc 4 0.89
Latched 0 0.00
Reads 574.56k 0.6/s
From file 176 0.0/s 0.03
Ahead Rnd 4 0.0/s
Ahead Sql 2 0.0/s
Writes 160.82k 0.2/s
Flushes 1.04k 0.0/s
Wait Free 0 0/s
__ InnoDB Lock _________________________________________________________
Waits 0 0/s
Current 0
Time acquiring
Total 0 ms
Average 0 ms
Max 0 ms
__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads 225 0.0/s
Writes 799 0.0/s
fsync 541 0.0/s
Pending
Reads 0
Writes 0
fsync 0
Pages
Created 23 0.0/s
Read 226 0.0/s
Written 1.04k 0.0/s
Rows
Deleted 25.04k 0.0/s
Inserted 25.04k 0.0/s
Read 81.91k 0.1/s
Updated 0 0/s
解读报告
第1行 报告头 包括数据库版本、数据库服务器运行时间、当前日期和时间。数据库服务器运行时间非常关键,假如该时间很短,那么使用 mydqlreport 得出的报告可能会误导你,所以建议在使用该工具时,uptime 应该是在24小时以上(本例中只有34分钟,故不准)。
第3-7行 索引报告
数据库的索引放在前面展示,说明索引的重要性。而且,这部分只能说明数据库(使用MyISAM,不包括InnoDB等其他存储引擎)Shared Key Buffer 的使用情况,并不能说明你的数据库索引的合理性。
(1)Buffer used:key buffer 的使用情况,本例中的意思是目前 key_buffer_size 是512m,目前使用了380k,使用率是0.07%。其中,512m是指该项数据的峰值,不代表数据库服务器启动时就需要消耗这么多的系统物理内存,正常情况下,mysql会自动根据需要分配系统的内存,只要不要超过峰值即可。假如,其使用率达到80-90%,那就说明 key_buffer_size 应该增大了,但是其使用率不会超过95%,因为达到95%意味着其实已经使用了100%。
(2)Current:该项只支持mysql4.1.2 以上版本。根据系统变量 Key_blocks_unused 确定 mysql 目前使用的 key buffer,理论上该值应该<=key_buffer_size。根据该项和Buffer used 即可确定 key_buffer_size 是否合理。(3)Write hit:该值=索引写入硬盘次数/索引写入内存次数 * 100%,一般<100%。若该数据库主要是进行 insert 和 update ,该值接近于 0 也是可以接受的;若是 select 操作为主,达到90%甚至以上也是正常的;当然>100%的情况也是存在的。(4)Read hit:比Write hit 更有意义,该值=索引从硬盘读取次数/索引从内存内存次数 * 100%,该值不应该低于99%,假如低于99%(数据库服务器刚启动几个小时除外),说明出问题了(key_buffer_size太小)。
第9-26行
该部分会从数据库的整体运行状况来告诉你数据库在忙什么,做的怎么样。
(1)Total
【待续】