mysql ssd 应用_MySQL Disk--SSD 特性

本文详细介绍了SSD的特性,包括随机读写性能、写入放大、磨损均衡等,并探讨了SSD的基础知识,如Flash规则、映射表、垃圾回收和磨损均衡算法。此外,还讨论了SSD的断电保护机制及其在Linux IO调度下的性能表现。
摘要由CSDN通过智能技术生成

=======================================================================

SSD 特性

1、随机读能力非常好,连续读性能一般,但比普通 SAS 磁盘好;2、不存在磁盘寻道的延迟时间,随机写和连续写的响应延迟差异不大。3、erase-before-write 特性,造成写入放大,影响写入的性能;4、写磨损特性,采用 Wear Leveling 算法延长寿命,但同时会影响读的性能;5、读和写的 I/O 响应延迟不对等(读要大大好于写),而普通磁盘读和写的 I/O 响应延迟差异很小;6、连续写比随机写性能好,比如 1M 顺序写比 128 个 8K 的随即写要好很多,因为随即写会带来大量的擦除。

=======================================================================

SSD 基础知识

SSD(Solid State Drives)是固态硬盘,使用闪存颗粒来存储数据,闪存又可分为NAND Flash和NOR Flash,通常所说的SSD硬盘都使用NAND Flash芯片来存放数据。

NOR型存储内容以编码为主,其功能多与运算相关;

NAND型主要功能是存储资料。

Nor Flash:主要用来执行芯片上程序

优点:具有很好的读写性能和随机访问性能,因此它先得到广泛的应用;

缺点:单片容量较小且写入速度较慢,决定了其应用范围较窄。

NAND Flash:主要用在大容量存储场合

优点:优秀的读写性能、较大的存储容量和性价比,因此在大容量存储领域得到了广泛的应用;

缺点:不具备随机访问性能。

=======================================================================

SDD Flash规则

在对SSD中数据进行更改操作时,不能像HDD那样对原有数据进行覆盖更新,需要读取到整个页面的数据到缓存,然后更新缓存中的数据,再将更新后的数据写入到空的页面或已擦除的页面,将原有页面标示为无效。以页为单位进行数据写入,以Block为单位进行数据擦除。通常会将页设置为4KB,将Block设置为512KB。

每个Block的擦除次数有上限,擦除次数过多容易导致Block损坏。

=======================================================================

SSD 映射表(Mapping Table)

数据在实际存储单元的绝对地址被称为物理地址,数据在程序中使用的相对地址被称为逻辑地址,SSD在内部维护一张映射表,用来存储物理地址与逻辑地址的映射关系。

映射表使用DRAM(Dynamic Random Access Memory)来存放,方便快速访问,SSD会同时存放多份映射表,并且定期刷新映射表数据。

如果SSD因为断电等原因导致映射表损坏,就会导致整快SSD数据丢失。

=======================================================================

SSD 垃圾回收(Garbage Collection)

垃圾回收指将多块Block中的有效数据集中搬迁到新的Block上,将原有Block进行擦除以备新数据写入。

垃圾回收策略可分为主动垃圾回收策略和被动垃圾回收策略:

主动垃圾回收策略:通过周期性地任务来检查BLOCK的可用空间,主动对需要的BLOCK进行垃圾回收。

被动垃圾回收策略:当数据写入操作发生时,发现当前可用空间小于临界值,首先进行垃圾回收,然后再写入数据。

=======================================================================

SSD 磨损均衡(Wear Leveling)

由于每个BLOCK的擦除次数是有限的,即擦写寿命(Program/Erase Count,P/E值),为避免少数BLOCK被频繁擦除而导致损坏,因此广泛采用磨损均衡算法将写操作均匀分布到各闪存单元上,使得所有的闪存单元与整块盘的最大使用寿命保持在同以数据量级。

磨损均衡算法可分为两类:

动态WL,在对BLOCK进行擦写操作时,优先选择P/E值较低的BLOCK进行操作

静态WL,将P/E值降低的BLOCK数据移动到P/E值较高的BLOCK中存放。

=======================================================================

SSD 预留空间(Over Provisioning)

垃圾回收的前提是有足够的空闲空间来拷贝原BLOCK中有效数据,为避免因缺少空闲空间导致无法进行垃圾回收操作,需要预留一部分存储空间来备用。

预留空间除保证垃圾回收机制外,还用来存放SSD的系统数据如映射表、SSD固件、以及坏块信息等。

当预留空间值越大时,垃圾回收就会越快,写放大就会变小,整快盘的读写性能就会变得越好,但带来的坏处就是用户可用的空间变小。

另外SSD使用Spare Area(SA)区来标记坏块。

=======================================================================

SSD 写放大原因

假设需要在4K的数据页中追加2K的数据,先将该页现有数据读取到缓存,然后将2K新数据追加到缓存,然后挑选一个空的或者已擦除的页面来写入数据,将原数据页标记为无效。在选择空的活已擦除的页面时,如果触发"被动垃圾回收策略",需要将整个BLOCK中的有效数据读取到缓存,然后对整个BLOCK进行擦除,再将缓存中数据写入到BLOCK中,导致实际写入SSD中数据量远大于需求数据写入量,数据写入操作被放大,即SSD 写放大Write Amplification,简称WA。

容易引发SSD写放大场景:

1、SSD磁盘剩余空间较少,导致需要频繁进行垃圾回收释放资源

2、短时间内进行大量的数据删除和写入操作,SSD上存在大量需要回收的Block。

=======================================================================

SSD 断电保护

通常SSD会使用钽电容或者超级电容用作掉电后的供电设备,当检查到SSD断电后,电容设备提供电力来保证SSD将DRAM中缓存的数据写入闪存。

针对DRAM中数据,保护机制分为三种:

保护DRAM中所有数据

只保护DRAM中的用户数据

只保护DRAM中的映射表

如果断电保护机制失效,则很有可能导致SSD出现数据丢失,严重情况下会丢失所有数据。

=======================================================================

SSD与Linux IO调度

SSD在不同调度下的性能:

721b1ee716a9fb10eba60538e044c723.png

=======================================================================

摘抄自:

http://www.cnblogs.com/Christal-R/p/7230304.html

http://www.cnblogs.com/Christal-R/p/7246415.html

http://www.chinastor.com/baike/ssd/0322364312017.html

=======================================================================

5d7bd41f25bef68d4f2636366a0b6703.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值