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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

案例描述:

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

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

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

一、原理过程

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

  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中进行修改保存,再重新启动数据库实例才能生效。












本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1948525 ,如需转载请自行联系原作者




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
13 0
|
1月前
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
834 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
2月前
|
安全 关系型数据库 MySQL
mysql安全性能
mysql安全性能
38 10
|
3月前
|
缓存 关系型数据库 MySQL
如何优化MySQL性能
对于使用MySQL数据库的开发人员来说,优化数据库性能是一个非常重要的任务。本文将介绍一些优化MySQL性能的方法,包括索引优化、查询优化、硬件升级等方面,帮助开发人员提高应用程序的性能和响应速度。
114 0
|
28天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
96 0
|
17天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
83 1
|
23天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
23天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
23天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
3月前
|
存储 关系型数据库 MySQL
Mysql 存储大数据量问题
Mysql 存储大数据量问题
93 1