近年来,经典的关系型数据库仍然占着霸主地位,Memblaze很多研究是针对MySQL等关系型数据库进行的,比如《混合介质的多命名空间管理优化MySQL数据库性能》中提到的混合介质的多命名空间管理,就是一项无需MySQL改动配置便可以在开启Doublewrite的同时降低NVMe SSD写放大,提高性能和寿命的技术。关系型数据库盛行,但是数据库市场也并非一成不变,随着NoSQL,特别是以TiDB为代表的NewSQL数据库的实际应用越来越多。
诞生于Big Data时代的RocksDB
互联网是NoSQL应用最多的行业,Facebook、谷歌以及国内的阿里、网易都走在NoSQL研究和应用的前列,而在NoSQL发展之路上,NVMe SSD必不会缺席。以RocksDB为代表的高性能K/V数据库引擎就擅长于挖掘闪存的读写潜力。另一方面,诞生于Big Data时代的RocksDB,也是为远大于内存容量的海量on-disk数据而优化的,这样的设计使其适合考察存储介质的性能。
关于RocksDB
RocksDB是Facebook公司在2013年基于LevelDB的K/V引擎数据库引擎,受Apache Cassandra 和Apache HBase的启发,以开源的形式发布的。RocksDB着重强调了面向高性能存储介质、multi-core CPU的设计理念;带来了诸如多线程Compaction;低mutex锁以及Column Family等诸多LevelDB中没有的特性。
这篇文章我们就通过几个RocksDB测试来一窥NVMe SSD在NoSQL场景中的性能表现,并对其中涉及到的多队列调用等技术做一个解读。
测试环境
CPU:AMD 1stGen Zen (aka Naples)
EPYC 7351P 16-Core Processor 2.4GHz with HT
内存:128 GB DDR4-2666 DRAM
数据库:RocksDB 5.8.8
操作系统:CentOS 7.4(gcc 4.8.5 )
对比测试中采用的SSD
Plaze5 700 series 4TB (U.2形态)
某主流品牌800GB SATA SSD (6Gb/s)
测试第一阶段使用随机写方式对数据库写入500GB数据并获取存储设备性能数据,第二阶段则是8:2的混合随机读写测试。结果展示包括RocksDB自带的db_bench采集的数据库吞吐数据以及iostat的硬盘性能数据。此外,这次测试也采用了RocksDB默认的Leveled Compaction Strategy (LCS) 策略;并关闭了压缩功能。
第一阶段:数据库_随机写(无压缩)
第一阶段测试中,使用随机写的方式对RocksDB写入500 GB数据,总计 5.12亿 K/V item;我们首先使用了 thread=16的并发压力;并开启了Compaction。
测试结果如下:
SATA: 360.2 MB/s (如下图所示,从 %iowait, avgqu-sz,w_await 都看到了SATA SSD已经饱和的迹象)
领取专属 10元无门槛券
私享最新 技术干货