MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上,我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。
1性能检测常用命令
show status
显示状态信息,参考:Mysql show status命令详解
show processlist
查看当前SQL执行,包括执行状态、是否锁表等,参考:Mysql show processlist命令详解
show variables
显示系统变量,参考:Mysql show variables命令详解
2瓶颈分析常用命令
获取mysql用户下的进程总数
1
|
ps -ef | awk
'{print $1}'
| grep
"mysql"
| grep -v
"grep"
| wc -l
|
主机性能状态
1
2
|
# uptime
13:05:52 up 53 days, 52 min, 1 user, load average: 0.00, 0.00, 0.00
|
CPU使用率
1
|
# top 或 # vmstat
|
磁盘IO量
1
|
# vmstat 或 # iostat
|
swap进出量[内存]
1
|
# free -m
|
数据库性能状态
QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
1
|
mysql > show /*
global
*/ status
like
'Question'
;
|
TPS(每秒事务量)
TPS = (Com_commit + Com_rollback) / seconds
1
2
|
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%
1
|
mysql> show status
like
'Key%'
;
|
InnoDB Buffer命中率
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
1
|
mysql> show status
like
'innodb_buffer_pool_read%'
;
|
Query Cache命中率
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
1
|
mysql> show status
like
'Qcache%'
;
|
Table Cache状态量
1
|
mysql> show status
like
'open%'
;
|
Thread Cache 命中率
Thread_cache_hits = (1 - Threads_created / connections ) * 100%
1
2
|
mysql> show status
like
'Thread%'
;
mysql> show status
like
'Connections'
;
|
锁定状态
1
|
mysql> show status
like
'%lock%'
;
|
复制延时量
1
|
mysql > show slave status
|
Tmp Table 状况(临时表状况)
1
|
mysql > show status
like
'Create_tmp%'
;
|
Binlog Cache 使用状况
1
|
mysql > show status
like
'Binlog_cache%'
;
|
Innodb_log_waits 量
1
|
mysql > show status
like
'innodb_log_waits'
;
|