MySQL监控&性能瓶颈排查
监控的意义&目的
业务/数据库服务是否可用
通过事务实时性能数据变化感知业务的变化
数据库性能变化趋势判断服务器资源是否足够
数据可靠性
业务数据是否可靠
服务可用,不代表数据就是正确的
有可能误操作删除数据,或者其他意外原因丢失数据
或者主从复制延迟,导致在从数据库无法读取到最新数据
通过模拟随机业务逻辑来验证数据可靠性
服务可用性
是否可对外提供服务
进程在运行,但没监听网络,或者授权不正确,或者网络出故障
因此不能只监控进程启动与否,是否监听网络
最好能模拟业务逻辑进行监控
这个业务逻辑除了能完成可用性监控外,还可以进行数据可靠性监控
服务器&MySQL实例出现高负载
服务可用,但响应很慢,其实等于不可用
响应很慢时,用户不耐烦一直刷屏,更容易引起风暴
需要及时关注整个系统响应时长、每秒处理事务数
可用性告警
快速报告线上服务宕掉及恢复情况
历史趋势
了解线上计算资源使用情况
作为计算资源扩容/收缩的参考
作为优化工作的成果展示记录
监控之关键指标
常规运行情况汇总
CPU:%user,%sys,%idle,%iowait,是否发生中断不均衡
内存:free,cached,swap,是否有内存泄漏和OOM
I/O:iops、吞吐、时延、利用率(%util)
网卡:吞吐、注意小包发送频率
系统监控
常规工具
top、free、ps、df
sysstat(sar、vmstat、mpstat、iostat)、dstat、iotop
netstat
其他工具
perf
pstack
top负载大于5要注意
free详解
used,已经使用的内存总量
free,剩余物理内存
shared,已废弃不用
buffers,写缓冲
cached,读缓冲
实际可再分配内存:total = used + free + shared + buff/cache
对比cache和used = (total - free)的差异大小
used和cache相差太大第一感觉就是内存泄漏
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
cpu消耗高的原因大概有几个 1)函数的运算 2)排序的进行 3)锁等待和争用
sar详解
-u,Report CPU utilization
-d,Report activity for each block device
-r,memory utilization statistics
vmstat -S m 1 50
iostat -dmx 1
iotop -oP
看iops,iowait,%util
dstat 1
xfs要预留10%磁盘空间,用来存xfs的日中,小心,否则容易丢数据
MySQL监控
MySQL服务性能,是否有瓶颈
tps,qps,慢查询,rt,锁,等待,表缓存,线程缓存,临时表,临时文件
锁:表锁,行锁,锁等待,死锁
内存:buffer/cache命中率、等待释放
事务:事务ID增长率,unpurge历史事务,checkpoint lag,大事务,长事务
慢查询:平均耗时、平均次数,slow query重点关注distinct page特别多的
ibp监控
purge lag -- History list length
checkpoint lag
活跃时间最长的事务
select * from I_S.innodb_trx order by trx_started asc limit 1;
等待时间最长的事务
select * from sys.innodb_lock_waits order by wait_age_secs desc limit 1;
要特别关注的大事务
select * from I_S.innodb_trx where
trx_lock_structs >= 5 or -- 超过5把锁
trx_rows_locked >= 100 or -- 超过100行被锁
trx_rows_modified >= 100 or -- 超过100行被修改
time_to_sec(timediff(now(),trx_started)) > 100; -- 事务活跃超过100秒
监控大SQL、慢SQL
监控SQL注入风险
MySQL锁监控
表级锁
table_locks_immediate
table_locks_waited
行级锁
innodb_row_lock_current_wait -- 当前等待的行锁数量
innodb_row_lock_time -- 请求行锁总耗时(ms)
innodb_row_lock_time_avg -- 请求行锁平均耗时(ms)
innodb_row_lock_time_max -- 请求行锁最久耗时(ms)
innodb_row_lock_waits -- 行锁发生次数
等待事件
innodb_buffer_pool_wait_free/innodb_log_wait等
临时表/临时文件
created_tmp_disk_tables/created_tmp_files等
打开表/文件数
open_files/open_table_definitions/open_tables等
并发连接
threads_running/threads_created/threads_cached等
查看MySQL状态
show [full] processlist; 查看不良状态
show [global] status;
show engine innodb status\G
tail -f slow.log
perf top 神器
数据缓存buffer (data page)
innodb_buffer_pool_pages_data_b = innodb_page_size * innodb_buffer_pool_pages_data
待刷新buffer
innodb_buffer_pool_pages_dirty_b = innodb_page_size * innodb_buffer_pool_pages_dirty
空闲buffer
innodb_buffer_pool_pages_free_b = innodb_page_size * innodb_buffer_pool_pages_free
缓存命中率
innodb_buffer_pool_hit_ratio = (innodb_buffer_pool_read_requests/(innodb_buffer_pool_read_requests+innodb_buffer_pool_reads)) * 100
MySQL服务可用性
不仅能连上,还能正常查询&及时返回结果
MySQL复制是否终止,延迟多大
高一致性要求的场景,复制几乎不能有延迟
如何衡量平均响应时长(average rt)
通过模拟N次随机业务逻辑判断响应耗时,或通过MySQL的基准测试函数BENCHMARK()来判断
select benchmark(100000000,'call mysp()');
select benchmark(100000000,'select 1+1');
业务监控
业务状态监控
是否正常、tps、平均响应时长、自定义错误代码
接口响应延迟
在监控系统调用应用接口,探测其响应延迟,该接口实现一些基本的业务逻辑
flush status;
selec ...;
show status like 'handler_read%';
set profiling = 1;
select ...;
show profiles;
show profile for query N;
MySQL关键选项
key_buffer_size = 8M
sort/join/read/read rnd buffer = 4M
tmp/heap table = 96M
binlog_format = row
sync_binlog = 1
long_query_time = 0.01~0.05
log_queries_not_using_indexes = 1 & log_throttle_queries_not_using_indexes = 10
interactive_timeout = wait_timeout = 600
lock_wait_timeout = 3600
log_error_verbosity = 3
time_zone = "+8:00"
thread_handling, 能支持时,若有大量短连接场景就启用
sql_safe_updates = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_buffer_pool_size,建议物理内存的50%~80%
innodb_max_dirty_pages_pct,建议不超过50%
innodb_log_buffer_size,建议32M左右
innodb_thread_concurrency = 0
innodb_lock_wait_timeout = 5~10
innodb_log_file_size = 1G
innodb_log_files_in_group = 4~8
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity, innodb_io_capacity_max 根据I/O子系统性能调整
innodb_flush_sync = 0
innodb_autoinc_lock_mode = 1
推荐使用my.cnf生成工具
MySQL关键状态
aborted_*
created_tmp_*
handler_read_*
*_wait_*
open_tables, opened_tables
select_full_join
select_scan
sort_merge_passes
threads_*
*copy*, *copying*
creating sort index, sorting result
creating tmp table
closing tables, opening tables
converting HEAP to ondisk
altering table / creating index
preparing / query end
sending data / sending to client
waiting for ... lock
MySQL监控&性能瓶颈排查的更多相关文章
- 京东MySQL监控之Zabbix优化、自动化
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangwei007.blog.51cto.com/68019/1833332 随 ...
- Mysql 高负载排查思路
Mysql 高负载排查思路 发现问题 top命令 查看服务器负载,发现 mysql竟然百分之两百的cpu,引起Mysql 负载这么高的原因,估计是索引问题和某些变态SQL语句. 排查思路 1. 确定高 ...
- MySQL监控系统Lepus的搭建
现在流行的监控系统很多,选择一个合适自己的就可以了,例如Zabbix.Nagios:监控MySQL为主的有MySQLMTOP.Lepus.本文主要介绍快速部署lepus以及监控MySQL,因为作为DB ...
- MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控
第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...
- MySQL 监控指标
为了排查问题,对数据库的监控是必不可少的,在此介绍下 MySQL 中的常用监控指标. 简介 MySQL 有多个分支版本,常见的有 MySQL.Percona.MariaDB,各个版本所对应的监控项也会 ...
- 性能调优 | 如何通过性能调优突破 MySQL 数据库性能瓶颈?
本文出自头条号老王谈运维,转载请说明出处. MySQL 数据库瓶颈对 DBA 程序员而言,是非常棘手的问题.要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里 ...
- MySQL反应慢排查思路
数据库异常假死排查需要数据(当时问题的时间,前后时间在2个小时的数据就行) 1.MySQL相关配置 整体可以借助于pt-mysql-summary生成(percona-tools工具) 2.操作系统方 ...
- 如何在Zabbix上安装MySQL监控插件PMP
PMP,全称是Percona Monitoring Plugins,是Percona公司为MySQL监控写的插件.支持Nagios,Cacti.从PMP 1.1开始,支持Zabbix. 下面,看看如何 ...
- DB监控-mysql监控
Mysql监控属于DB监控的模块之一,包括采集.展示.监控告警.本文主要介绍Mysql监控的主要指标和采集方法. Mysql监控和Redis监控的逻辑类似,可参考文章<Redis监控>. ...
随机推荐
- 2019软工实践_Alpha(3/6)
队名:955 组长博客:https://www.cnblogs.com/cclong/p/11872693.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...
- php 502 无错误行和报错文件的情况下使用gdb调试方法
lnmp环境 gdb /usr/local/php5.2/bin/php-cgi /tmp/coredump-php-cgi.20503 source /home/tmp/lnmp1.4-full ...
- 在JAVA中怎么比较Double类型数据的大小
在JAVA中怎么比较Double类型数据的大小 我来答 浏览 33044 次 3个回答 #活动# “双11”答题活动,奖励加码!最高得2000元购物礼金! pollutedair 2015- ...
- html5中hgroup和address标签使用总结
html5中hgroup和address标签使用总结 一.总结 一句话总结: hgroup元素(不推荐使用):用来给标题分组,通常放在header中: address元素:斜体显示:用来说明作者的联系 ...
- Comparison and difference for Default geodatabase,Current workspace,Scratch workspace,Home Folder
Comparison and difference for Default geodatabase,Current workspace,Scratch workspace,Home Folder 商务 ...
- esxi上为基于LVM的centos7的根目录扩容
概念:据说默认centos都是基于LVM的 LVM:LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制. LVM 更加详细的说 ...
- Mac 终端显示git分支
1 进入你的home目录 cd ~ 2 编辑.bashrc文件 vi .bashrc 3 将下面的代码加入到文件的最后处 function git_branch { branch="`git ...
- Vue中创建单文件组件 注册组件 以及组件的使用
<template> <div id="app"> <v-home></v-home> <hr > <br> ...
- Java PDF转换成图片并输出给前台展示
首先需要导入所需工具类 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fo ...
- mobile crane 1
void MobileCrane::rotateRope2() { //double r_angle1 = rotateRope + rorate3; //std::cout << &qu ...