美文网首页
MySQL 降配导致的实例crash

MySQL 降配导致的实例crash

作者: 只是甲 | 来源:发表于2021-06-08 17:57 被阅读0次

一.问题描述

由于近期对服务器进行了降配,该mysql数据库会进行批量写入操作,直接导致实例crash

查看错误日志:

2021-02-02T09:09:23.557505Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 16791ms. The settings might not be optimal. (flushed=3 and evicted=0, during the time.)
2021-02-02T09:10:30.951283Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 16096ms. The settings might not be optimal. (flushed=1 and evicted=0, during the time.)

宕机前会有如上的提示

二.解决方案

问题分析:
问题出在page_cleaner,那么这个page_cleaner是什么呢?

Innodb中page clean线程将脏数据写入到磁盘,脏数据写盘后相应的redo就可以覆盖,然后达到redo循环使用的目的,在5.7中参数可以开启多个page clean线程服务于多个innodb buffer实例。

实际上在内部实现中如果page clean线程为4个那么包含一个协调工作线程和三个工作线程,这个协调工作线程也要完成一部分工作。

步骤一的警告一般是IO能力不足,或者参数不够优化的结果。
其实也可以想象,CPU和内存同时进行了降配,应用不变,IO能力肯定会降低。

有了上面的基础我们知道这里应该做如下操作:

innodb_io_capacity 应该降低
innodb_max_dirty_pages_pct 应该降低
innodb_max_dirty_pages_pct_lwm 如果设置了应该考虑降低

降低的目的在于减少每次刷新的量,让每次刷新块数更加平均。从而避免page clean 线程爆发性的刷新脏数据库,从而堵塞IO通道。如果慢慢调整后还是不行则考虑IO确实扛不住了。

代码:

show variables  like '%innodb_io_capacity%';
show variables like '%innodb_max_dirty_pages_pct%';
show variables like '%innodb_max_dirty_pages_pct_lwm%';

set global innodb_io_capacity = 100;
set global innodb_max_dirty_pages_pct = 50;
set global innodb_io_capacity_max = 1000;

*测试记录:

mysql> show variables  like '%innodb_io_capacity%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_io_capacity     | 200   |
| innodb_io_capacity_max | 2000  |
+------------------------+-------+
2 rows in set (0.00 sec)

mysql> 
mysql> show variables like '%innodb_max_dirty_pages_pct%';
+--------------------------------+-----------+
| Variable_name                  | Value     |
+--------------------------------+-----------+
| innodb_max_dirty_pages_pct     | 75.000000 |
| innodb_max_dirty_pages_pct_lwm | 0.000000  |
+--------------------------------+-----------+
2 rows in set (0.00 sec)

mysql> show variables like '%innodb_max_dirty_pages_pct_lwm%';
+--------------------------------+----------+
| Variable_name                  | Value    |
+--------------------------------+----------+
| innodb_max_dirty_pages_pct_lwm | 0.000000 |
+--------------------------------+----------+
1 row in set (0.02 sec)

mysql> show variables like '%innodb_io_capacity_max%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_io_capacity_max | 2000  |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> set global innodb_io_capacity = 100; 
Query OK, 0 rows affected (0.00 sec)

mysql> set global innodb_max_dirty_pages_pct = 50;
Query OK, 0 rows affected (0.00 sec)

mysql> set global innodb_io_capacity_max = 1000;
Query OK, 0 rows affected (0.00 sec)

另外,这个库还存在一些其它的问题:
因为数据库是开发人员自己装的,很多值都是默认的,这个需要调整一下。
例如 最开始内存是8G,但是innodb_buffer_pool_size 居然是默认值128M,现在降配到4G,依旧是128M,可以调大此值。

另外此库开启慢查询,也一并开启。

# 默认只有128M,增加到1G
innodb_buffer_pool_size=1G

# 开启慢日志
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slowlog.log
long_query_time=2

三.反馈

调整参数后,mysql实例没有crash了。
但是有几个报表的sql因为没有使用索引,导致mysql比较慢,优化了之后,这个问题得到了解决。

参考:

1.http://blog.itpub.net/7728585/viewspace-2157988/

相关文章

  • MySQL 降配导致的实例crash

    一.问题描述 由于近期对服务器进行了降配,该mysql数据库会进行批量写入操作,直接导致实例crash 查看错误日...

  • MySQL用户管理

    MySQL多实例 1.什么是实例? 2.什么是多实例? 多个配置文件: 1.创建配置文件存放目录 2.准备不同的配...

  • Mysql权限导致实例无法看到

    起因:那天同事杰少为了linux下的pdf2html转化装了一个字体,然后重启了主机,结果就导致mysql进控制台...

  • 【MySQL】如何快速删除大表

    前言:MySQL运维内参中有提到如何快速删除大表。看到书中案列说drop大表的时候导致MySQL实例夯住了,但是本...

  • docker 官方mysql镜像

    下载mysql 镜像 docker pull mysql 启动mysql服务器实例 启动MySQL实例很简单: s...

  • Android-Crash监控

    Crash监控 Crash(应用崩溃)是由于代码异常而导致 App 非正常退出,导致应用程序无法继续使用,所有工作...

  • 记一次MySQL Crash处理

    在MySQL 5.7的高并发场景下,有可能会触发MySQL5.7的Bug,导致宕机,临时的紧急修复方法可针对实例进...

  • Crash in Cocoa

    Crash in Cocoa Cocoa中会导致Crash的地方: Exceptions类型 1. 集合类越界或插...

  • 全备恢复

    MySQL 5.7、5.6或5.5实例:安装 Percona XtraBackup 2.4MySQL 8.0实例,...

  • Android 通过logcat查看crash 或者anr日志

    常见导致Crash的异常 NullPointerException 空指针ClassCastException 类...

网友评论

      本文标题:MySQL 降配导致的实例crash

      本文链接:https://www.haomeiwen.com/subject/dewytltx.html