如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”?

如何解决如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”??
InnoDB:page_cleaner:1000毫秒的预期循环耗时4013毫秒。设置可能不是最佳的。(在这段时间内刷新为1438,逐出为0)。

这个问题是典型的MysqL实例,其中您对数据库的更改率很高。通过运行5GB导入,您可以快速创建脏页。创建脏页时,页面清除器线程负责将脏页从内存复制到磁盘。

就您而言,我假设您并非一直都导入5GB。因此,这是非常高的数据负载率,而且是暂时的。您可能会忽略警告,因为InnoDB会逐渐赶上。

这是导致此警告的内部原因的详细说明。

每秒一次,页面清理程序扫描缓冲池中是否有脏页,以将其从缓冲池刷新到磁盘。您看到的警告表明它有很多脏页要刷新,并且需要花费4秒多的时间将一批脏页刷新到磁盘上,而这应该在1秒内完成。换句话说,它咬的东西超过了它的咀嚼能力。

您通过将它innodb_lru_scan_depth从1024 减少到256 进行了调整。这减少了页面清洁器线程在每秒一次的循环中搜索脏页到缓冲池的距离。您要求它咬一点。

请注意,如果您有许多缓冲池实例,它将导致刷新工作更多。它innodb_lru_scan_depth减少了每个缓冲池实例的工作量。因此,您可能在不减小扫描深度的情况下无意中通过增加了缓冲池的数量而导致了该瓶颈。

的文档innodb_lru_scan_depth说:“小于默认设置通常适用于大多数工作负载。” 听起来他们给此选项的默认值太高。

您可以使用innodb_io_capacity和innodb_io_capacity_max选项来限制后台冲洗使用的IOPS 。第一个选项是InnoDB将请求的I / O吞吐量的软限制。但是这个限制是灵活的。如果刷新落后于新的脏页创建速度,则InnoDB将动态增加刷新率,使其超过此限制。第二个选项对InnoDB可能增加刷新率的范围进行了更严格的限制。

如果刷新率能跟上创建新脏页的平均率,那么您会没事的。但是,如果您始终以比刷新它们快的速度创建脏页,则最终您的缓冲池将充满脏页,直到脏页超出innodb_max_dirty_page_pct缓冲池为止。此时,刷新率将自动增加,并可能再次导致page_cleaner发送警告。

另一个解决方案是将MysqL放在具有更快磁盘的服务器上。您需要一个I / O系统,该系统可以处理页面刷新所需的吞吐量。

如果您始终在平均流量下看到此警告,则可能是您尝试在此MysqL服务器上执行太多写查询。现在可能是横向扩展并将写入分成多个MysqL实例的时候了,每个实例都有自己的磁盘系统。

了解有关页面清洁器的更多信息:

在InnoDB中引入page_cleaner线程(归档副本)
MySQL-5.7改善了面向DML的工作负载
解决方法
我在服务器上运行了mysql import mysql dummyctrad
<dumpfile.sql,它花了太长时间才能完成。转储文件约为5G。该服务器是Centos 6,内存= 16G和8核处理器,mysql v 5.7
x64-

这些是正常消息/状态“正在等待表刷新”吗? InnoDB: page_cleaner: 1000ms intended loop took 4013ms. The settings might not be optimal

mysql日志内容

2016-12-13T10:51:39.909382Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4013ms. The settings might not be optimal. (flushed=1438 and evicted=0,during the time.)
2016-12-13T10:53:01.170388Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4055ms. The settings might not be optimal. (flushed=1412 and evicted=0,during the time.)
2016-12-13T11:07:11.728812Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4008ms. The settings might not be optimal. (flushed=1414 and evicted=0,during the time.)
2016-12-13T11:39:54.257618Z 3274915 [Note] Aborted connection 3274915 to db: 'dummyctrad' user: 'root' host: 'localhost' (Got an error writing communication packets)
流程清单:

mysql> show processlist \G;
1. row **

 Id: 3273081

User: root
Host: localhost

 db: dummyctrad

Command: Field List
Time: 7580
State: Waiting for table flush
Info:
2. row **

 Id: 3274915

User: root
Host: localhost

 db: dummyctrad

Command: Query
Time: 2
State: update
Info: INSERT INTO radacct VALUES (351318325,'kxid ge:7186','abcxyz5976c','user100
3. row **

 Id: 3291591

User: root
Host: localhost

 db: NULL

Command: Query
Time: 0
State: starting
Info: show processlist
4. row **

 Id: 3291657

User: remoteuser
Host: portal.example.com:32800

 db: ctradius

Command: Sleep
Time: 2
State:
Info: NULL
4 rows in set (0.00 sec)
更新1

mysqlforum,innodb_lru_scan_depth

将innodb_lru_scan_depth值更改为256可改善插入查询的执行时间+日志中无警告消息,默认值为innodb_lru_scan_depth =
1024;

SET GLOBAL innodb_lru_scan_depth=256;

声明:地推任务网所有作品(图片、文字)均由用户自行上传分享,仅供网友学习交流。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 缓存 关系型数据库
详细解析MySQL中的innodb和myisam
总之,InnoDB和MyISAM各有千秋,选择合适的存储引擎应基于对应用程序特性的深入理解,以及对性能、数据完整性和可扩展性的综合考量。随着技术发展,InnoDB因其全面的功能和日益优化的性能,逐渐成为更广泛场景下的首选。然而,在特定条件下,MyISAM依然保留其独特的价值。
101 0
|
3月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
3月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
70 6
|
4月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
4月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
166 0
|
5月前
|
关系型数据库 MySQL 调度
深入理解MySQL InnoDB线程模型
深入理解MySQL InnoDB线程模型
|
5月前
|
存储 关系型数据库 MySQL
mysql的InnoDB引擎实现ACID特性的原理
mysql的InnoDB引擎实现ACID特性的原理
|
24天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
57 3
Mysql(4)—数据库索引
|
10天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
46 2
|
13天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
54 4