监控的意义&目的

业务/数据库服务是否可用

通过事务实时性能数据变化感知业务的变化

数据库性能变化趋势判断服务器资源是否足够

数据可靠性

业务数据是否可靠

服务可用,不代表数据就是正确的

有可能误操作删除数据,或者其他意外原因丢失数据

或者主从复制延迟,导致在从数据库无法读取到最新数据

通过模拟随机业务逻辑来验证数据可靠性

服务可用性

是否可对外提供服务

进程在运行,但没监听网络,或者授权不正确,或者网络出故障

因此不能只监控进程启动与否,是否监听网络

最好能模拟业务逻辑进行监控

这个业务逻辑除了能完成可用性监控外,还可以进行数据可靠性监控

服务器&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监控&性能瓶颈排查的更多相关文章

  1. 京东MySQL监控之Zabbix优化、自动化

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangwei007.blog.51cto.com/68019/1833332 随 ...

  2. Mysql 高负载排查思路

    Mysql 高负载排查思路 发现问题 top命令 查看服务器负载,发现 mysql竟然百分之两百的cpu,引起Mysql 负载这么高的原因,估计是索引问题和某些变态SQL语句. 排查思路 1. 确定高 ...

  3. MySQL监控系统Lepus的搭建

    现在流行的监控系统很多,选择一个合适自己的就可以了,例如Zabbix.Nagios:监控MySQL为主的有MySQLMTOP.Lepus.本文主要介绍快速部署lepus以及监控MySQL,因为作为DB ...

  4. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  5. MySQL 监控指标

    为了排查问题,对数据库的监控是必不可少的,在此介绍下 MySQL 中的常用监控指标. 简介 MySQL 有多个分支版本,常见的有 MySQL.Percona.MariaDB,各个版本所对应的监控项也会 ...

  6. 性能调优 | 如何通过性能调优突破 MySQL 数据库性能瓶颈?

    本文出自头条号老王谈运维,转载请说明出处. MySQL 数据库瓶颈对 DBA 程序员而言,是非常棘手的问题.要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里 ...

  7. MySQL反应慢排查思路

    数据库异常假死排查需要数据(当时问题的时间,前后时间在2个小时的数据就行) 1.MySQL相关配置 整体可以借助于pt-mysql-summary生成(percona-tools工具) 2.操作系统方 ...

  8. 如何在Zabbix上安装MySQL监控插件PMP

    PMP,全称是Percona Monitoring Plugins,是Percona公司为MySQL监控写的插件.支持Nagios,Cacti.从PMP 1.1开始,支持Zabbix. 下面,看看如何 ...

  9. DB监控-mysql监控

    Mysql监控属于DB监控的模块之一,包括采集.展示.监控告警.本文主要介绍Mysql监控的主要指标和采集方法. Mysql监控和Redis监控的逻辑类似,可参考文章<Redis监控>. ...

随机推荐

  1. Ubuntu 18.04.1 安装java8

    ###下载tar.gz 点击选择接收协议 下载完文件之后,将文件从Windows复制到ubuntu上,可以用xShell,putty,git.这里用git 下载安装git之后,再任意位置右击,选择 g ...

  2. http json token

    http json token https使用证书来保证链接的安全,是目前最为流行的做法. 另一种保证HTTP 函数的安全,就是http json token,只有TOKEN验证通过,才能调用方法(一 ...

  3. 在linux的用户空间操作gpio

    1. 使能linux内核选项CONFIG_GPIO_SYSFS CONFIG_GPIO_SYSFS=y 2. 测试方法 2.1 关注/sys/class/gpio下的文件 --export/unexp ...

  4. AndoridSQLite数据库开发基础教程(9)

    AndoridSQLite数据库开发基础教程(9) 添加视图 视图是从一个或几个基本表(或视图)中导出的虚拟的表.通过视图可以看到表的内容.下面为数据库添加视图,操作步骤如下: (1)打开的数据库,单 ...

  5. composer 安装以及使用教程

    CentOS 7 安装 Composer: composer 官方下载文档:https://getcomposer.org/download/ 首先 centos 必须安装 php-cli,也就是在命 ...

  6. vue---lodash的使用

    Lodash就是这样的一套工具库,它内部封装了诸多对字符串.数组.对象等常见数据类型的处理函数,其中部分是目前ECMAScript尚未制订的规范,但同时被业界所认可的辅助函数.莫倩每天使用npm安装L ...

  7. 如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘

    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘  摘自:http://blog.sina.com.cn/s/blog_7525b71f0101d0u8.html ...

  8. 使用ffmpeg.exe进行转码参数说明

    使用ffmpeg.exe进行转码参数说明 摘自:https://blog.csdn.net/coloriy/article/details/47337641 2015年08月07日 13:04:32  ...

  9. 【PHP】图片转换为base64,经过post传输后‘+’会变成 ‘空格’

    图片转换为base64,经过post传输后‘+’会变成 ‘空格’, 需要用PHP 处理一下 $str= $_POST['img_data']; $str= str_replace(' ','+',$s ...

  10. Qt编写自定义控件62-探探雷达

    一.前言 随着移动互联网的盛行,现在手机APP大行其道,每个人的手机没有十几个APP都不好意思说自己是现代人,各种聊天.购物.直播.小视频等APP,有个陌生人社交的APP叫探探,本人用过几次,当然不是 ...