闪存存储特性以及数据库相关优化思路

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
数据安全中心,免费版
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:


闪存存储当前越来越多的应用于企业级环境,特别是提升数据库性能方面。本次分享主要介绍闪存的特性,闪存的劣势及其解决机制,以及采用闪存存储时数据库的一些优化思路。


目录


  • 闪存的特性

  • 闪存的劣势及其解决机制

  • 数据库场景测试


一.闪存的特性


凡是采用Flash Memory的存储设备,可以统称为闪存存储。我们经常谈的固态硬盘(SSD),可以由volatile/non-volatile memory构成,其实固态硬盘的范畴是大于闪存的,只是当前的固态硬盘大多数采用闪存介质,所以很多时候我们默认固态硬盘就是闪存盘。


除了闪存以外,还有其它多种快速存储技术,如DRAM ,NVRAM, MRAM and Spin-Torque(自旋力矩磁阻式随机存取内存), Carbon Nanotube( 碳纳米管 ), Phase Change Memory(相变内存),Memristor ( 忆阻器 )等等。


未来存储设备的创新其实就是存储材料的创新,这也是国外很多初创的半导体公司一个研发的方向。


从半导体的角度来看,闪存属于非易失性存储,但是属于不可靠介质。因为闪存是采用电子驱动,因此具有电子元器件所固有的缺陷,电子泄露,衰减等等。


决定闪存存储大规模应用的主要因素是量产规模、稳定性以及经济性。


闪存设备随着使用时间和数据量的增长,坏块会逐渐增加,会产生大量的ECC Error,这时设备性能和可靠性会大幅度下降,对应用性能和数据安全带来影响。闪存产品在使用过程中往往会存在性能衰减和可靠性下降的问题。这里提醒一下,如果我们使用闪存产品,一定要使用工具监控闪存产品的健康状态,防止老化,数据丢失。


通过对闪存产品的良好设计和质量控制,也可以避免性能衰减和可靠性下降的问题,但是往往会带来成本的增加和性能的下降(相比于直写闪存)。


对于企业级应用而言,稳定是第一位,其次是易用性,第三才是性能。闪存设备的性能相比于应用的需要是足够的。



闪存在企业级以及数据中心的应用,实际上也是依赖于互联网以及大数据的兴起。


互联网的分布式架构以及多副本保护机制,消除了集中式存储的瓶颈,满足了海量用户以及应用的请求,带来了更高的性能需求。同时多副本的保护机制,又解决了闪存作为不可靠介质可能带来的数据存储安全的问题。


但是由于闪存的可靠性问题,其实互联网客户也是有选择地在特定业务上使用闪存,并不是在所有业务上都使用闪存设备。


有的时候我们还会发现意外断电后,闪存设备故障,这往往是由于电路保护机制不完善或固件bug造成的。


二.  闪存的劣势及其解决机制


在使用闪存设备的时候,我们需要考虑的问题要比使用磁盘多。



当前我们碰到的很多问题是,相比于IOPS,闪存比磁盘性能高上几十甚至上百倍,但是我们将数据放置到闪存上,性能提升并没有这么高,甚至没有提高。


原因是闪存主要解决的是IO性能问题,并且主要随机写的性能,而顺序读写性能并不如多块磁盘汇聚之后的性能。

Linux文件系统



以Linux为例,Linux ext4属于日志型文件系统,为了保护数据安全,通过Journal机制提供一致性保护。那么我们在部署过程中可以将Journal日志放置到闪存上,可以提升IO性能。因为应用的IO操作还是通过OS层面完成的,因此OS层面的IO性能提升也可以带来应用性能提升。


另外,操作系统以及应用的IO层往往是针对磁盘的特性进行了优化,这些优化往往不适用于闪存设备,甚至还有副作用。例如OS层面IO scheduler有三种模式,CFQ、Deadline和noop,其中前两种模式是针对磁盘低IO特性和物理寻道机制进行优化的,例如做IO合并、寻道算法等等,会有默认的等待严实以等到更多的IO block进行合并和处理。对于闪存而言,是不存在寻道处理的,因此前两种处理机制反而会造成延时增加。如果我们在系统中使用了SSD,需要将IO scheduler调整为noop模式。


三. 数据库场景测试


刚才谈到为了保证数据安全,我们需要在Linux采用Journal模式,但是MySQL也有double write的机制,我们需要怎么既保证数据安全,又不会增加过多的机制造成性能下降。我们在我们的闪存产品上做了这方面的测试。



上面是mySQL的写入机制。当系统意外断电时,数据库16K的页面可能没有完成,就会出现partial write,而partial write会造成数据库损坏。


MySQL 的Double write就是为了解决partial write造成的问题,但是DW也会带来两个问题,性能惩罚和对SSD的磨损增加。



我们按照上面的场景在我们的闪存卡上进行了测试。


在安全性层面,只要Metadata Journal+DW或Metadata Journal+Data Journal,都可以保护数据库数据的安全,也就是意外掉电数据不会损坏,数据库可以正常启动,数据不丢失。


但是在CPU bound的情况下,前个组合的性能衰减(8%)要小于后面的保护组合(10%)。如果是在IO bound的情况下,前个组合的性能衰减(10%)要小于后面的保护组合(34%)。但是DW下的数据写入量会比后者增加23%,也就是会增加SSD的磨损。这个是我们在应用时需要注意的。


另外,我们在做DB2的测试时也发现几个问题:


闪存存储在非分区表的简单的查询统计条件的查询方面具有明显的优势和性能提升,性能提升3到4倍,但是在分区表的统计和加限制条件的查询方面的性能提升并不明显。而且对相应的复杂的存储过程的统计计算未能体现出优势。这可能是由于分区表设计机制主要是面向磁盘性能优化,在闪存上反而有负面影响。


另外我们在Oracle数据库上应用闪存测试时发现,带子查询的多表关联查询语句的存储过程的调用性能表现很差,查看AWR发现大量的cache latch,出现长时间等待, 而在磁盘存储上没有这种情况。我们分析是由于闪存的性能比磁盘高很多,造成cursor数据量大,缓存内的latch冲突增加。通过增大share pool和将复杂查询处理简化为多个小查询处理可以解决这个问题,性能也得到明显提升。

Q & A
 
 

Q1 : 请问闪存和磁盘的比较中MTBF是什么意思?

A1:MTBF(Mean Time Before Failure),失败前平均工作时间。闪存其实是没有MTBF的概念的,因为闪存有擦写次数的限制,数据擦写到一定数量后,闪存介质就会物理性地损坏,闪存的寿命是可以通过监控使用状况推算出来的。而磁盘的损坏其实是概率,会有MTBF指标。


Q2 : 请问在测试db2的时候,是dpf环境,还是单机?

A2:单机。


Q3:mysql是基于xfs测试的吗?

A3:Mysql测试时是基于ext4的。


Q4:闪存产品有没有不同的系列,类似传统的高中低端存储那样的分类?

A4:闪存也分高中低的,用于企业级高性能的一般以PCIe  NVMe卡的形式为主。其实闪存产品的质量标准还有很多细分,这里就不细说了。


Q5:请问能谈谈Spacex用的闪存产品吗?

A5:SpaceX用的是我们嵌入式闪存产品,和我们企业级闪存采用同样的技术架构和闪存颗粒。主要用于控制代码存储和运行状态数据存储。


Q6:请问您有测过云主机的ssd 吗?

A6 :  云主机的SSD基本上都采用SATA SSD,当前云计算平台在数据库应用方面还是个弱项。我们下一步计划在ceph分布式存储上进行数据库测试,这也是尝试在云计算平台上运行关键数据库应用。


Q7:写放大,和抖动的问题现在已经改善了很多吧?

A7 :写放大和抖动问题是考验闪存厂商的一个关键指标,在产品设计的时候就要考虑。各家处理的方式都不一样。我们能做到最大的WAF是6。而在性能抖动方面自认为处理最好的是我们的产品,因为性能抖动主要是由垃圾回收处理和磨损平衡处理引起的。而我们采用的分区擦除算法和三重磨损平衡算法是完全基于对闪存颗粒底层的特性了解和经验积累。另外SSD还有一个很大的问题是性能衰减。使用1,2年后,性能可能只有原来的一半或者更低,性能波动也会频繁出现。


讲师介绍:李炫辉


  • 现任绿芯半导体系统科技(上海)有限公司业务发展副总裁,负责闪存解决方案的市场推广和管理。

  • 从事信息化工作二十多年,先后在戴尔公司以及惠普公司负责企业级解决方案和存储产品管理及销售工作。

  • 曾任戴尔中国区解决方案部高级技术经理,负责戴尔企业级解决方案架构设计,管理和实施, 先后负责Dell互联网行业客户以及能源金融制造业服务器、存储和网络解决方案。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-01-18

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
1月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
4月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
5月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
223 1
|
1月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
175 6
|
2月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
517 5
|
4月前
|
机器学习/深度学习 SQL 运维
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
161 4
|
5月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
7月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
270 12
|
8月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。

热门文章

最新文章