MySQL存储写入速度慢分析
问题背景描述:
在MySQL中执行SQL语句,比如insert,贼慢,明明可能也就只是一行数据的插入,数据量很小,但是耗费的时间却很多,为什么?
一、存储结构分析
MySQL存储结构图:

解析:
1、读操作:内存读-->cache缓存读-->磁盘物理读
读取到的数据会按上述顺序往回送。
2、写操作:内存数据直接写入cache缓存(非常快)-->写入disk
由上可知,MySQL之所以读写速度快,cache在其中起到了关键作用。
1、Cache缓存特点:
1、速度快
2、掉电数据丢失
3、容量有限
2、保护数据安全(防止意外掉电的数据丢失)应对措施:
在存储中,增加BBU(电池备份单元,就是电池),在掉电后,可以把缓存中的数据写到磁盘中,保证数据不会丢失。
如果没有提供BBU或者BBU坏了,内存数据就不会写入cache缓存中,就会直接写入disk中;相较于写入缓存,写入磁盘的速度就大打折扣(万倍之差)。与此同时,因为慢下来的“写”占了绝大部分“读”的带宽。所以BBU问题是读写性能差的一很大的影响因素。
3、cache缓存容量有限
(4G、8G、16G、32G),系统为了保持cache有用,会周期性的将cache缓存的数据写入磁盘中,避免cache被占满。
二、存储写入速度慢分析
数据库-->写入速度慢-->系统hang住
Q:如何判断写入速度慢?
A:
1、怀疑BBU问题
监控BBU的bug,解决:重启BBU
2、cache被占满(类同于BBU坏了的情况)
1、海量的写入数据占满cache缓存,判断:
shell> iostat -x
mysql> show global status like 'handler_write';
2、cache写入disk的速度慢了(排水速度远小于注水速度)
硬盘I/O异常,负载过高:数据库海量的物理读(异常SQL),判断:
mysql> show status like 'Innodb_buffer_pool_reads';
3、存储性能差问题
1、存储设备差,更新设备
2、灾备同步风险,“再好的工程师,敌不过蓝翔的挖掘机、农民工的锄头……”
三、关于BBU
英文简称:BBU
英文全称:Battery Backup Unit
中文全称:电池备份单元,是电池
1、作用:
在掉电后,把缓存中的数据写到硬盘中,保证数据不会丢失;
是为了意外掉电刷脏数据的一种保护措施;
能够在系统外部供电失效的情况下,提供后备电源支持,以保证存储阵列中业务数据的安全性。
2、许多存储设备都会配备BBU
BBU在电源供应出现问题的时候,为RAID控制器缓存提供电源。当电源断电时,BBU电力可以使控制器内缓存中的数据可以保存一定时间(根据BBU的型号而决定)。用户只需要在BBU电力耗尽(电池有限)之前恢复正常供电,缓存中的数据即可被完整的写回RAID中,避免断电导致数据丢失。
和服务器电池有点不一样,服务器中,在配置RAID卡的时候可以配一个电池,在系统掉电后,能维持内存中的数据不丢失,但时间有限,大约12个小时左右,假如是12小时,如果在12内没有恢复,内存中的数据就会丢失;
3、超级电容
服务器还有一种保护方式,叫超级电容,也是和RAID卡配套的,他能在服务器掉电后把缓存中的数据写入到电容中,而且会永久保存,类似写入硬盘,实际上是写入电容,你就理解成写入U盘把。他比电池好,即使服务器在12个小时后没有恢复电源,也不会造成数据丢失。
MySQL存储写入速度慢分析的更多相关文章
- 通过 MySQL 存储原理来分析排序和锁(转)
先抛出几个问题 为什么不建议使用订单号作为主键? 为什么要在需要排序的字段上加索引? for update 的记录不存在会导致锁住全表? redolog 和 binlog 有什么区别? MySQL 如 ...
- Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)
在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...
- Mysql存储引擎比较
Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...
- MySQL存储引擎总结
MySQL存储引擎总结 作者:果冻想 字体:[增加 减小] 类型:转载 这篇文章主要介绍了MySQL存储引擎总结,本文讲解了什么是存储引擎.MyISAM.InnoDB.MEMORY.MERGE等内 ...
- MySQL 存储php中json_encode格式中文问题及解决
MySQL 存储php中json_encode格式信息 ,遇到中文时, 会变成一堆类似uxxxx信息. 1. 原因分析:在存储到数据库时!MySQL 不会存储 unicode 字符: MySQL 仅 ...
- Mysql存储引擎__笔记
Mysql存储引擎(表类型): Mysql数据库: 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以使存储器上一些文件的集合或者一些内存 数据的内存数据的集合. Mysql数据库是开放源代 ...
- 分布式MySQL数据库TDSQL架构分析
摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TD ...
- 数据库 --> MySQL存储引擎介绍
MySQL存储引擎介绍 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然 ...
- mysql存储引擎和索引
正确的创建合适的索引,是提升数据库查询性能的基础. 第一章 mysql之索引 索引的定义:索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构. 我们为什么要使用索引: a.极大的减少存储引 ...
随机推荐
- C#高级编程9 第17章 使用VS2013-C#特性
C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...
- 第一章 flex单词计数程序
学习Flex&Bison目标, 读懂SQLite中SQL解析部分代码 Flex&Bison简介Flex做词法分析Bison做语法分析 第一个Flex程序, wc.fl, 单词计数程序 ...
- C语言事实上不简单:sizeof
问:C语言中一共同拥有多少个keyword? 答:32个. 答不上来的没关系.非常正常.我们玩的是程序的艺术.而不是背数字. 只是这个特殊的数字1<<5也是非常好记的-.-. 问:size ...
- Ftrace使用指南及跟踪系统调用
http://vonnyfly.github.io/2013/06/24/ftraceshi-yong-zhi-nan/
- makefile中的shell编程注意点
参考:http://blog.csdn.net/wanglang3081/article/details/49423105 (1)Makefile本质上来讲也是shell脚本,即每条command都是 ...
- 树莓派3中没有/dev/video0的解决方法(使用OpenCV编程调用树莓派摄像头的方法)
一.问题 使用下列方法调用OpenCV编程调用树莓派摄像头时总是失败,提示调用Grabber的start()时失败. import org.bytedeco.javacpp.opencv_core; ...
- 如何查看Ubuntu下已安装包版本号
之前的工作大部分在红帽企业版 下工作,查找安装包用rpm 很方便,但是由于这边大部分的服务器的运行环境是ubantu,补补. 在终端下也可以很方便查看已安装的软件包版本号,也能单独查看所需要的软件包是 ...
- windows下JDK环境配置
原文地址:http://blog.sina.com.cn/s/blog_618592ea0100oeif.html 一.JDK1.6下载 目前JDK最新版本是JDK1.6,到http://java.s ...
- 【SqlServer】解析SqlServer的分页
方式1: 假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 * from test where id not in ( --40是这么计算出来的:10*(5-1) id ...
- Ubuntu 13.10 安装Terminalx 后更改默认终端设置
1.安装 terminalx, sudo apt-get install terminator 2.Ctrl+ Alt + t 试一下打开什么终端,我的默认启动的是Terminator;如果想换换默认 ...