前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL节前巡检要点

MySQL节前巡检要点

作者头像
田帅萌
发布2019-03-01 16:13:01
9580
发布2019-03-01 16:13:01
举报
文章被收录于专栏:「3306 Pai」社区

今天距农历新年还有9天,3306π社区提前给大家拜年啦~

一、操作系统巡检

如果有zabbix或者其他监控类型的工具,就方便很多。

首先看 CPU内存、硬盘io的消耗程度,其中重点是硬盘使用率,要为长假做好准备,避免单位在过年期间业务写入增长,磁盘占满。

每家业务不一样,所以参考标准不一样。 如果没有zabbix,建议使用sar这个小工具,能够收集历史的信息,它的历史数据在/var/log/sa下面,通过 -f 来指定文件。

举例:

1.1 cpu监控

1.2 内存监控

1.3 I/O监控

1.4 系统SWAP监控

当然,查看当前的磁盘和内存使用情况df -h,free -m,是否使用numa和swap,或是否频繁交互信息等。当然,还有其他的监控项目,这里就不一一赘述了。

除此之外,还需要关注日志类信息,例如:

代码语言:javascript
复制
/var/log/messages
/var/log/dmesg

在磁盘扩容的时候要小心,做好备份。

二、MySQL本身巡检

MySQL本身的监控应该包含重点参数的检查,MySQL状态的检查,除此以外还应该包含自增id的使用情况(小心因为自增id使用满了 不能insert写入从而引发报警哦),及主从健康状态的巡检。

2.1 重点参数

代码语言:javascript
复制
"innodb_buffer_pool_size"
"sync_binlog"
'binlog_format'
'innodb_flush_log_at_trx_commit'
'read_only': 
'log_slave_updates'
'innodb_io_capacity'
'query_cache_type'
'query_cache_size'
'max_connections'
'max_connect_errors'
'server_id'

2.2 MySQL的状态

例如:每秒的tps、qps,提交了多少事务、回滚了多少事务、打开文件数、打开表数、连接数、innodb buffer使用率,及锁等待等等。

首先,查看mysql状态

代码语言:javascript
复制
mysql> show full processlis;
mysql> show global status;
mysql> show engine innodb status\G

show status中的一些状态信息

1、wait事件

代码语言:javascript
复制
Innodb_buffer_pool_wait_free
Innodb_log_waits

2、MySQL锁监控

代码语言:javascript
复制
表锁
Table_locks_waited
Table_locks_immediate

行锁
Innodb_row_lock_current_waits,当前等待锁的行锁数量
Innodb_row_lock_time,请求行锁总耗时
Innodb_row_lock_time_avg,请求行锁平均耗时
Innodb_row_lock_time_max,请求行锁最久耗时
Innodb_row_lock_waits,行锁发生次数

还可以定时收集INFORMATION_SCHEMA里面的信息:

代码语言:javascript
复制
INFORMATION_SCHEMA.INNODB_LOCKS; 
INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

可参考"老司机带你体验SYS库多种新玩法"这篇文章。

代码语言:javascript
复制
临时表/临时文件
Created_tmp_disk_tables/Created_tmp_files

打开表/文件数
Open_files/Open_table_definitions/Open_tables

并发连接数
Threads_running /Threads_created/Threads_cached
代码语言:javascript
复制
Aborted_clients 
客户端没有正确关闭连接导致客户端终止而中断的连接数

Aborted_connects
试图连接到mysql服务器而失败的连接数

Binlog

代码语言:javascript
复制
Binlog_cache_disk_use 
使用临时二进制日志缓冲但超过 binlog_cache_size 值并使用临时文件

Binlog_cache_use
使用临时二进制日志缓冲的事务数量

Binlog_stmt_cache_disk_use
当非事务语句使用二进制日志缓存

Binlog_stmt_cache_use
使用二进制日志缓冲非事务语句数量

链接数:

代码语言:javascript
复制
Connections 
试图连接到(不管成不成功)mysql服务器的链接数

临时表:

代码语言:javascript
复制
Created_tmp_disk_tables
服务器执行语句时,在硬盘上自动创建的临时表的数量,是指在排序时,内存不够用(tmp_table_size小于需要排序的结果集),所以需要创建基于磁盘的临时表进行排序

Created_tmp_files
服务器执行语句时自动创建的内存中的临时表的数量

索引:

代码语言:javascript
复制
Handler_commit 内部交语句

Handler_rollback 内部 rollback语句数量

Handler_read_first  索引第一条记录被读的次数,如果高,则它表明服务器正执行大量全索引扫描

Handler_read_key  根据索引读一行的请求数,如果较高,说明查询和表的索引正确

Handler_read_last 查询读索引最后一个索引键请求数

Handler_read_next 按照索引顺序读下一行的请求数

Handler_read_prev 按照索引顺序读前一行的请求数

Handler_read_rnd 根据固定位置读一行的请求数,如果值较高,说明可能使用了大量需要mysql扫整个表的查询或没有正确使用索引

Handler_read_rnd_next 在数据文件中读下一行的请求数,如果你正进行大量的表扫,该值会较高
代码语言:javascript
复制
Open_table_definitions 
被缓存的.frm文件数量

Opened_tables
已经打开的表的数量,如果较大,table_open_cache值可能太小

Open_tables
当前打开的表的数量
代码语言:javascript
复制
Queries
已经发送给服务器的查询个数
代码语言:javascript
复制
Select_full_join 
没有使用索引的联接的数量,如果该值不为0,你应该仔细检查表的所有

Select_scan
对第一个表进行完全扫的联接的数量

Slow_queries 
查询时间超过long_query_time秒的查询个数

Sort_merge_passes
排序算法已经执行的合并的数量,如果值较大,增加sort_buffer_size大小

线程:

代码语言:javascript
复制
Threads_cached 线程缓存内的线程数量

Threads_connected 当前打开的连接数量

Threads_created 创建用来处理连接的线程数

Threads_running 激活的(非睡眠状态)线程数

我写了一个不成熟的小巡检程序,仅巡检MySQL的状态和参数配置(因为客户的环境不能直连linux但可以直连MySQL,不支持系统层面,系统层面使用zabbix等即可),有兴趣的小伙伴可以看看。

详见:[ http://t.cn/EtUfDmd ]

2.4 MySQL自增id的使用情况

代码语言:javascript
复制
mysql> SELECT table_schema,table_name,engine, Auto_increment
 FROM information_schema.tables where 
  INFORMATION_SCHEMA.TABLE_SCHEMA 
 not in ("INFORMATION_SCHEMA" ,"PERFORMANCE_SCHEMA", "MYSQL", "SYS")

可参考"老司机带你体验SYS库多种新玩法"这篇文章。

2.5 存储引擎是否为innodb

代码语言:javascript
复制
mysql> SELECT TABLE_SCHEMA,TABLE_NAME,ENGINE FROM 
 INFORMATION_SCHEMA.TABLES WHERE 
 ENGINE != 'innodb' AND 
 TABLE_SCHEMA NOT IN
  ("INFORMATION_SCHEMA" ,"PERFORMANCE_SCHEMA", "MYSQL", "SYS");

2.6 MySQL主从检测

代码语言:javascript
复制
mysql> show slave status\G

2.6.1 主从状态

主从状态是否双yes?

2.6.2 主从是否延迟

代码语言:javascript
复制
Master_Log_File == Relay_Master_Log_File 
&& Read_Master_Log_Pos == Exec_Master_Log_Pos

最后,同样要检查MySQL的日志,提前发现潜在风险:

  • MySQL error log
  • MySQL 慢查询日志

三、高可用巡检

3.1 MHA && keepalived

观察日志看是否有频繁主从切换,如果有的话就分析一下是什么原因导致频繁切换?

3.2 中间件的巡检 mycat && proxysql

这些中间件的巡检,首先参考系统巡检,再看一下中间件本身的日志类和状态类信息,网络延迟或丢包的检查,也是必须要做工作。

最后3306π祝大家安安心心过大年,好好陪家人,过年无人扰。

扩展阅读

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 3306pai 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档