TerarkDB vs. RocksDB 服务器二
1. 测试数据集
我们在 TPC-H 数据集中使用 lineitem 表,并将 dbgen lineitem 中的 comment 文本字段的长度设置为 512(默认是 27 字节)。 因此,lineitem 表的平均行尺寸为 615 字节,其中,key 是前三个整数字段直接拼接而成的字符串。
数据集的总大小为 554,539,419,806 bytes,897,617,396 rows。 key 的总尺寸是 22,726,405,004 bytes, 剩余的是 value 总尺寸。
TPC-H dbgen 生成最原始的字符串数据,我们直接在测试中使用这些数据而不对数据进行任何转换。
2. 硬件
服务器配置 | |
---|---|
CPU Number | 2 |
CPU Type | Xeon E5-2630 v3 |
CPU Freq. | 2.4 GHz |
CPU Actual Freq. | 2.6 GHz |
Cores per CPU | 8 cores with16 threads |
Cores in total | 16 cores with 32 threads |
CPU Cache | 20M |
CPU bogomips | 4793 |
Memory | 64GB |
Memory Freq. | DDR4 1866Hz |
SSD Capacity | 480GB x 4 |
SSD IOPS | 两个 Intel 730 IOPS 89000 两个 Intel 530 IOPS 41000 |
3. DB 参数
RocksDB | TerarkDB | |
---|---|---|
Level Layers | 4 | 4 |
Compression | Level 0 doesn’t compress Level 1~3 use Snappy |
All level uses Terark Compression |
Compact Type | Level based compaction | Universal compaction |
MemTable Size | 1G | 1G |
Cache Size | 16G | Do not need |
MemTable Number | 3 | 3 |
Write Ahead Log | Disabled | Disabled |
Compact Threads | 2~4 | 2~4 |
Flush Threads (MemTable Compression) |
2 | 2 |
Terark Compress threads | NA | 12 |
Working Threads | 25 in total 24 Random Read, 1 Write |
25 in total 24 Random Read, 1 Write |
Target_file_size_base | Default (64M) | 1G |
Target_file_size_multiplier | 1 (SST size in RocksDB do not influence performance) |
5 |
对于两个引擎,均禁用写入限速:
- options.level0_slowdown_writes_trigger = 1000;
- options.level0_stop_writes_trigger = 1000;
- options.soft_pending_compaction_bytes_limit = 2ull<<40
- options.hard_pending_compaction_bytes_limit = 4ull<<40
4. 测试结果
4.1. OPS Comparison
4.1.1. TerarkDB OPS
3.1.2. RocksDB OPS
4.2. DB Size Comparison
4.2.1. TerarkDB DB Size
4.2.2. RocksDB DB Size
4.3. Memory Usage Comparison
4.3.1. TerarkDB Memory Usage
4.3.2. RocksDB Memory Usage
4.4. CPU Usage Comparison
4.4.1. TerarkDB CPU Usage
4.4.2. RocksDB CPU Usage
5. 测试结果说明
RocksDB (DB Cache 16GB) | TerarkDB | |
0~2 minutes | Read OPS 970K Write OPS 100K (Level Compaction) |
Read OPS 1.92M Write OPS 120K (内存充足) |
2~15 minutes | Read OPS 620K Write OPS 96K |
Read OPS 850K Write OPS 100K (内存充足) |
15~30 minutes | Read OPS 480K Write OPS 83K (读写性能逐渐下降) |
读性能显著下降到 680K 左右. 写性能 88K, CPU 利用率接近 100%, IOWait 接近 0 (内存充足,但是压缩线程开始影响读性能) |
30~60 minutes | Read OPS 220K Write OPS 61K |
Read OPS 在 330K 附近波动, 写 OPS 82K, CPU 利用率开始下降 (压缩线程影响读性能) |
60~120 minutes | Read 17K Write 39K (内存用尽, 读写性能遇到瓶颈) |
Read OPS 在 310K 附近波动. Write OPS 90K 左右. |
3 hours 20 minutes | 读写性能持续下降 | 550G 数据完成写入, Read OPS 在 60 ~ 120K 间波动(压缩线程影响读性能) |
3~11 hours | 读写性能持续下降 | Read OPS 170K 左右 (数据逐渐被压缩, 内存可以装入更多的数据) |
12 hours 40 minutes | 数据完成写入, 数据库总尺寸 234GB (后台持续压缩) |
Read OPS 持续增长 |
18 hours | 数据完全压缩到 209GB, Read OPS 5K 左右 | |
30 hours | 数据压缩完成, Read OPS 在 2.2M 左右 (完整压缩后 47G, 数据可以完全装入内存) |