梦想还是要有的,万一忘了咋办?

0%

MySql常用监控命令

目录:

  • 慢SQL
  • 连接数
  • 缓存
  • Statement
  • 吞吐
  • 数据库参数

慢SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#查看慢日志开启状态
show variables like 'slow_query_log';

#打开\关闭慢日志(OFF)
set global slow_query_log='ON';

#慢查询数量
SHOW GLOBAL STATUS LIKE '%Slow_queries%';

#慢查询时间阈值
show variables like '%long_query_time%';

#慢 Sql 日志路径
show variables like 'slow_query_log_file';

慢日志分析

连接数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#产看数据库最大连接数
show variables like '%max_connection%';

#看到服务器响应的最大连接数
show global status like 'Max_used_connections';

#临时设置数据库最大连接数、重启mysql会失效
set global max_connections=1000;

#修改mysql配置文件my.cnf
#在[mysqld]段中添加或修改max_connections值:
max_connections=512

#查看mysql进程
show status like 'Threads%';

#Threads_connected :这个数值指的是打开的连接数.
#Threads_running :这个数值指的是激活的连接数,这个数值一般远低于connected数值.
#Threads_connected 跟show processlist结果相同,表示当前连接数。准确的来说,
#Threads_running是代表当前并发数

连接数指标

Threads_running 状态 描述
0-10 Normal 几乎所有硬件都没有问题
10-30 Busy 大多数硬件都可以,因为服务器多核
30-50 High 很少有工作负载需要运行这么多线程。它可以短期爆发(<5min),但如果持续时间较长,则响应时间很可能很慢
50-100 Overloaded 某些硬件可以处理此问题,但是不能期望在此范围内成功运行。对于我们的本地部署硬件而言,此范围内的瞬时突发(<5s)通常是可以的。
>100 Failling 在极少数情况下,MySQL可以运行大于100个线程,但在此范围内可能会失败

指导值:

Threads_running < 50
1:1000 Threads_running:QPS

缓存(bufferCache)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 未从缓冲池读取的次数
show status like 'Innodb_buffer_pool_reads';
# 从缓冲池读取的次数
show status like 'Innodb_buffer_pool_read_requests';
# 缓冲池总页数
show status like 'Innodb_buffer_pool_pages_total';
# 缓冲池空闲页数
show status like 'Innodb_buffer_pool_pages_free';

#缓存命中率计算命中率
1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%
# 缓存池使用率
((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%

锁(Lock)

1
2
3
4
5
6
7
8
9
10
# 锁等待个数
show status like 'Innodb_row_lock_waits';

# 平均每次锁等待时间
show status like 'Innodb_row_lock_time_avg';

# 查看是否存在表锁
# 备注:锁等待统计得数量为累加数据,每次获取得时候可以跟之前得数据进行相减,得到当前统计得数据
# SHOW OPEN TABLES [FROM db_name] [LIKE ‘pattern’]
show open tables where in_use >=1;

Statement

1
2
3
4
5
6
7
8
9
10
11
# insert数量
show status like 'Com_insert';

# delete数量
show status like 'Com_delete';

# update 数量
show status like 'Com_update';

#select 数量
show status like 'Com_select';

吞吐(Database Throughputs)

1
2
3
4
5
6
7
8
# 发送吞吐量
show status like 'Bytes_sent';

# 接收吞吐量
show status like 'Bytes_received';

# 总吞吐量
Bytes_sent+Bytes_received;

数据库参数

1
show variables;