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%
写入IOPS很高
【分析过程】
1、通过iotop工具可以看到当前IO消耗最高的mysql线程
2、查看线程49342的堆栈,可以看到正在进行redo log的刷新,对应的是9号文件
3、9号文件对应的是redo log的第一个文件
为什么mysql进程会频繁的刷新redo log文件,要结合redolog的刷盘策略来分析,关键是innodb_flush_log_at_trx_commit参数,
默认是1,最安全,但在写压力大的情况下,也会带来较大的性能影响,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。
结合这个集群的写入场景来看,大部分都是小事务的写入,每次事务提交都会触发刷盘动作,这种场景下通过增大innodb_log_buffer_size和innodb_log_file_size的优化效果不明显
【优化方案】
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倍以上
3、系统层面,更换性能更佳的磁盘
来源:https://www.cnblogs.com/wangdong/p/9814988.html
猜你喜欢
- 使用executemany对数据进行批量插入的话,要注意一下事项:#coding:utf8conn = MySQLdb.connect(ho
- # -*- coding: utf-8 -*-import Image,ImageDraw,ImageFontimport randomim
- pinyinEngine ™v0.1JavaScript拼音搜索引擎应用场景:可对本地缓存数据进行拼音匹配,如SNS网站好友快速查找、地区匹
- perl用的最多的地方就算是文件处理了,下面我就总结了一下perl文件操作的一些东西,并且有具体的例子,通过下面的例子,加强我们对perl文
- 本文实例讲述了Python基于pillow判断图片完整性的方法。分享给大家供大家参考,具体如下:1、安装第三方库。pip install p
- 我们先用 new 关键字 来创建一个ArrayList 对象,给数组的item赋值,把数组初
- 本文实例讲述了python求众数问题的方法,是一个比较典型的应用。分享给大家供大家参考。具体如下:问题描述:多重集中重数最大的元素称为众数.
- 本文实例为大家介绍实现tab选项卡的应用,此插件相对比较简单,具体内容如下源码文件:tab.js实现原理:1、单击一个元素时,首先将原来高亮
- 语言是信息传播的主要障碍。多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获
- 前言Go语言的序列化与反序列化在工作中十分常用,在Go语言中提供了相关的解析方法去解析JSON,操作也比较简单序列化// 数据序列化func
- 如果你还在为python的各种urllib和urlibs,cookielib 头疼,或者还还在为python模拟登录和抓取数据而抓狂,那么来
- 简介PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库PyMySQL 遵循 Python 数据库 API
- pandas遍历每行并累加进行条件过滤 本次记录主要实现对每行进行排序,并保留前80%以前的偏好。思路:将每行的概率进行排序,然后
- 为何使用函数最大化代码的重用和最小化代码冗余流程的分解编写函数>>def语句在Python中创建一个函数是通过def关键字进行的
- 当你连接到MySQL服务器时,你应使用一个密码。密码不以明文在上传输。客户端连接序列中的密码处理在MySQL 4.1.1中已经升级,很安全。
- Python 是一个美丽的语言,可以激发用户对它的爱。所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我
- 引子之前在学习Django时,对状态保持这个概念很模糊,不知道怎么去保持,通过什么去实现保持都不太清楚;稍微花了一点时间,把状态保持的基本概
- 代码如下:use tempdb if object_id('tempdb..#table') is not null dro
- 环境:ubuntu 16.04 python3.5 pycharm包 : wave pyaudio sys上代码:AudioPlayer.p
- pandas读取一组数据,可能存在重复索引,虽然可以利用drop_duplicate直接删除,但是会删除重要信息。比如同一ID用户,多次登录