前言:使用 Benchmark 工具进行测试是一个探索数据库性能的好方法,然而由于大家对 OceanBase 的架构或者特性还不够熟悉,经常会发现使用 Benchmark 工具跑出来的性能数据并不符合预期。本篇文档以此为锲机为大家介绍「影响 Benchmark 性能的 OceanBase 常见操作和场景」,希望能对各位在 Benchmark 测试中提供参考。
一、转储合并
1、转储操作
转储是租户级别的,当一台服务器中一个租户 MemTable 的内存占用超过租户内存上限的一定比例时,就会触发小版本冻结(Minor Freeze)。所谓冻结,就是禁止当前活跃 MemTable 的写入,并同时创建新的空 MemTable 以支持新的写入。 被冻结后的 MemTable 就成为一个静态的数据结构,可以被后台线程读取并转储为 SSTable。
2、合并操作
合并是全局级别的,合并会把当前大版本的 SSTable 和 MemTable 与前一个大版本的全量静态数据进行合并,产生新的全量数据,合并操作包含转储操作。
3、对性能的影响
· 合并转储简单说就是把内存数据刷到磁盘上,存储层统计信息可以更准确,生成的执行计划更优更稳定。
· MemTable SCAN 性能差,合并后 Range 查询会更优。
4、受影响的场景
· 对 TPCH、BMSQL 来说
一般来说 TPC-H、BMSQL 数据量较大,导完数据后大概率会触发转储,此时做合并会有积极影响。
影响分两个方面:
1、Major 合并会将基线 SSTable 与之后转储的增量 SSTable 合并为一个 SSTable,减少跨 SSTable 的查询,提升查询效率 ;
2、同时更新统计信息,使执行计划更稳定。
· 对 Sysbench 来说
Sysbench 一般数据量较小,导完数据后尽量不要发生转储,此时做合并有消极影响。
影响在于: 合并转储将 MemTable 刷到硬盘,多了一个 Major SSTable ,从硬盘操作数据肯定比在 MemTable 要慢( MemTable SCAN 是另外一种情况,不在此讨论。),导致性能下降。




