使用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) 访问粒度