MySQL Error Log 中IO能力不足的警告分析

周末在一台MySQL实例上频繁做大批量的写入测试,无意中发现MySQL的errorlog中频繁出现如下的Note:
page_cleaner: 1000ms intended loop took **** ms. The settings might not be optimal. (flushed=**** and evicted=0, during the time.)

一个典型的信息如下
InnoDB: page_cleaner: 1000ms intended loop took 4068ms. The settings might not be optimal. (flushed=2000 and evicted=0, during the time.)
该告警意味着MySQL实例按照目前IO相关的参数配置的前提下,存在着IO写入性能上的瓶颈,配置参数与IO处理能力不匹配。
因为很清楚是在做测试的情况下,连续大批量写入数据造成的,很有可能是checkpoint刷新脏页造成的改警告。

MySQL在正常运行时4个与IO刷新相关的参数。

1,innodb_io_capacity

master thread中中每秒或者每10s循环中刷新脏页的数量

刷新脏页的数据是多少?有参数innodb_io_capacity决定,以下截图自《MySQL技术内幕InnoDB存储引擎》page 41

2,innodb_max_dirty_pages_pct

innodb buffer pool中脏页数量超过这个比例之后,刷新部分脏页到磁盘

这种情况下是刷新多少个脏页?
因为没有阅读源码的能力,从这里来看(后面会给出参考链接),这个值是innodb_io_capacity个脏页。

innodb_max_dirty_pages_pct这个参数本身默认值差不多就是最优化的,应该是不能瞎几把调的。以下截图自《MySQL技术内幕InnoDB存储引擎》page 42

3,innodb_lru_scan_depth

lru列表中保持空闲page的数据量,如果低于这个数量,则按照LRU的原则刷新脏页到磁盘。
这种情况下是刷线多少个脏页?
此情况下触发,默认扫描innodb_lru_scan_depth个lru冷端数据页,将脏页写入磁盘(有10个就刷10,有100个就刷100个……)
这一点参考这个(笔者并没有找到确切的证据):https://www.cnblogs.com/geaozhang/p/7341333.html

4,redo log日志空间达到配置阈值的刷新(一个实例的redo log空间总和)

单个redo log大小的参数:innodb_log_file_size
redo log 个数:innodb_log_files_in_group 
async_water_mark   = 75%*innodb_log_file_size
sync_water_mark    = 90%*innodb_log_file_size
  1)当checkpoint_age<sync_water_mark的时候,无需执行Flush checkpoint。也就说,redo log剩余空间超过25%的时候,无需执行Async/Sync Flush checkpoint。
  2)当async_water_mark<checkpoint_age<sync_water_mark的时候,执行Async Flush checkpoint,也就说,redo log剩余空间不足25%,但是大于10%的时候,执行Async Flush checkpoint,刷新到满足条件1
  3)当checkpoint_age>sync_water_mark的时候,执行sync Flush checkpoint。也就说,redo log剩余空间不足10%的时候,执行Sync Flush checkpoint,刷新到满足条件1。

在buffer pool远没有达到分配值的情况下,innodb_max_dirty_pages_pct和innodb_lru_scan_depth也不会达到checkpoint的条件,redo log也没有切换,
因此只能断定为master thread 后台线程定时刷新脏页造成的IO负担过载,因此尝试 set global innodb_io_capacity = 1000;
经后继续测试观察,尚未发现类似新的page_cleaner告警日志产生。

参考:

http://blog.itpub.net/26506993/viewspace-2214703/

https://www.cnblogs.com/geaozhang/p/7341333.html

https://www.jianshu.com/p/6991304a8e26?tdsourcetag=s_pcqq_aiomsg

https://www.jianshu.com/p/ddb24f9afae0?tdsourcetag=s_pcqq_aiomsg

原文地址:https://www.cnblogs.com/wy123/p/11445612.html

时间: 2024-10-04 00:19:14

MySQL Error Log 中IO能力不足的警告分析的相关文章

谁记录了mysql error log中的超长信息

[问题] 最近查看MySQL的error log文件时,发现有很多服务器的文件中有大量的如下日志,内容很长(大小在200K左右),从记录的内容看,并没有明显的异常信息. 有一台测试服务器也有类似的问题,为什么会记录这些信息,是谁记录的这些信息,分析的过程比较周折. Status information: Current dir: Running threads: 2452  Stack size: 262144 Current locks: lock: 0x7f783f5233f0: Key c

Linux中IO监控命令的使用分析

一篇不错的有关linux io监控命令的介绍和使用. 1.系统级IO监控 iostat iostat -xdm 1    # 个人习惯 %util         代表磁盘繁忙程度.100% 表示磁盘繁忙, 0%表示磁盘空闲.但是注意,磁盘繁忙不代表磁盘(带宽)利用率高 argrq-sz    提交给驱动层的IO请求大小,一般不小于4K,不大于max(readahead_kb, max_sectors_kb) 可用于判断当前的IO模式,一般情况下,尤其是磁盘繁忙时, 越大代表顺序,越小代表随机

【MySQL案例】error.log的Warning:If a crash happens thisconfiguration does not guarantee that the relay lo

1.1.1. If a crash happens thisconfiguration does not guarantee that the relay log info will be consistent [环境描述] msyql5.6.14 [报错信息] mysql的slave启动时,error.log中出现Warning警告: [Warning] Slave SQL: If a crash happensthis configuration does not guarantee tha

MYSQL ERROR

mysql出错了以前往往靠猜.有了这张表一查就出来了.方便不少.特共享于众 1005创建表失败 1006创建数据库失败 1007数据库已存在创建数据库失败 1008数据库不存在删除数据库失败 1009不能删除数据库文件导致删除数据库失败 1010不能删除数据目录导致删除数据库失败 1011删除数据库文件失败 1012不能读取系统表中的记录 1020记录已被其他用户修改 1021硬盘剩余空间不足请加大硬盘可用空间 1022关键字重复更改记录失败 1023关闭时发生错误 1024读文件错误 1025

mysql slow log 简单统计

众所周知,mysql slow log中很多sql 语句结构和对象是相同,只是其中变量不一样,对于这样的sql,我们完全可以将其归为一类,统计其执行次数.执行时间平均值等参数,而pt-query-digest恰好就是这样一款工具,能够对slow sql 进行归类.分组和分析,统计同一类sql多次运行后的参数:max.min.avg.count等: # Query 6: 0.23QPS, 1.07x concurrency, ID 0x7F4D624CEA244E17 at byte 175919

how to trace the error log

Executed as user: WTC\Ebw.Admin. Transaction (Process ID 95) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205).  The step failed. 这是说明job执行的时候产生了死锁,我

MySQL 错误日志(Error Log)

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定义mysqld内部发生的事情,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.本文主要描述错误日志文件. 1.MySQL日志文件系统的组成   a.错误日志:记录启动.运行或停止mysqld时出现的问题.   b.通用日志:记录建立的客户端连接和执行的语句.   c.更新日志:记录更改数据的语句.该日志在M

MYSQL 5.7 无法启动(Could not open error log file errno 2)

前两天电脑中毒, 病毒好像把mysql的 log.err 文件给删掉了.然后服务一直启动不了:Could not open error log file errno 2. 然后疯狂百度,搜索的结果大多都不是我这种情况,只有很少一部分和我的情况一样. 出现和我相同情况的同学: mysql启动错误之 Can't init tc log  Failed to open log (file '', errno 2) ... 发现他们的方法并不能解决我的问题〒_〒,忙活了一上午还是没有找到解决办法. 没有

mysql数据库binary log中的事件到底是什么?

需求描述: 最近看mysql备份恢复的时候,基于时间点恢复,提到了binary log中存的是"事件" 那么到底什么是事件呢 概念解释: binary log中存的是事件(events),事件就是描述数据库变化的数据,这些数据可以是,创建表的操作,也可以是表数据的变化. 原文地址:https://www.cnblogs.com/chuanzhang053/p/8873934.html