mysql 写入性能 datafile_MySQL存储写入性能严重抖动分析

案例描述:

通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差;

两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常。

也就是说,在对系统、数据库监控中,出现了性能波谷,存储写入性能严重抖动,为什么?

一、原理过程

aa6894f0bb0a8242dab9dc784f654582.png

由上原理图,进行过程解析:

1、事务提交,修改buffer_pool中的数据形成脏页,并且同时生成redo日志,将日志写入磁盘redo log中;

2、事务提交成功;

假设,有三组redo log文件,

3、继续事务提交,修改数据,写redo log,如果innodb_log_file_size的数值很小,但是产生的redo日志信息很大,这样第一组redo日志很快就会被写满,就要进行日志文件切换;

4、如果三组redo log文件都被写满了,就需要进行日志覆盖;

5、如果需要覆盖的redo log日志文件记录的脏页信息还没有写入到磁盘中,数据库就会主动加大写的力度将脏页信息刷到磁盘里;

6、在将redo日志文件对应的脏页刷入磁盘的过程中,事务没有办法提交,影响业务。

二、原理分析

1、通过对redo log的修改时间查看日志文件切换时间

通过shell> ls -l /mydata/ib_logfile*,查看开始修改的时间和最后修改的时间,计算logfile切换时间。

2、如果redo日志文件切换时间过短,也就是切换频繁,就很容易导致写抖动

1、正常业务繁忙的会是10-20分钟;

2、如果是比一般的时间短,说明文件小,切换频繁。

三、解决写抖动问题

1、增加redo日志文件数量

mysql> show global variables like 'innodb_log_files_in_group';

+---------------------------+-------+

| Variable_name | Value |

+---------------------------+-------+

| innodb_log_files_in_group | 2 |

+---------------------------+-------+

1 row in set (0.01 sec)

2、扩大日志文件容量

mysql> show global variables like 'innodb_log_file_size';

+----------------------+----------+

| Variable_name | Value |

+----------------------+----------+

| innodb_log_file_size | 50331648 |

+----------------------+----------+

1 row in set (0.01 sec)

3、提高log file的写性能:将日志文件放到写性能优质的磁盘上

mysql> show global variables like 'innodb_log_group_home_dir';

+---------------------------+-------+

| Variable_name | Value |

+---------------------------+-------+

| innodb_log_group_home_dir | ./ |

+---------------------------+-------+

1 row in set (0.01 sec)

注意:

上面的这三个参数都非动态参数,需要在配置文件/etc/my.cnf中进行修改保存,再重新启动数据库实例才能生效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值