MySQL服务器 IO 100%的分析与优化方案

作者:wangdong 时间:2024-01-24 08:34:10 

前言

压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等。而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等查看CPU、内存使用情况,然后在排查IO问题,例如网络IO、磁盘IO的问题。 如果是磁盘IO问题,一般问题是SQL语法问题、MYSQL参数配置问题、服务器自身硬件瓶颈导致IOPS吞吐率问题。

本文主要给大家介绍的是关于MySQL服务器 IO 100%的分析与优化方案,下面话不多说了,来一起看看详细的介绍吧

【问题】

有台MySQL 5.6.21的数据库实例以写入为主,IO %util接近100%

MySQL服务器 IO 100%的分析与优化方案

写入IOPS很高

MySQL服务器 IO 100%的分析与优化方案

【分析过程】

1、通过iotop工具可以看到当前IO消耗最高的mysql线程

MySQL服务器 IO 100%的分析与优化方案

2、查看线程49342的堆栈,可以看到正在进行redo log的刷新,对应的是9号文件

MySQL服务器 IO 100%的分析与优化方案

3、9号文件对应的是redo log的第一个文件

MySQL服务器 IO 100%的分析与优化方案

为什么mysql进程会频繁的刷新redo log文件,要结合redolog的刷盘策略来分析,关键是innodb_flush_log_at_trx_commit参数,

默认是1,最安全,但在写压力大的情况下,也会带来较大的性能影响,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。

MySQL服务器 IO 100%的分析与优化方案

结合这个集群的写入场景来看,大部分都是小事务的写入,每次事务提交都会触发刷盘动作,这种场景下通过增大innodb_log_buffer_size和innodb_log_file_size的优化效果不明显

MySQL服务器 IO 100%的分析与优化方案

【优化方案】

1、应用层面,对于写压力大的系统,可以将单条的insert语句优化为小批量的insert语句,这样事务commit的次数减少,redo log刷盘减少,性能理论上会有提升

2、MySQL层面,对于日志类型的系统,如果允许宕机的情况下少量数据丢失,可以将innodb_flush_log_at_trx_commit参数调整为2,

当设置为2时,则在事务提交时只做write操作,只保证写到系统的page cache,因此实例crash不会丢失事务,但宕机则可能丢失事务

在这台服务器上测试,将参数调整为2时,IO的请求从200M/S降到约10M/S压力会减少10倍以上

MySQL服务器 IO 100%的分析与优化方案

3、系统层面,更换性能更佳的磁盘

来源:https://www.cnblogs.com/wangdong/p/9814988.html

标签:mysql,io,100%
0
投稿

猜你喜欢

  • Go语言HttpRouter路由使用方法详解

    2024-05-09 14:56:31
  • Python NumPy教程之二元计算详解

    2023-12-16 18:25:04
  • MySQL 使用DQL命令查询数据的实现方法

    2024-01-16 18:53:13
  • mat矩阵和npy矩阵实现互相转换(python和matlab)

    2023-10-19 17:12:02
  • Python安装第三方库的3种方法

    2022-02-03 03:10:47
  • javaScript事件机制兼容【详细整理】

    2024-05-13 10:07:01
  • 第一类工厂与哈希对象

    2009-12-28 13:14:00
  • JS实现canvas简单小画板功能

    2023-08-21 07:40:49
  • Django显示可视化图表的实践

    2023-04-13 02:42:38
  • php 的反射详解及示例代码

    2024-06-05 09:46:28
  • Jupyter Notebook运行代码无反应问题及解决方法

    2023-07-21 17:38:04
  • 详解python中的json和字典dict

    2023-05-16 02:25:26
  • golang中select语句的简单实例

    2023-09-03 03:01:28
  • Linux下编译安装Mysql 5.5的简单步骤

    2024-01-27 13:33:03
  • Python编程之变量赋值操作实例分析

    2021-09-20 12:12:01
  • golang 结构体初始化时赋值格式介绍

    2024-04-26 17:26:11
  • 选择一个优秀正文字体的15个技巧

    2008-03-20 13:36:00
  • 用python实现文件备份

    2022-04-19 06:28:19
  • Python程序设计入门(5)类的使用简介

    2023-01-21 06:27:56
  • python创建和使用字典实例详解

    2021-06-11 11:37:06
  • asp之家 网络编程 m.aspxhome.com