使用TerarkDB提升MyRocks的性能

——随机读场景下的 MySQL性能优化

雷鹏 peng@

CTO

大纲

l MyRocks简介

l 为什么选择 MyRocks

l 传统数据库的块压缩

l 硬件的发展趋势

l TerarkDB 和 MyRocks 的关系

l TerarkDB 的原理、优势、劣势

l 新的问题,以及优化建议

MyRocks简介

l MyRocks=MySQL+RocksDB(存储引擎)

l 基于 MySQL-5.6 :代码(MySQL onTerarkDB)

Ø 增加了一些 MySQL-5.7 的 Feature

Ø 增加了一些针对 RocksDB特有的语法和功能

Ø 有部分功能不支持,详见:MyRocks-limitations

l 深入了解 MyRocks :MyRocks DeepDive

MyRocks主要功能

l 类似 InnoDB 的功能

l 事务

Ø 基于 MVCC

Ø ReadCommitted,RepeatableRead(PostgreSQL-style)

l 在线备份

Ø 逻辑备份(使用 mysqldump)

Ø 二进制备份( 使用 myrocks_hotbackup )

为什么选择MyRocks

l 成熟稳定,满足绝大部分功能需求

l 使用单一 DB,适合云 DB多租户场景

l 基于 RocksDB,直接兼容TerarkDB

l 基于 LSM,对 SSD友好

传统数据库都使用块压缩——

l InnoDB

l LevelDB/RocksDB...

l TukoDB

块压缩有着难以克服的,

l WiredTiger 固有的缺陷,

l Cassandra/ScyllaDB 我们看看它的原理,

l CouchDB 分析一下——

l HBase

l ……

块压缩的原理

l 多条数据打包成一个块,索引定位到块

Ø 增大块:索引更小,单个块中的数据条数更多,无效解压更多

Ø 减小块:索引更大,压缩算法无法有效工作,压缩率更低

l 块缓存 DirectIO导致缓存中只有

问题 1

解压后的数据,一定程

太慢了——

Ø 每次访问都解压一个块,

度上减小了内存利用率

Ø 解压出来的块放入缓存

问题 2 DirectIO需要对齐访问,

Ø 操作系统还有文件缓存 双缓存问题!

使用DirectIO 最坏情况下需要跨边界

(压缩的数据保存在文件中) 多读两个块

硬件的发展趋势

l 机械硬盘的 容量/价格 仍有巨大优势

Ø 更耐写,更安全;氦气硬盘,HAMR 技术……

l SSD越来越便宜,NVMe/PCIe 已广泛应用

Ø 不耐写,写坏了数据就永久丢失

Ø NVMe/ PCIe 接口的 SSD更快,延迟更低

l 3DXPoint ,比 SSD更快,更耐写

Ø 第一代产品 Optane(闪腾)已经上市!

Ø 使用 DIMM接口,可当做内存用……

硬件的发展趋势

带宽(MB/s) IOPS 延迟(us) 访问粒度